一、问题背景
在服务器中,重启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: 3306
2024-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] Aborting
2024-03-25T06:36:36.357024Z 0 [Note] Binlog end
2024-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
提示以下内容,可多执行几次即可。
[
Error response from daemon: Container e8f462cdd891e869374530db00a920aeee664904c3bac0beb85276f87314d319 is restarting, wait until the container is running
再次查看Mysql状态发现恢复正常: