【问题标题】:MySQL Daemon Lock issueMySQL守护进程锁问题
【发布时间】:2016-04-29 12:15:28
【问题描述】:

昨晚,我的 MySQL 服务器意外停机。在尝试重新启动时(使用service mysql restart - 我是 root)它只是挂起。使用mysql -u root -p 命令,我得到:

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

然后我尝试手动启动守护进程 (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/mysqldchmod -R 775 /var/run/mysqldapt-get install mysql-community-server --reinstall。没有运气。

我环顾四周,找不到解决方案。这里有什么帮助吗?

注意:我正在使用 MySQL 社区服务器 5.7.10 运行 Debian 8 (Jessie)

【问题讨论】:

  • 运行这个:touch /var/run/mysqld/mysqld.sock.lock 和更高版本的service mysql start....
  • 抱歉,这不起作用 - 我在日志文件中遇到同样的错误 ([ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.)
  • 尝试运行:chmod -R 755 /var/run/mysqld/
  • 你读过这篇文章吗?我说我做到了。无论如何,它现在已经修复:serverfault.com/questions/751277/mysql-daemon-lock-issue。我想我应该在这里更新它。
  • 对于仅在手动运行 mysqld 以重置 root 密码时遇到此问题的任何人,请改用 mysqld_safe --skip-grant-tables

标签: mysql sockets debian


【解决方案1】:

我刚碰到这个。 mysql 安装有点奇怪并且丢失了 /var/run/mysqld/

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

sudo mkdir /var/run/mysqld

把它交给 mysql

sudo chown mysql:mysql /var/run/mysqld

然后我就可以正常启动mysqld了。

【讨论】:

  • 这解决了我的问题。我使用supervisorctl运行了mysql。它工作正常,直到目录不知何故丢失。 Ubuntu 16.04。
  • 当我在看似新鲜的 Ubuntu 20.04 VPS 上遇到这个问题时。首先,我检查了 /run/mysqld 是否存在,这使我将 /etc/mysql 中的 /var/run/mysqld 的每次出现都更改为 /run/mysqld。之后 apt-get -f install 顺利进行。无论如何,我认为 VPS 可能有一些不寻常的默认值,这可能导致 /run 和 /var/run 的脑裂
【解决方案2】:

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

【讨论】:

  • 是的,但正如我在 cmets 部分所述,我没有任何 AppArmor 或类似的东西。这只是很奇怪。
【解决方案3】:

我有以下错误

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

出现此错误是因为我的服务器空间不足 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

【讨论】:

    【解决方案4】:

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

    主机操作系统:Ubuntu 20.04,MySql 服务器:8.0

    /var/log/mysql/error.log 在运行systemctl start mysql 期间出现以下错误

    [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 服务器,我都有足够的空间。

    【讨论】:

    • 是的,我以同样的方式解决了我的问题。 Ubuntu 20 在apt install mysql-server 之后没有创建这个文件夹,这很奇怪。
    • 对于那些稍后再谈的人,chmod 777 /var/run/mysqld 不是很好。更好的是chown mysql:mysql /var/run/mysqld
    【解决方案5】:

    也可能是磁盘空间不足。

    【讨论】:

    • 对于那些稍晚一点的人来说,chmod 777 /var/run/mysqld 不是很好。更好的是chown mysql:mysql /var/run/mysqld
    【解决方案6】:

    以下命令对我有用。

    sudo mkdir /var/run/mysqld
    
    sudo chmod 777 /var/run/mysqld -R
    

    【讨论】:

    • 对于那些稍晚一点的人来说,chmod 777 /var/run/mysqld 不是很好。更好的是chown mysql:mysql /var/run/mysqld
    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

      在尝试任何更通用的答案之前,最好先查看日志文件 (/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 start 和 DONE。

      【讨论】:

        【解决方案9】:

        将 /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 分别启动。有效

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

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

            【讨论】:

            • 这怎么可能是公认的答案。版本 5.7 完全不同吗?
            • 这是公认的答案,因为这是此处建议的唯一对我有用的解决方案。这也是我的问题和答案,我接受了。我不能为 5.7 说话。
            • 我的研究表明,事情在 5.7.14 左右发生了变化:-(
            • 查看 mysql 服务器的手册页。 skip-external-locking 与 sock.lock 文件无关。
            • 适用于我在 MacOS X Mojave 上运行(现在)的 5.7.23。
            猜你喜欢
            • 2012-07-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-26
            • 2016-08-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多