无法使用“systemctl stop”停止 mysql/mariadb

无法使用“systemctl stop”停止 mysql/mariadb

编辑它开始自行工作。我不知道如何删除或标记此问题。

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 mariadbbefore和after显示此行已被记录:

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

尽管如此,上面的 ps/ping 命令显示 mysqld 仍然在运行相同的 PID

服务为何不会停止?

答案1

检查 MySQL 或 MariaDB 的状态

systemctl status mariadb

停止 MySQL/MariaDB

systemctl stop mariadb

答案2

当 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:

如果在执行写入操作(INSERT、UPDATE、DELETE、ALTER)期间重启 MySQL,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

相关内容