无法启动/停止mysql服务


28

在运行MySQL的情况下接管Debian Etch Web服务器。

我通常使用以下命令启动,停止和重新启动msyql:

/etc/init.d/mysql重新启动

出于某种原因,我得到以下信息:

:〜#/etc/init.d/mysql停止

停止MySQL数据库服务器:mysqld失败!

mysql进程运行良好:

:~# ps aux | grep mysql 
root      2045  0.0  0.1   2676  1332 ?        S    Jun25   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     2082  0.6 10.7 752544 111188 ?       Sl   Jun25  18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root      2083  0.0  0.0   1568   504 ?        S    Jun25   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     11063  0.0  0.0   2856   716 pts/0    S+   17:29   0:00 grep mysql

我敢肯定有一些非常简单的方法可以做到,但是我也想了解发生了什么。为什么典型方式对我不起作用?

编辑更新 作为更新:

JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed 
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                                         Version                                      Description
 +++-============================================-============================================-========================================================================================================
un  mysql-client                                 <none>                                       (no description available)
un  mysql-client-4.1                             <none>                                       (no description available)
ii  mysql-client-5.0                             5.0.32-7etch8                                mysql database client binaries
ii  mysql-common                                 5.0.32-7etch8                                mysql database common files (e.g. /etc/mysql /my.cnf)
un  mysql-common-4.1                             <none>                                       (no description available)
ii  mysql-server                                 5.0.32-7etch8                                mysql database server (meta package depending on the latest version)
un  mysql-server-4.1                             <none>                                       (no description available)
ii  mysql-server-5.0                             5.0.32-7etch8                                mysql database server binaries

mysqladmin shutdown确实可以,但是我仍然很好奇为什么/etc/init.d/mysql命令不起作用。


对我来说,问题是寻找的是手工安装/tmp/mysql.sock而非/var/run/mysqld/mysqld.sock。因此,Debian维护者的脚本无声地发出了一个错误。你只需要修复socket=/etc/mysql/debian.cnf
伊凡

Answers:


25
mysqladmin shutdown

应该可以关闭服务器。

我看到两种可能的可能性:

  1. MySQL有问题,由于某种原因拒绝关闭。
  2. 以前的管理员做了一些奇怪的事情。要么修改了init.d脚本,要么根本不使用Debian软件包来安装MySQL。

什么dpkg --list mysql\*发言权?

/var/log/mysql.err说什么?还是其他mysql日志?

编辑:

所以mysqladmin shutdown工作?

据此,将安装mysql-server软件包(mysql-server-5.0; mysql-server软件包可能只是一个存根)。那么他们可能已经安装了它?跑步debsums mysql-server-5.0可能会告诉您更多信息。 dpkg --listfiles mysql-server-5.0也可以帮忙...

/etc/init.d/mysql中实际上是什么?我还没有检查过该软件包的特定版本,但是它应该尝试使用mysqladmin shutdown...也许您很幸运,他们只是打破了那个版本...


欢呼声,在帖子中添加了更多信息。
Derek Organ

我怀疑他们没有使用Debian软件包安装mysql
Derek Organ

至少有人曾经使用过一个Debian软件包。他们可能从源代码编译和重写了实际的文件,或者把它弄坏了一些其他的方式...
自由报

22

为什么会这样

如果您执行mysql导入并覆盖mysql数据库本身,这是一个常见问题,例如,当您可能要从mysqldump -A备份还原时。

这是一件好事:您可能想备份所有的mysql用户,权限等-但它可能会对像debian-sys-maint用户那样干净地关闭mysql造成破坏。

尽管这个新数据库可能会更改root密码和debian-sys-maint密码,但是当然不会自动更改/etc/mysql/debian.cnf中预期的debian-sys-maint密码。实际上,除非您也备份该文件,否则您可能甚至不知道该密码是什么!

重置mysql root密码(可选)

首先是第一件事。如果新旧服务器的mysql根密码不同,则可以使用mysqladmin对其进行修复:

mysql -p -u root password 'newpassword'

但是,当您apt-get安装了mysql-server时,它可能会提示您输入新的mysql根密码,并且您可能使用了以前使用的相同密码。

修复debian sys maint密码。

因此,现在查找在新服务器上安装debian时为您创建的debian sys maint密码。(您需要sudo,因为它应该是受高度保护的文件。)

