Systemd Mysql不会停止

升级到15.04后,我有很多乐趣了解systemd。 我想我一切正常,除了我无法阻止mysql.service; systemctl命令只是挂起而且mysql一直在运行。 有没有其他人经历过这个或者可能知道发生了什么?

我有同样的问题(升级到15.04,使用官方文件和配置)。

我必须进行以下更改才能使用sytemctl手动停止mysql守护程序并在系统重启/关闭时自动停止:

  1. 使/etc/mysql/debian.cnf可供mysql用户使用

     sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf 
  2. 提供略微修改的mysql.service文件:

     sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/ sudo chmod 755 /etc/systemd/system/mysql.service 
  3. 通过在编辑器中打开复制的文件来提供显式停止命令:

     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退出。

  4. 使系统知道新的服务文件:

     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 / mariadbsystemd指示时无法停止,无论是在关机时还是用sudo service mysql stop手动调用。

在我的情况下,我在UEFI模式下双启动Ubuntu / Windows,这些操作系统解释不同的硬件时间,因此两个操作系统在启动时与Internet时间服务器同步。

如果硬件时间在运行时发生变化,MySQL(和Mariadb)无法停止。

您需要将启动MySQL推迟到timeync之后。 理想情况下,这可以通过使用After: time-sync在mysql上插入时间依赖来完成,但这对我不起作用。

适用于我的解决方案(您可以使用mariadb替换mysql以获得相同的效果):

  1. 使用sudo systemctl disabled mysql.service禁用mysql

  2. 创建一个脚本(确保它的可执行文件),它会在一些延迟/usr/bin/delay_mysql之后启动mysql /usr/bin/delay_mysql带有内容:

     #!/bin/sh sleep 30s /etc/init.d/mysql start 
  3. 创建一个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 
  4. 使用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 = n4aSHUP04s1J32X5password = n4aSHUP04s1J32X5

下一步是将MySQL更新为相同的密码:登录MySQL:

 ~$ mysql -u root -p 

输入密码以访问MySQL

 mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';** 

之后不再出现关机问题,没有10分钟等待,安装使用此维护帐户的应用程序(如phpmyadmin)没有问题。

更新:不幸的是,这并没有解决问题。 它使它变得随机 – 有时我可以停止服务而不会发出另一个时间它会冻结服务停止。