MySQL主从切换的超详细步骤


Posted in MySQL onJune 28, 2022

版本:

MySQL-5.7.32+GTID

前言:

本文讲述MySQL主从切换流程,切换步骤主要针对主备正常切换以及主库宕机备库切换两个场景,掌握正确的切换流程,可以有效避免切换过程中可能出现的数据不一致问题以及提高整体切换的时间

主从环境:

MySQL主从切换的超详细步骤

场景一:主备正常切换,此场景主要是针对在主备同步复制正常的情况下进行的主备切换,例如:灾备演练,计划性的主备切换。

切换步骤:

 1 切断应用对主库的流量

 2 主库备库设置只读

set global read_only=ON;
set global super_read_only=ON;

3 查看备库复制进程状态

show slave status\G

MySQL主从切换的超详细步骤

确认Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0

4 比对主备两边的GTID是否一致

获取主备两边的executed_gtid集合,进行比对

select @@global.gtid_executed;

MySQL主从切换的超详细步骤

MySQL主从切换的超详细步骤

通过GTID_SUBSET函数进行比对

SELECT GTID_SUBSET(master_gtid_executed, slave_gtid_executed);

若在master_gtid_executed中的GTID,也存在slave_gtid_executed中,则返回true(1),否则返回false(0)

MySQL主从切换的超详细步骤

 返回一,代表主库GTID已经在从库完成执行过,两边是一致的

5 从库停掉复制进程并清空主从信息

stop slave;
reset slave all;

MySQL主从切换的超详细步骤

6 从库关闭只读开启读写,转为新主库

set global read_only=off;
set global super_read_only=off;

MySQL主从切换的超详细步骤

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 status\G

MySQL主从切换的超详细步骤

8 应用流量切向新主库

场景二:主库宕机备库切换为主库,这种情况主要是在异步模式或者非强一致半同步下,主库的异常宕机,可能存在数据没有完全同步到从库的情况,需要去核验追加数据。

1 对于主库宕机,数据库损坏没法正常启动时,如果binlog可以获取,则可以对binlog进行离线分析,获取差异的数据

获取备库那边已经执行过的gtid set

select @@global.gtid_executed

MySQL主从切换的超详细步骤

如果已经写入数据的新主库,不能直接读取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;

MySQL主从切换的超详细步骤

如果从库应用还未写入,未产生新数据,则可以从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的开始位置读取

MySQL主从切换的超详细步骤

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

MySQL主从切换的超详细步骤

MySQL主从切换的超详细步骤

总结

到此这篇关于MySQL主从切换的文章就介绍到这了,更多相关MySQL主从切换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
教你解决往mysql数据库中存入汉字报错的方法
May 06 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
MYSQL优化之数据表碎片整理详解
Apr 03 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
MySQL 数据 data 基本操作
May 04 MySQL
MySQL批量更新不同表中的数据
May 11 MySQL
Mysql中mvcc各场景理解应用
Aug 05 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 #MySQL
MySQL导致索引失效的几种情况
Jun 25 #MySQL
Mysql中的触发器定义及语法介绍
Jun 25 #MySQL
MySQL数据库配置信息查看与修改方法详解
Jun 25 #MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 #MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 #MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 #MySQL
You might like
基于文本的留言簿
2006/10/09 PHP
模仿OSO的论坛(一)
2006/10/09 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Python 读写文件的操作代码
2018/09/20 Python
Python如何操作docker redis过程解析
2020/08/10 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
销售类求职信
2014/06/13 职场文书
法学求职信
2014/06/22 职场文书
村委会贫困证明范本
2014/09/17 职场文书
卖房协议书样本
2014/10/30 职场文书
介绍信如何写
2015/01/31 职场文书
2015年超市工作总结范文
2015/05/26 职场文书