EDIT он начал работать сам по себе. Я не понимаю, как удалить или отметить этот вопрос.
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
раньше и after показывает, что эта строка была зарегистрирована:
Nov 17 13:02:31 sk-test1 systemd[1]: Stopped MariaDB database server.
Тем не менее, приведенная выше команда ps / ping показывает, что mysqld все еще работает с тем же PID .
Почему служба не останавливается?
Чтобы проверить состояние MySQL или MariaDB
systemctl status mariadb
Чтобы остановить MySQL / MariaDB
systemctl stop mariadb
Когда есть условие, когда это небезопасно для 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