无法启动/停止mysql服务

接pipe运行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 (eg /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关机确实工作,但我仍然好奇为什么/etc/init.d/mysql命令不起作用。

 mysqladmin shutdown 

应该closures服务器。

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

  1. MySQL有一个问题,并由于某种原因拒绝closures。
  2. 之前的pipe理员做了一些奇怪的事 要么修改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 …也许你很幸运,他们只是打破了… …

为什么发生这种情况

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

这是一件好事:你可能想要备份所有的mysql用户,权限等等,但是这会对debian-sys-maint用户干净地closuresmysql造成严重破坏。

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

重置mysql root密码(可选)

首先是事情。 如果旧的和新的服务器的mysql root密码不同,你可以使用mysqladmin来修复它:

 mysql -p -u root password 'newpassword' 

但是,当你安装mysql-server的时候,它可能会提示你input新的mysql root密码,你可能使用的是和以前一样的。

修复debian sys maint密码。

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

 sudo cat /etc/mysql/debian.cnf 

现在,使用上面设置的root密码login到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 

testing,以确保它的工作原理:

 sudo /etc/init.d/mysql restart 

快速提示

如果您需要重置服务器的根密码而不必closures服务器,则该用户帐户有权执行此操作 – 只需inputdebian.cnf文件并使用该用户login即可。 注意保护这个用户帐户就像root一样。

2更多提示:

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

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

安装软件包debsums,你可以testing哪些软件包被修改(validation也可用于RPM,但恕我直言,工作更好)。

 pkill mysql 

肯定会工作

假设这个软件包有点奇怪,这个问题可能是pid文件。 我怀疑,新的软件包或编译的安装没有创build/ var / run / mysql /或任何Debian标准的pid文件被写入,或者init脚本正在寻找另一个地方的mysqld.pid文件。 如果你可以修复init / pid文件不匹配的情况,应该可以。

mysql关机脚本使用debian-sys-maint用户通过从/etc/mysql/debian.cnf中读取用户的密码来运行“mysqladmin shutdown”。 你应该检查这个文件是否存在,你可以像这个用户那样运行mysqladmin shutdown。

你可以在技术上结束它:

 pkill -9 mysqld 

但是,你可能会失去数据?

http://www.serverfault.com上问某人可能会更&#x597D;

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

我还build议使用'sh -x'来查看init脚本的问题,也可以查看MySQL的错误日志(/ var / log / mysql / var / lib / mysql,取决于configuration),看它是否卡在一个非常长的查询或一些东西,因此不愿意退出优雅地相当。

为了跟进对你的问题的评论,我会写下一个完整的答案:

问题是默认套接字是带有MySQL源文件的/tmp/mysql.sock ,而带有Debian二进制文件的/var/run/mysqld/mysqld.sock

解决scheme是通过提供良好的socket= 来修复 /etc/mysql/debian.cnf 的套接字path 。 或者保留它,但是改变/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'连接服务器失败

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

检查mysqld是否正在运行,并且套接字'/var/run/mysqld/mysqld.sock'存在!

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

使用以下命令:

$ mysqladmin shutdown

这应该在/ usr / bin目录中可用。

你需要成为一个超级用户来启动在debian上停止mysql(和大多数其他服务)。

不知道你是否已经…如果不是,你需要做一个

  • 以root身份login
  • 把sudo放在/etc/init.d/mysql restart命令之前(它会要求你input密码,你需要在sudoers组中)