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/mysqld
、chmod -R 775 /var/run/mysqld
和 apt-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 | tail
和 journalctl -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 容器解决了我的问题。
昨晚,我的 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/mysqld
、chmod -R 775 /var/run/mysqld
和 apt-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 | tail
和 journalctl -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 容器解决了我的问题。