无法启动/停止mysql服务

Der*_*gan 29 mysql debian

接管运行 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
Run Code Online (Sandbox Code Playgroud)

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

编辑更新 作为更新:

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
Run Code Online (Sandbox Code Playgroud)

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

fre*_*eit 26

mysqladmin shutdown
Run Code Online (Sandbox Code Playgroud)

应该可以关闭服务器。

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

  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......也许你很幸运,他们只是打破了那个......


fat*_*ror 22

为什么会发生这种情况

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

这是一件好事:您可能想要备份所有 mysql 用户、权限等——但它可能会对用于干净地关闭 mysql 的 debian-sys-maint 用户等内容造成严重破坏。

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

重置mysql root密码(可选)

先说第一件事。如果新旧服务器的mysql root密码不同,可以使用mysqladmin进行修复:

mysql -p -u root password 'newpassword'
Run Code Online (Sandbox Code Playgroud)

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

修复 debian sys maint 密码。

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

sudo cat /etc/mysql/debian.cnf
Run Code Online (Sandbox Code Playgroud)

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

mysql -p -u root   # use your new password when prompted
Run Code Online (Sandbox Code Playgroud)

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

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT
Run Code Online (Sandbox Code Playgroud)

测试以确保它有效:

sudo /etc/init.d/mysql restart
Run Code Online (Sandbox Code Playgroud)

小建议

如果您需要在不关闭服务器的情况下重置服务器的 root 密码,则该用户帐户有权执行此操作——只需 cat debian.cnf 文件并使用该用户登录。注意像root一样保护这个用户帐户。

  • 谢谢你,杰米森,这可能为我节省了几个小时的工作时间。 (2认同)

elc*_*uco 6

还有2个提示:

sh -x /etc/init.d/mysql restart
Run Code Online (Sandbox Code Playgroud)

这将向您显示由 init 脚本执行的命令。

安装软件包 debsums,您可以测试哪些软件包被修改(验证也可用于 RPM,但恕我直言,效果更好)。