it-swarm.cn

无法启动/停止mysql服务

在运行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命令不起作用。

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

25
freiheit

为什么会这样

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

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

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

重置mysql根密码(可选)

首先是第一件事。如果新旧服务器的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文件并以该用户身份登录。 N.B.像root用户一样保护此用户帐户。

22
Jamieson Becker

另外2条提示:

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

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

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

6
elcuco
pkill mysql

肯定会工作

5
Jonathan

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

2
kashani

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

2
theotherreceive

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

问题是默认套接字是/tmp/mysql.sock和MySQL源代码,以及/var/run/mysqld/mysqld.sock与Debian二进制文件。

解决方案是修复套接字路径/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,发现那是坏插座。

1
Yvan

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

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

1
nixgeek

您可以从技术上结束它:

pkill -9 mysqld

但是您可能会丢失数据?

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

1
John Kurlak

使用以下命令:

$ mysqladmin关闭

在您的情况下,该目录应该在/ usr/bin目录中。

0
Masood Syed

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

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

  • 以root身份登录
  • 将Sudo放在/etc/init.d/mysql restart命令之前(它将要求您输入密码,并且您需要在sudoers组中)
0
benlumley