处理Docker中的MySQL数据库服务异常无法启动问题:[ERROR] Unix socket lock file【测试成功】

艺帆风顺 发布于 2025-04-03 25 次阅读


一、问题背景

    在服务器中,重启docker服务后,发现mysql数据库服务无法启动,

一直尝试重启,一直无法启动。

二、问题排查

1、查看系统日志

    docker logs e8f462cdd891 --tail=1000 --follow

    2024-03-25T06:36:36.354650Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.2024-03-25T06:36:36.354844Z 0 [Warning] CA certificate ca.pem is self signed.2024-03-25T06:36:36.356867Z 0 [Note] Server hostname (bind-address): '*'; port: 33062024-03-25T06:36:36.356913Z 0 [Note] IPv6 is available.2024-03-25T06:36:36.356924Z 0 [Note] - '::' resolves to '::';2024-03-25T06:36:36.356950Z 0 [Note] Server socket created on IP: '::'.2024-03-25T06:36:36.357000Z 0 [ERROR] Unix socket lock file is empty /var/run/mysqld/mysqld.sock.lock.2024-03-25T06:36:36.357009Z 0 [ERROR] Unable to setup unix socket lock file.2024-03-25T06:36:36.357011Z 0 [ERROR] Aborting2024-03-25T06:36:36.357024Z 0 [Note] Binlog end2024-03-25T06:36:37.971809Z 0 [Note] Shutting down plugin 'MEMORY'2024-03-25T06:36:37.971815Z 0 [Note] Shutting down plugin 'CSV'2024-03-25T06:36:37.971819Z 0 [Note] Shutting down plugin 'sha256_password'2024-03-25T06:36:37.971822Z 0 [Note] Shutting down plugin 'mysql_native_password'2024-03-25T06:36:37.972005Z 0 [Note] Shutting down plugin 'binlog'2024-03-25T06:36:37.974609Z 0 [Note] mysqld: Shutdown complete

        可以看出,一直尝试重启,但一直都是 Shutdown状态。

    2、问题分析

        关键报错内容为:

      2024-03-25T06:36:36.357000Z 0 [ERROR] Unix socket lock file is empty /var/run/mysqld/mysqld.sock.lock.2024-03-25T06:36:36.357009Z 0 [ERROR] Unable to setup unix socket lock file.

      该报错是因为MySQL无法创建Unix socket lock file,可能是由于权限问题或文件损坏导致的。

      可能的原因及解决方法如下: 

          1. 检查文件权限:确保MySQL用户对/var/run/mysqld/目录和其下的文件具有读写权限。 

          2. 删除锁文件删除/var/run/mysqld/mysqld.sock.lock文件,然后重启MySQL服务。 

          3. 检查文件完整性:检查/var/run/mysqld/mysqld.sock文件是否存在,如果不存在,则可能是文件损坏导致的。可以尝试重新安装MySQL或从备份中恢复该文件。 

          4. 更改文件所有者:如果/var/run/mysqld/目录和其下的文件的所有者不是MySQL用户,则需要更改所有者为MySQL用户。

          5. 检查SELinux设置:如果SELinux启用并且MySQL没有正确的SELinux策略,则可能会导致该问题。可以通过禁用SELinux或为MySQL添加正确的SELinux策略来解决该问题。

      三、问题解决

          由于是在容器内,判断是由于/var/run/mysqld/mysqld.sock.lock文件导致,并且该文件并没有挂载到宿主机,故应该删除掉该文件。

          执行以下命令即可解决:

      docker exec -it e8f462cdd891 rm -rf /var/run/mysqld/mysqld.sock.lock

         提示以下内容,可多执行几次即可。

        [root@Aliyun ~]# docker exec -it e8f462cdd891 /bin/shError response from daemon: Container e8f462cdd891e869374530db00a920aeee664904c3bac0beb85276f87314d319 is restarting, wait until the container is running

         再次查看Mysql状态发现恢复正常: