分析关于Mysql容器启动失败恢复的问题

文 / @WordPress主题

分析关于Mysql容器启动失败恢复的问题

在使用Docker部署Mysql容器时,如果出现启动失败的情况,该怎样解决呢?本篇文章针对一个实际的故障案例,从查看日志、使用rekcod工具、解决“Unable to lock./ibdata1 error:11”等方面进行了分析。

首先,查看日志,提示如下:

```
2020-12-27T02:43:53.375776Z 0 mysqld: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored.
2020-12-27T02:43:53.375776Z 0 mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2020-12-27T02:43:53.375776Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
2020-12-27T02:43:53.376005Z 0 [ERROR] [MY-010119] [Server] Aborting
```

上述日志最后一行提示“[ERROR] [MY-010119] [Server] Aborting”,也就是Mysql容器启动失败。接下来,我们需要重新运行一个Mysql容器。由于之前的运行命令没有记录,因此需要使用rekcod工具来查看。

使用rekcod工具的具体用法如下:

1. 先安装rekcod:

```
docker pull nexdrew/rekcod
alias rekcod="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod"
```

2. 使用rekcod查看之前运行Mysql容器的完整命令:

```
rekcod mysql
```

通过查看命令可以发现,解决启动失败的方法是在之前的配置命令上加上“-v /mnt/md0/User/wzp/home/www/mysql-files:/var/lib/mysql-files/”。

然后我们重新运行一个Mysql容器,命令如下:

```
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql2 -v /mnt/md0/User/wzp/home/www/mysql/:/var/lib/mysql -v /mnt/md0/User/wzp/home/www/mysql-files:/var/lib/mysql-files/ mysql
```

接下来我们登录mysql2容器,但是发现无法连接数据库,进一步查看发现出现了“Fatal error: Please read 'Security' section of the manual to find out how to run mysqld as root!”这个错误。解决方法是以root方式启动mysqld,命令如下:

```
mysqld --user=root
```

然而,这时又出现了新的问题,即“Unable to lock./ibdata1 error:11”。通过查找资料,我们尝试了以下两个解决方案:一是扩大磁盘空间,二是将之前的ibdata1等文件重命名、再cp回来。通过对比,我们发现第二个方案可以解决问题。

最后,我们再次启动两个wiki容器,将备份的LocalSettings.php和Logo图片copy进去,问题得以彻底解决。

综上所述,在进行Docker部署Mysql容器时,需要关注一系列问题,包括配置命令、日志查看、备份等等。只有全面掌握了这些技能,才能更好地部署Mysql容器,并及时发现和解决问题。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。