昨晚,我的 MySQL 服务器意外宕机。尝试重新启动(使用service mysql restart
- I'm root)时,它只是挂起。使用命令mysql -u root -p
,我得到ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
。然后我尝试手动启动守护进程(mysqld
)。提示会挂起大约 2 秒钟,然后返回。仔细检查错误日志后,我得到:
2016-01-22T19:18:32.399584Z 0 [ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.
2016-01-22T19:18:32.399622Z 0 [ERROR] Unable to setup unix socket lock file.
2016-01-22T19:18:32.399646Z 0 [ERROR] Aborting
然后我又尝试了、 和chown mysql /var/run/mysqld
。chmod -R 775 /var/run/mysqld
没有成功。touch /var/run/mysqld/mysqld.sock.lock
apt-get install mysql-community-server --reinstall
我四处寻找,但找不到解决方案。有人能帮忙吗?
注意:我正在运行 Debian 8(Jessie)和 MySQL 社区服务器 5.7.10
答案1
未来旅行者请注意:这取决于您的具体配置,但这是非常可能是 apparmor 的问题。如果您不想禁用锁定,请查看系统日志并查看该文件是否拒绝了 apparmor。
你会看到类似这样的内容:apparmor="DENIED" operation="open" parent=29871 profile="/usr/sbin/mysqld" name="/run/mysqld/mysqld.sock.lock"
可以通过添加/run/mysqld/mysqld.sock.lock rw
到/etc/apparmor.d/usr.sbin.mysqld
其他/run/*
条目附近并重新加载 apparmor 来修复此问题。
答案2
已修复。将 skip-external-locking 添加到my.cnf
该[mysqld]
部分下,然后重新启动整个系统。对于发现此问题的任何人来说,这应该可以解决问题。此外,如果您备份了数据,然后尝试恢复并被告知要rm ib*
使其正常工作,则需要该ibdata
文件。
答案3
我刚刚遇到了同样的问题,错误消息也完全相同,但就我而言,这是由于应用程序存储库的升级没有按预期方式结束。因此,就我而言,只需手动运行mysql_upgrade -u adminname -p
然后重新启动服务器即可解决问题。