Назад | Перейти на главную страницу

не может остановить mysql / mariadb с помощью `systemctl stop`

ИЗМЕНИТЬ, он начал работать сам по себе. Я не вижу, как удалить или отметить этот вопрос.

Mariadb работает на CentOS 7

$ ps aux | grep mysqld
mysql     4249  0.0  9.0 841448 89576 pts/0    Sl   12:25   0:00 /usr/libexec/mysqld ...snip...
$ mysqladmin ping && echo ok
mysqld is alive
ok

Но когда я пытаюсь это остановить.

$ sudo systemctl stop mariadb.service && echo ok
ok

Бег systemctl status mariadb до и после показывает, что эта строка была зарегистрирована:

Nov 17 13:02:31 sk-test1 systemd[1]: Stopped MariaDB database server.

Тем не менее, приведенная выше команда ps / ping показывает, что mysqld все еще работает с тот же PID.

Почему служба не останавливается?

Когда возникает условие, когда MySQL или MariaDB небезопасно завершать работу в безопасном режиме, он просто зависает. Это происходит со мной каждый раз, когда у меня заканчивается место на диске.

Лучший способ решить эту проблему - добавить больше дискового пространства, но если это невозможно, я останавливаю все приложения, а затем убиваю службу. Вы потеряете некоторые ожидающие транзакции, но целостность базы данных должна быть в порядке, если вы используете движок XtraDB или InnoDB.

XtraDB используется по умолчанию для MariaDB. InnoDB используется по умолчанию для последней версии Oracle MySQL и сервера Percona.

Изменить 1: Чтобы отключить службу MariaDB или Mysql, вы можете использовать mysqladmin shutdown. Или просто запустите: kill -SIGTERM pid-of-mysqld-process. Смотрите также: https://mariadb.com/kb/en/mariadb/shutdown/

Изменить 2:

Если вы перезапустите MySQL во время операции записи (INSERT, UPDATE, DELETE, ALTER), механизм InnoDB откатит транзакцию. Вы можете увидеть прогресс отката с помощью show engine innodb status. Смотрите ниже.

Проверьте, какие запросы выполняются медленно. Следующая команда возвращает все запущенные запросы, которые были запущены 10 секунд или более назад.

mysql -e "SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND<>'Sleep' and TIME > 10"

Если у вас медленный запрос, использующий движок InnoDB, вы можете увидеть, как он продвигается:

mysql -e "show engine innodb status \G"|less

Чтобы проверить статус MySQL или MariaDB

systemctl status mariadb

Чтобы остановить MySQL / MariaDB

systemctl stop mariadb