sudo cat /etc/mysql/debian.cnf

现在,使用您在上面设置的root密码登录到mysql:

mysql -p -u root   # use your new password when prompted

重置debian-sys-maint用户的密码,并且不要忘记刷新特权:

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT

测试以确保其有效:

sudo /etc/init.d/mysql restart

小建议

如果您需要重置服务器的root密码而不必关闭服务器,则此用户帐户有权执行此操作-只需处理debian.cnf文件并以该用户身份登录。注意:请像root用户一样保护此用户帐户。


2
谢谢杰米森,这可能节省了我的工作时间。
slhck

1
太棒了,完全欢迎您!我不得不更频繁地回退该文件,这比我想承认的要多;)
Jamieson Becker 2014年

1
辉煌的答案。导入数据库转储(及其后的root密码)正是我的原因。唯一的区别是,我的debian.cnf文件使用mysql的“ root”用户而不是“ debian-sys-maint”。我只是在debian.cnf中输入了root密码,现在可以通过“ service mysql <command>”来控制mysql了。
Tomasz P. Szynalski

6

另外2条提示:

sh -x /etc/init.d/mysql restart

这将向您显示初始化脚本执行的命令。

安装软件包debsum,您可以测试修改了哪些软件包(验证也可用于RPM,但IMHO效果更好)。


1
我遇到了与OP相同的问题,并运行了该命令Recommendation "Access denied for user 'debian-sys-maint'@'localhost'",这是绝对正确的:我的mysql数据库尚未分配任何权限,因此mysql stop数据库本身没有关闭权限。手动mysqladmin shutdown完美。
jevon 2011年

5
pkill mysql

肯定会工作


这就是我解决我的问题“停止mysql数据库服务器mysqld失败”的问题。您应该获得一百万积分!
Hans Wassink '16

2

假设软件包有些奇怪,则问题可能出在pid文件上。我怀疑新软件包或编译后的安装没有创建/ var / run / mysql /,或者在Debian上创建了要写入pid文件的标准文件,或者init脚本正在其他地方寻找mysqld.pid文件。如果您可以解决init / pid文件不匹配的问题,则应该可以解决问题。


初始化脚本不使用pid文件来停止服务器。
theotherreceive在2009年

2

mysql shutdown脚本通过从/etc/mysql/debian.cnf中读取该用户的密码,使用debian-sys-maint用户运行“ mysqladmin shutdown”。您应该检查该文件是否存在,并且可以以该用户身份运行mysqladmin shutdown。


1

您可以从技术上结束它:

pkill -9 mysqld

但是您可能会丢失数据?

您最好在http://www.serverfault.com上询问某人


我知道这样做的方式,但没有按照我的期望定期执行。
Derek Organ

1

使用“ pkill mysql”也可能会丢失数据,尤其是如果以“ pkill -9”调用:(

我还建议您使用'sh -x'来查看init脚本可能存在的问题,并且您也可以浏览MySQL的错误日志(/ var / log / mysql / var / lib / mysql,取决于配置)以查看它是否停留在运行时间长的查询或其他查询上,因此尚不愿意优雅退出。


1

为了跟进对您问题的评论,我将写下完整答案:

问题是默认套接字/tmp/mysql.sock与MySQL源以及/var/run/mysqld/mysqld.sockDebian二进制文件一起使用。

解决的办法是固定插座路径/etc/mysql/debian.cnf,通过提供良好socket=。或保留它,然后在中更改一个/etc/mysql/my.cnf

这是我发现的方式:在/etc/init.d/mysql出现“失败”消息时,您将以下行称为:

echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug

这向我指出$MYADMIN ping,这是mysqladmin --defaults-file=/etc/mysql/debian.cnf ping。运行此命令的最终结果是:

/ usr / bin / mysqladmin:连接到“ localhost”服务器失败

错误:“无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器”

检查mysqld是否正在运行以及套接字:'/var/run/mysqld/mysqld.sock'是否存在!

所以我看了一下/etc/mysql/debian.cnf,发现那是坏插座。



0

您需要成为超级用户才能在debian上开始停止mysql(和大多数其他服务)。

不知道您是否已经...如果不是,则需要执行以下一项操作

  • 以root身份登录
  • 将sudo放在/etc/init.d/mysql restart命令之前(它将要求您输入密码,并且您需要在sudoers组中)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.