问题描述

笔者使用docker start 启动mysql容器时,显示启动成功,但是1-2s以后mysql又会自动挂掉,很是奇怪。
以下是问题复现:

Unix socket lock file is empty /var/run/mysqld/mysqld.sock.lock.
Unable to setup unix socket lock file.
Aborting

1.启动并查看容器

docker start 容器id
docker ps -a

在这里插入图片描述

解决过程

1.是否是磁盘已满

因为测试服务器本来磁盘就很有限,所以首先想到的是不是磁盘满了,然后就尝试去清理了磁盘,清理完成后再次进行重启发现容器依然还是异常的。

2.查看日志

docker logs 容器id

在这里插入图片描述
发现图中所示位置,提示mysqld.sock.lock是空的,这里有一点需要注意,这里报的这个路径“/var/run/mysqld/mysqld.sock.lock”这是容器内的路径,所以如果你在宿主机上搜索肯定不是这个路径

# 搜索上面的文件位置
find / -name mysqld.sock.lock

在这里插入图片描述
根据搜索到的路径去找到这个文件即可。

3.解决问题

解决的方式很简单,就是将这个文件mysqld.sock.lock删除即可,为甚么这个文件会异常呢,删除对其他地方有无影响呢?首先说下导致这个异常的方式多种多样,笔者碰到的是因为服务器非正常down机引起的,非正常宕机的情况下,mysql.sock.lock无法正常删除,所以有了这个问题。那这个文件删除了是否对mysql服务有影响呢,其实也没有,这个文件在mysql重新启动时会重新创建,而且mysql.sock.lock只是mysql.sock的锁文件,mysql.sock文件又有什么作用呢,这个文件主要用于客户端与服务端位于一台机子上的服务器,实现本地连接的也就是我们使用localhost可以直接连本地的服务时用的。所以删了这个文件对我们毫无影响。

总结

这个问题的产生原因其实是服务器非正常宕机引起的,导致了这个文件的异常。这里需要注意的是,若是容器没有数据卷,这个问题将很难处理,所以我们平时启动容器一定要做数据卷,不然容器内部的问题真的无法解决(容器无法启动时)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