编辑它开始自行工作。我不知道如何删除或标记此问题。
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
before和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