当前位置:网站首页>MySQL master-slave switching steps
MySQL master-slave switching steps
2022-07-31 06:14:00 【web15085599741】
版本:
MySQL-5.7.32+GTID
前言:
本文讲述MySQL主从切换流程,切换步骤主要针对主备正常切换以及主库宕机备库切换两个场景,掌握正确的切换流程,可以有效避免切换过程中可能出现的数据不一致问题以及提高整体切换的时间
主从环境:

**场景一:**主备正常切换,此场景主要是针对在主备同步复制正常的情况下进行的主备切换,例如:灾备演练,计划性的主备切换.
切换步骤:
1 切断应用对主库的流量
2 主库备库设置只读
set global read_only=ON;
set global super_read_only=ON;
3 查看备库复制进程状态
show slave statusG

确认Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0
4 比对主备两边的GTID是否一致
获取主备两边的executed_gtid集合,进行比对
select @@global.gtid_executed;


通过GTID_SUBSET函数进行比对
SELECT GTID_SUBSET(master_gtid_executed, slave_gtid_executed);
若在master_gtid_executed中的GTID,也存在slave_gtid_executed中,则返回true(1),否则返回false(0)

返回一,代表主库GTID已经在从库完成执行过,两边是一致的
5 从库停掉复制进程并清空主从信息
stop slave;
reset slave all;

6 从库关闭只读开启读写,转为新主库
set global read_only=off;
set global super_read_only=off;

7 主库设置执行新主库的复制链路,转为新备库,完成主从切换
CHANGE MASTER TO MASTER_HOST='192.168.1.111',MASTER_USER='xxx',MASTER_PORT=3306,MASTER_PASSWORD='xxx',master_auto_position=1 ;
start slave;
show slave statusG

8 应用流量切向新主库
**场景二:**主库宕机备库切换为主库,这种情况主要是在异步模式或者非强一致半同步下,主库的异常宕机,可能存在数据没有完全同步到从库的情况,需要去核验追加数据.
1 对于主库宕机,数据库损坏没法正常启动时,如果binlog可以获取,则可以对binlog进行离线分析,获取差异的数据
获取备库那边已经执行过的gtid set
select @@global.gtid_executed

如果已经写入数据的新主库,不能直接读取binlog进行恢复,因为可能会出现数据不一致,主键冲突等问题,可以从binlog里面排除从库已经执行过的gtid并离线解析成sql语句,交给应用去分析是否补入数据
mysqlbinlog -vv --base64-output=decode-rows --exclude-gtids='1b80feab-4aa6-11ec-9a60-000c29a6e7be:1-10,
2b3039c9-57fa-11eb-b504-000c29ed797a:1-8256287,
3a59d149-d4b8-11eb-8cf6-000c29a6e7b4:1-10,
a0a3d4b2-fff8-11eb-a420-000c29a6e7be:1-10011' /opt/mysql/log/nlog.000150 > /tmp/binlog_150_gtid.sql;

如果从库应用还未写入,未产生新数据,则可以从binlog里面排除从库已经执行过的gtid直接导入追加数据
mysqlbinlog --exclude-gtids='1b80feab-4aa6-11ec-9a60-000c29a6e7be:1-10,
2b3039c9-57fa-11eb-b504-000c29ed797a:1-8256287,
3a59d149-d4b8-11eb-8cf6-000c29a6e7b4:1-10,
a0a3d4b2-fff8-11eb-a420-000c29a6e7be:1-10011'? /opt/mysql/log/nlog.000150 | mysql -uroot -p -S /opt/mysql/3306/data/mysql.sock -P3306
2 对于主库宕机,但旧主库可以重新启动拉起,则在启动后,如果新主库应用还未写入新数据,可以将新主库change master复制继续指向旧主库,读取未应用的日志恢复;
已经写入数据的新主库,不能直接读取binlog进行恢复,因为可能会出现数据不一致,主键冲突等问题,而是应该将数据解析成sql语句,让应用去分析是否补入数据.
用my2sql在线解析binlog日志获取sql语句,需要获取开始的日志号以及读取位点,读取位点可以根据–exclude-gtids排除gtid后解析binlog的开始位置读取

my2sql -user xxxx -password xxxx? -work-type 2sql -start-file /opt/mysql/log/nlog.000150 -start-pos=7940194 --add-extraInfo -output-dir /tmp/my2sql_recover
目录下会生产forward+日志号的文本,里面存放解析出来的sql


先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在.深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小.自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前.因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担.添加下方名片,即可获取全套学习资料哦
边栏推荐
- Tencent Cloud GPU Desktop Server Driver Installation
- Global scope and function scope in js
- Cholesterol-PEG-DBCO 胆固醇-聚乙二醇-二苯基环辛炔化学试剂
- After unicloud is released, the applet prompts that the connection to the local debugging service failed. Please check whether the client and the host are under the same local area network.
- 拒绝采样小记
- this points to the problem
- cv2.resize()是反的
- qt:cannot open C:\Users\XX\AppData\Local\Temp\main.obj.15576.16.jom for write
- 浅谈对分布式模式下CAP的理解
- TransactionTemplate 事务编程式写法
猜你喜欢

为数学而歌之伯努利家族

qt:cannot open C:\Users\XX\AppData\Local\Temp\main.obj.15576.16.jom for write

Why does read in bash need to cooperate with while to read the contents of /dev/stdin

VS通过ODBC连接MYSQL(二)

Sourcery插件(自动提升代码质量)

wangeditor富文本编辑器上传图片以及跨域问题解决

禅道安装及使用教程

RuntimeError: CUDA error: no kernel image is available for execution on the device问题记录

MySQL 入门:Case 语句很好用

Tensorflow边用边踩坑
随机推荐
unicloud 云开发记录
360 hardening file path not exists.
Sqlite A列数据复制到B列
我的训练函数模板(动态修改学习率、参数初始化、优化器选择)
Sqlite column A data is copied to column B
cv2.resize()是反的
wangeditor编辑器内容传至后台服务器存储
This in js points to the prototype object
mPEG-DMPE 甲氧基-聚乙二醇-双肉豆蔻磷脂酰乙醇胺用于形成隐形脂质体
MySQL 出现 The table is full 的解决方法
SQLite 查询表中每天插入的数量
RuntimeError: CUDA error: no kernel image is available for execution on the device问题记录
UiBot has an open Microsoft Edge browser and cannot perform the installation
Cholesterol-PEG-Azide CLS-PEG-N3 胆固醇-聚乙二醇-叠氮 MW:3400
Tencent Cloud Lightweight Server deletes all firewall rules
quick lua加密
crontab的定时操作
活体检测CDCN学习笔记
understand js operators
用pytorch里的children方法自定义网络