需求说明:
1.MySQL 5.7升级到8.0,数据量100GB+,要求业务中断时间不超过1分钟。
架构说明:
MySQL 双主(单写)+Keepalived(VIP)
应用通过VIP连接数据库
升级方案:
方案1:原地升级
1.先升级从库; 2.从库升级结束后,关闭主库,VIP自动切换到原从库; 备注:VIP切换前,必须关闭主库,因为默认不支持MySQL 8.0到5.7的同步。 3.业务通过VIP连接到原从库,验证没问题后升级原主库。 方案难点: 1.原地升级前,需要停库冷备,数据量较大时,冷备时间较长。 2.原地升级不能压缩表碎片; 3.原地升级可能会遇到各种问题,之前写过多篇原地升级遇到的问题,比如列注释存在乱码时,会导致升级失败,数据量较大时处理此类问题会很麻烦,需要先通过冷备还原数据库,启动数据库后处理相关问题,然后再停库冷备,再重新进行升级,升级时间不可控。 4.回退:冷备恢复,时间不可控,影响业务时间较长。
复制
方案2:级联复制升级
1.申请两台新服务器,安装MySQL 8.0.x数据库,搭建级联复制。 由:A<--->B 架构,配置为:A<--->B--->C<--->D架构,其中C的主库可以指定B或者A库; 2.C,D服务器安装并配置keepalived,先不启动; 3.待级联复制无延时后,准备进行切换; 4.正式切换时,依次关闭A、B库,keepalived会自动关闭,会自动删除VIP,应用连接中断; 5.依次启动C、D服务器上的keepalived服务,C节点会自动添加原VIP,应用通过VIP自动连接新8.0.x数据库。 6.业务验证,如无问题,迁移升级结束。 7.回退:如验证有问题,VIP切换到原库即可,验证期间产生的新数据根据实际情况选择恢复。
复制
对比两种升级方案,数据量大、停机窗口短时,建议用第二种,下面是级联复制升级测试过程,仅用于测试验证,仅供参考。
升级测试:
迁移升级测试如下:
1.当前架构
MySQL 5.7.36 双主(单写)+Keepalived(vip)
2.配置级联复制
C、D服务器已经安装MySQL 8.0.33数据库,并创建业务用户,配置相同密码。
原库备份:业务库为cjc
mysqldump -uroot -p --databases cjc --hex-blob --single-transaction --set-gtid-purged=OFF --master-data=2 --flush-logs --routines --triggers --events --extended-insert=TRUE --net-buffer-length=16777216 --max-allowed-packet=67108864 > /mysqldata/dbtmpfile/master_mysql_bak_db_20240917.sql
复制
上传到目标C库,进行恢复
scp -P 22 /mysqldata/dbtmpfile/master_mysql_bak_db_20240917.sql mysql@192.168.0.104:/mysqldata/dbtmpfile/
复制
C库进行恢复
mysql -uroot -p < /mysqldata/dbtmpfile/master_mysql_bak_db_20240917.sql
复制
C库,配置级联复制
配置级联复制
获得 master_log_file 和 master_log_pos
more /mysqldata/dbtmpfile/master_mysql_bak_db_20240917.sql -- CHANGE MASTER TO MASTER_LOG_FILE='xxxxxx', MASTER_LOG_POS=xxxxxx;
复制
配置级联复制
change master to master_host='192.168.0.102', master_port=13309, master_user='repltmp', master_password='********', master_log_file='mysql-bin.000008', master_log_pos=234 FOR CHANNEL "tmp0917";
复制
启动 slave:
mysql> start slave for channel "tmp0917";
复制
检查:
mysql> show slave status\G;
复制
3.数据对比
原库 和 目标库数据对比:
可以使用PT工具进行对比,可以可以通过如下SQL简单对比表数据量:
select concat("select concat('select_count :","'",',',"'",table_schema,':',"'",',',"'",table_name,':',"'",',','count(*) ) from ',table_name,' union all') a from information_schema.tables where table_schema in ('cjc') and TABLE_TYPE='BASE TABLE';
复制
4.VIP切换
原库:停库 和 keepalived
mysqladmin -uroot -p shutdown ps -ef|grep mysqld ps -ef|grep keepa
复制
目标库:启动keepalived
先启动C、在启动D
cat /etc/keepalived/keepalived.conf systemctl start keepalived.service
复制
检查VIP,检查连接数。
最后去掉B到C库的级联复制。
5.业务验证
验证如果没问题,升级结束。
正式升级时,实际只需要执行VIP切换相关工作即可,速度较快。
###chenjuchao 20240917###
欢迎关注我的公众号《IT小Chen》
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
行动前充分思考,目标才更清晰可行;想清楚就立即行动,才能离目标越来越近。
5月前

评论
10秒,轻松搞定MySQL 5.7升级到8.0
6月前

评论
10秒,轻松搞定MySQL 5.7升级到8.0好厉害
6月前

评论
陈老师,推荐来一期从5.7带8.0的有哪些注意的,应用要做哪些改动
6月前

2
MySQL 5.7升级到8.0,数据量100GB+,要求业务中断时间不超过1分钟
6月前

评论
10秒,轻松搞定MySQL 5.7升级到8.0。MySQL 5.7升级到8.0,数据量100GB+,要求业务中断时间不超过1分钟。
6月前

评论
相关阅读
2025年3月中国数据库排行榜:PolarDB夺魁傲群雄,GoldenDB晋位入三强
墨天轮编辑部
1665次阅读
2025-03-11 17:13:58
【专家观点】罗敏:从理论到真实SQL,感受DeepSeek如何做性能优化
墨天轮编辑部
1242次阅读
2025-03-06 16:45:38
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1223次阅读
2025-03-13 11:40:53
01. HarmonyOS Next应用开发实践与技术解析
若城
1180次阅读
2025-03-04 21:06:20
DeepSeek R1助力,腾讯AI代码助手解锁音乐创作新
若城
1162次阅读
2025-03-05 09:05:00
03 HarmonyOS Next仪表盘案例详解(二):进阶篇
若城
1161次阅读
2025-03-04 21:08:36
05 HarmonyOS NEXT高效编程秘籍:Arkts函数调用与声明优化深度解析
若城
1153次阅读
2025-03-04 22:46:06
04 高效HarmonyOS NEXT编程:ArkTS数据结构优化与属性访问最佳实践
若城
1144次阅读
2025-03-04 21:09:35
02 HarmonyOS Next仪表盘案例详解(一):基础篇
若城
1139次阅读
2025-03-04 21:07:43
06 HarmonyOS Next性能优化之LazyForEach 列表渲染基础与实现详解 (一)
若城
1134次阅读
2025-03-05 21:09:40