现象
服务器异常,导致mysql服务异常退出,重启后,校验redo log异常
说明
- mysql服务是通过docker-compose启动的,serviceName是
db
- 磁盘挂载:
/var/lib/mysql
挂载到本地磁盘/data/mysql
处理过程
备份
- 查看磁盘挂载列表
docker volume ls
- 查看磁盘挂载目录
docker volume inspect 【挂载名】
- 文件备份
cp -r 【挂载目录】 【备份目录】
- 修改mysql配置
在[mysqld]增加innodb_force_recovery=6
- 重启服务
docker-compose up -d db
由于docker-compose内还有其他服务,启动其他服务会连接mysql操作数据,不利于后续数据导出,故只启动db服务
- 进入db容器
docker exec -it db /bin/bash
- 数据导出
容器内执行以下命令
a. 导出数据
mysqldump -u root -p --ignore-table=【忽略导出的表1】 --ignore-table=【忽略导出的表2】 【待导出的database】 > backup.sql
b. 导出结构
mysqldump -u root -p --no-data 【待导出的database】 【忽略导出的表1】 【忽略导出的表2】 > schema.sql
- 导出文件拷贝
将导出的文件拷贝到映射目录,避免容器关闭后文件丢失
cp backup.sql /var/lib/mysql/
cp schema.sql /var/lib/myql/
此时,两个文件已拷贝至宿主机的
/data/mysql
拷贝至备份目录,避免移除挂载卷时文件丢失
cp /data/mysql/backup.sql /data/mysql_backup/backup.sql
cp /data/mysql/schema.sql /data/mysql_backup/schema.sql
- 关闭容器
docker-compose down
- 移除挂载目录
docker volume rm 【挂载名】
- 重启db服务
docker-compose up -d db
- 拷贝导出的文件到容器挂载目录
cp /data/mysql/backup.sql /data/mysql/
cp /data/mysql/schema.sql /data/mysql/
- 进入db容器
docker exec -it db /bin/bash
- 导入数据
mysql -p 【待导入的database】 --default-character-set=utf8 < /var/lib/mysql/backup.sql
mysql -p 【待导入的database】 --default-character-set=utf8 < /var/lib/mysql/schema.sql
- 恢复其他服务
docker-compose up -d