现象
服务器异常,导致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
