MySQL 守护进程锁问题

MySQL Daemon Lock issue

昨晚,我的 MySQL 服务器意外宕机。在尝试重新启动时(使用 service mysql restart - 我是 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 秒,然后 return。在仔细检查错误日志后,我得到:

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/mysqldchmod -R 775 /var/run/mysqldapt-get install mysql-community-server --reinstall。运气不好。

我环顾四周,找不到解决办法。有什么帮助吗?

注意:我是 运行 Debian 8 (Jessie) MySQL community Server 5.7.10

已修复。在 [mysqld] 部分下将 skip-external-locking 添加到 my.cnf,然后重新启动整个系统。对于发现此问题的任何人,这应该可以解决它。此外,如果您备份了数据,然后尝试恢复并被告知 rm ib* 以使其正常工作,则您需要 ibdata 文件。

我今天在 Ubuntu 服务器上遇到了同样的问题。但我认为解决方案不是禁用锁定。就我而言,查看系统日志(dmesg | tailjournalctl -xe)显示这是一个 apparmor 问题,可以找到解决方案 in this question.

我只是 运行 喜欢这个。 mysql 安装有点奇怪而且丢失了 /var/run/mysqld/

MySQLd 正在尝试创建套接字和锁定文件,但缺少父目录。我只是创建了目录

sudo mkdir /var/run/mysqld

chowned it to mysql

sudo chown mysql:mysql /var/run/mysqld

然后我可以正常启动 mysqld。

将 /var/lib/mysql/mysql.sock.lock & /var/lib/mysql/mysql.sock 重命名为 /var/lib/mysql/mysql.sock.lock.bck & /var/lib/mysql/mysql.sock.bck 分别启动mysqld。有效

也可能是磁盘用完了space。

以下命令对我有用。

sudo mkdir /var/run/mysqld

sudo chmod 777 /var/run/mysqld -R

我有以下错误

[ERROR] Unix socket lock file is empty /var/lib/mysql/mysql.sock.lock.

出现此错误是因为我的服务器缺少 space 100% 使用(见下文)

Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/xvda1      41153856 28531384  12187364  100% /

确保文件夹存在并具有适当的权限

chown mysql:mysql /var/lib/mysql/

并确保删除该文件,以便 mysql 服务器可以生成一个新文件

rm /var/lib/mysql/mysql.sock.lock

如果您正在使用 docker 到 运行 MySQL,请检查 docker 首选项中是否有足够的分配磁盘 space。

发布此答案,以防与我配置相同的人有所帮助。我对这个配置有类似的问题:

主机 OS:Ubuntu 20.04,MySql 服务器:8.0

systemctl start mysql

的 运行 期间,在 /var/log/mysql/error.log 中出现了以下错误
[ERROR] [MY-010273] [Server] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.

修复类似:

mkdir -p /var/run/mysqld/
chmod 777 /var/run/mysqld/

当然,在安装 mysql 服务器的任何地方,我都受够了 space。

最好先查看 日志文件 (/usr/local/var/mysql/*.local.err),然后再尝试任何更通用的答案。


在我的例子中,首先它抱怨无法打开套接字文件 ([Server] Could not open unix socket lock file /tmp/mysql.sock.lock.),一旦我更改了权限,它就抱怨无法删除它! ([Server] Could not remove unix socket lock file /tmp/mysql.sock.lock errno 13.)

删除它并 运行 mysql.server 开始并完成。

对于那些 运行 docker。如果你已经是 运行 mysql in docker,你也会得到这样的错误。删除 mysql 容器解决了我的问题。