三十三、mysqldump实现版本迁移
数据迁移
生产环境中可能会对数据库进行版本迁移,常为低版本迁移到高版本。
一般为原库不动,备份原库数据到新库使用。
XBK跟mysqldump使用场景
同构平台迁移,即同系统直接迁移,版本差异不大时可使用XBK进行迁移;
异构平台迁移,即不同系统时使用mysqldump进行迁移;
提前准备
1、如何安装MySQL5.6
2、如何安装MySQL5.7
3、应对安装过程中报错
在同一台服务器上共存这两个版本的MySQL,要注意以下几点:
1、配置文件最好放在各自的目录中以免搞混,如/usr/local/mysql57/my.cnf
2、运行时需要指定socket文件,如mysql -uroot -p -S /tmp/mysql56/mysql.sock
3、server_id要不一样
4、端口号要不一致
迁移案例
生产库为mysql5.6.44
需要迁移到mysql5.7.26
1、备份5.6数据
$ mysqldump -uroot -p -A --master-data=2 --single-transaction -R -E --triggers >/backup/full56.sql
$ scp /backup/full56.sql 10.154.0.111:/backup/full56.sql
2.恢复数据
$ /etc/init.d/mysql57 start
$ mysql -S /tmp/mysql57/mysql.sock
mysql> set sql_log_bin=0;
mysql> source /backup/full56.sql
mysql> set sql_log_bin=1;
mysql> flush privileges;
#因为两个数据库版本不同,故使用mysql_upgrade检查和升级不兼容的数据
$ mysql_upgrade -uroot -p -S /tmp/mysql57/mysql.sock
3、截取binlog恢复
假设10点备份,业务在正常运行,30分钟后升级完成,多余产生的30分钟数据截取二进制日志恢复
假设10点33分钟恢复完成,多余的3分钟数据,先停止业务挂维护页,截取恢复剩余的binlog
检查恢复数据,查看业务是否正常,撤销维护页
关于降级升级
特别注意!!!
降级升级因为mysql5.7中的mysql
库跟mysql5.6的mysql
库不兼容,会导致mysql5.6数据库重启失败。
重启报错为
Starting MySQL.Logging to '/data/mysql5.6/data/client1.err'.
ERROR! The server quit without updating PID file (/data/mysql5.6/data/client1.pid).
查看错误日志为
cat /data/mysql5.6/data/client1.err | grep ERROR
2021-04-04 15:31:29 87146 [ERROR] Fatal error: mysql.user table is damaged or in unsupported 3.20 format.
此时,需要删除MySQL5.6的数据重新初始化,相当于降了个寂寞。
解决方案
#降级升级时不备份mysql5.7的mysql库
$ mysql -e "show databases;" | grep -Ev "Database|mysql" | \
xargs mysqldump -uroot -p123 --skip-lock-tables --databases > /backup/full20210404.sql
参考资料:Mysqldump备份数据库时排除某些库
学习来自:老男孩深标DBA课程 第七章 备份恢复-2