今天有一个ubuntu+mysql的测试环境,在容器重启的时候mysql启动失败,导致docker启动失败。
首先查看docker日志
docker logs 8a16
发现有如下报错:
* Stopping MySQL database server mysqld
...done.
* Starting MySQL database server mysqld
...fail!
所以基本排查出事mysql服务没启动导致docker启动失败。因为我在启动脚本start.sh 添加了set -e命令
所以接下来就要查看一下mysql报什么错误。
启动docker的时候马上进入容器,否则等下失败容器就被关闭了。
docker start 8a16
docker exec -it 8a16 /bin/bash
查看mysql错误日志
cat /var/log/mysql/error.log
发现多次测试启动失败的报错均是以下错误。
2018-12-18T09:58:41.325466Z 0 [ERROR] Another process with pid 439 is using unix socket file.
2018-12-18T09:58:41.325486Z 0 [ERROR] Unable to setup unix socket lock file.
2018-12-18T09:58:41.325528Z 0 [ERROR] Aborting
docker重启容器的时候,有时候会导致mysql异常关闭,然后在目录下生成一个mysql.sock.lock ,这个文件存在的原因导致mysql服务启动失败。
所以我在我的启动脚本start.sh增加了一行
rm -rf /var/run/mysqld/mysqld.sock.lock
再测试几次均能成功启动容器。到此问题已解决。
PS:之前也遇到mysql服务启动失败,然后再启动脚本增加了一行 choen -R mysql:mysql /var/lib/mysql /var/run/msqld