10秒,轻松搞定MySQL 5.7升级到8.0

图片.png

需求说明:

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)
图片.png

2.配置级联复制

图片.png
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切换

图片.png
原库:停库 和 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,检查连接数。
图片.png
最后去掉B到C库的级联复制。
图片.png

5.业务验证

验证如果没问题,升级结束。
正式升级时,实际只需要执行VIP切换相关工作即可,速度较快。
###chenjuchao 20240917###
欢迎关注我的公众号《IT小Chen

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值