错误日志:
解决办法:
正确的方法是先备份旧数据,删除旧容器,然后使用空的数据目录启动新容器,最后再选择性地从备份恢复需要的数据。
如果直接指定已经存在的数据目录启动新的 mysql 容器,会导致无法正常启动的问题。主要原因是mysql的数据目录中已经存在之前容器的 mysql 数据,如果直接复用同一数据目录启动新容器,会导致 mysql 内部的 uuid、sequence不一致,无法正常启动。解决方法是:
1. 停止并删除原先的 mysql 容器
docker stop mysql
docker rm mysql
2. 备份并删除原数据目录
mv /var/lib/mysql /var/lib/mysql_bak
3. 创建新的空数据目录
mkdir -p /var/lib/mysql
4. 启动新容器,映射到新的空数据目录
docker run --name mysql-yzq -d -v /var/lib/mysql:/var/lib/mysql mysql:latest
这样 mysql 内部将重新初始化数据,而不会与旧数据冲突。
5. 如果需要恢复数据,可以从备份目录复制 *.ibd 数据文件到新容器的数据目录。
这个过程可以确保 mysql 的 uuid 和 sequence 号码重新生成,避免与旧数据的不一致问题。