升级到15.04之后,我对认识systemd感到很开心。我想除了我无法停止mysql.service之外,其他所有东西都可以工作;systemctl命令只是挂起,而mysql继续运行。有没有其他人经历过这种情况,或者可能知道发生了什么事?
mysql.service
脚本还是自己滚动脚本?
升级到15.04之后,我对认识systemd感到很开心。我想除了我无法停止mysql.service之外,其他所有东西都可以工作;systemctl命令只是挂起,而mysql继续运行。有没有其他人经历过这种情况,或者可能知道发生了什么事?
mysql.service
脚本还是自己滚动脚本?
Answers:
我遇到了同样的问题(使用官方文件和配置升级到15.04)。
我必须进行以下更改,才能mysql
手动停止守护程序,sytemctl
并在系统重新引导/关闭时自动停止守护程序:
使用户/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
我也遇到了类似的问题,mysql / mariadb在systemd指示下无法停止,无论是关机还是手动调用sudo service mysql stop
。
在我的情况下,我以UEFI模式双重引导Ubuntu / Windows,并且这些OS解释不同的硬件时间,因此这两个OS在启动时都会与Internet时间服务器同步。
如果在运行时更改了硬件时间,MySQL(和Mariadb)将无法停止。
您需要将启动MySQL的时间推迟到时间同步之后。理想情况下,可以通过在mysql上插入一个时间依赖来完成,After: time-sync
但这对我不起作用。
对我有用的解决方案(您可以用mariadb替换mysql以达到相同的效果):
使用禁用MySQL
sudo systemctl disabled mysql.service
创建一个脚本(确保它是可执行的),该脚本将在/usr/bin/delay_mysql
内容延迟一段时间后启动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。
在我的情况下,它是为维护用户的密码不匹配debian-sys-maint
之一之间/etc/mysql/debian.cnf
,一个在MySQL数据库。
该用户用于MySQL关闭和其他功能。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
下一步是将MySQL更新为相同的密码:登录MySQL:
~$ mysql -u root -p
输入密码以访问MySQL
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';**
之后,关闭不再有问题,没有10分钟的等待,安装使用该维护帐户(如phpmyadmin)的应用程序也没有问题。
更新:不幸的是,这并没有解决问题。它是随机的-有时我可以停止服务而不会发出其他通知,因为它将在服务停止时冻结。