当前位置:网站首页>MySQL 主从切换步骤
MySQL 主从切换步骤
2022-08-03 09:16:00 【m0_54853420】
版本:
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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
"Easy to use" websites that others don't know, make you more efficient
SQL Daily Practice (Nioke New Question Bank) - Day 5: Advanced Query
STP生成树(端口状态+端口角色+收敛机制 )|||| STP优化技术( uplinkfast技术+Portfast技术+backbonefast技术 )详解
selenium IDE的3种下载安装方式
SAP Analytics Cloud 和 SAP Cloud for Customer 两款 SaaS 软件的集成
英文语法-状语从句
What exactly does a firmware engineer do?
STP和RSTP的BPDU报文中flag位 对比+分析
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
【LeetCode】112.路径总和
随机推荐
线程介绍与使用
【无标题】
【论文笔记】基于动作空间划分的MAXQ自动分层方法
【微信小程序】底部有安全距离,适配iphone X等机型的解决方案
删除文件夹时,报错“错误ox80070091:目录不是空的”,该如何解决?
Unity编辑器扩展批量修改图片名称
chrome F12 network 保留之前请求信息
Exception: Dataset not found. Solution
好用的插件
milvus
scala减少,reduceLeft reduceRight,折叠,foldLeft foldRight
015-Balanced binary tree (1)
【快手面试】Word2vect生成的向量,为什么可以计算相似度,相似度有什么意义?
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
10 Convolutional Neural Networks for Deep Learning 2
"Easy to use" websites that others don't know, make you more efficient
自动化测试浏览器驱动下载版本对应关系
mysql的union和union all
子查询和关联查询的区别
【论文笔记】一种基于启发式奖赏函数的分层强化学习方法