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 root密码的重置方法
Apr 21 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
详解MySQL 联合查询优化机制
May 10 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
mysql备份策略的实现(全量备份+增量备份)
Jul 07 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 MySQL
MySQL中order by的执行过程
Jun 05 MySQL
mysql全面解析json/数组
Jul 07 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
php面向对象 字段的声明与使用
2012/06/14 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
Python操作Excel插入删除行的方法
2018/12/10 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
店长助理岗位职责
2013/12/13 职场文书
融资租赁计划书
2014/04/29 职场文书
店面出租协议书范本
2014/11/28 职场文书
简历中自我评价范文
2015/03/11 职场文书
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers