Systemd Mysql不会停止
升级到15.04后,我有很多乐趣了解systemd。 我想我一切正常,除了我无法阻止mysql.service; systemctl命令只是挂起而且mysql一直在运行。 有没有其他人经历过这个或者可能知道发生了什么?
我有同样的问题(升级到15.04,使用官方文件和配置)。
我必须进行以下更改才能使用sytemctl
手动停止mysql
守护程序并在系统重启/关闭时自动停止:
-
使
/etc/mysql/debian.cnf
可供mysql
用户使用sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
-
提供略微修改的
mysql.service
文件:sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/ sudo chmod 755 /etc/systemd/system/mysql.service
-
通过在编辑器中打开复制的文件来提供显式停止命令:
sudo nano /etc/systemd/system/mysql.service
并在
[Service]
部分下添加以下行:ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
在Nano中,使用Ctrl + O保存(Linux方式!),按Ctrl + X退出。
-
使系统知道新的服务文件:
sudo systemctl daemon-reload
我遇到了与Ubuntu 15.10桌面相同的问题,我找到了解决方法:
/etc/mysql/mysql.conf.d/mysqld.cnf中的log_error参数已被注释掉。 取消注释参数后,systemd会毫无问题地执行mysqld shutdown。
你的问题是thread_pool_size。 如果它远远高于内核/线程数,除非使用mysqladmin shutdown命令,否则无法正常关闭。
例如:您有2个核心CPU和4个线程。 如果你将它设置为1-4 – 它将正常工作。 如果按照许多“高性能”博客的建议将其设置为16,那么它就会变得很糟糕。
我有一个类似的问题, mysql / mariadb在systemd指示时无法停止,无论是在关机时还是用sudo service mysql stop
手动调用。
在我的情况下,我在UEFI模式下双启动Ubuntu / Windows,这些操作系统解释不同的硬件时间,因此两个操作系统在启动时与Internet时间服务器同步。
如果硬件时间在运行时发生变化,MySQL(和Mariadb)无法停止。
您需要将启动MySQL推迟到timeync之后。 理想情况下,这可以通过使用After: time-sync
在mysql上插入时间依赖来完成,但这对我不起作用。
适用于我的解决方案(您可以使用mariadb替换mysql以获得相同的效果):
-
使用
sudo systemctl disabled mysql.service
禁用mysql -
创建一个脚本(确保它的可执行文件),它会在一些延迟
/usr/bin/delay_mysql
之后启动mysql/usr/bin/delay_mysql
带有内容:#!/bin/sh sleep 30s /etc/init.d/mysql start
-
创建一个systemd服务来运行包含内容的新脚本
/etc/systemd/system/delay_mysql.service
:[Unit] Description=Delay start of MySQL / MariaDB [Service] Type=oneshot ExecStart=/usr/bin/delay_mysql [Install] WantedBy=multi-user.target
-
使用
sudo systemctl enable delay_mysql.service
注册新服务
这将导致您的脚本在多用户级别运行,在Ubuntu上为3,4,5。
就在复制mysql.service
你必须在之后做一个chmod
。
cp /lib/systemd/system/mysql.service /etc/systemd/system/ chmod 755 /etc/systemd/system/mysql.service
在我的情况下,维护用户debian-sys-maint
之间的密码不匹配在/etc/mysql/debian.cnf
和MySQL数据库中的一个之间。
该用户用于MySQL关闭和其他function。 在MySQL更新之后,可能会发生文件和数据库之间存在传递不匹配的情况。 如果将数据库从一个MySQL移动到另一个MySQL,也可能发生这种情况。 如果要从不同机器上的其他MySQL导入所有数据库和用户,则需要重新同步维护用户( debian-sys-maint
)密码。
您需要这样做:在ubuntu / debian文件中检查您当前的密码:
sudo cat /etc/mysql/debian.cnf # Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint password = n4aSHUP04s1J32X5 socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] user = debian-sys-maint password = n4aSHUP04s1J32X5 socket = /var/run/mysqld/mysqld.sock basedir = /usr
您可以在此处查看系统将使用的password = n4aSHUP04s1J32X5
: password = n4aSHUP04s1J32X5
下一步是将MySQL更新为相同的密码:登录MySQL:
~$ mysql -u root -p
输入密码以访问MySQL
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';**
之后不再出现关机问题,没有10分钟等待,安装使用此维护帐户的应用程序(如phpmyadmin)没有问题。
更新:不幸的是,这并没有解决问题。 它使它变得随机 – 有时我可以停止服务而不会发出另一个时间它会冻结服务停止。