首页 > 数据库 >记一个mysql 主从切换的实验记录

记一个mysql 主从切换的实验记录

时间:2024-10-29 16:20:29浏览次数:6  
标签:主库 6bf6 11ee 0050569149b4 实例 master 切换 mysql 主从

一、前言
msyql 切换主库一般都是用高可用方案,例如MHA,MGR,高可用方案可以自动切主,但是MHA的failover功能无法把旧主自动挂到新主上作为从库使用,所以发生failover后,还需要手动把旧的主库作为备库挂到新的主库上。此时常规操作就是备份新主库,然后应用到旧主库上,然后再重新搭建主从。但是如果数据量非常大(例如TB级数据),备份就会耗费大量的时间和磁盘空间,这时候最佳方案就是不备份,利用gtid原理和binlog直接把旧的主库挂到新的主库上搭建好主从(下文会详细介绍)

还有就是没有用高可用架构的情况,只有主从集群,如果遇到需要切换的情况(比如物理机需要停机,日常计划中维护),这时也需要手动切换,此时也可以不用备份,利用gtid原理和binlog直接把旧的主库挂到新的主库上搭建好主从。注意,这种方式的切换必须要开启gtid,否则change master to 时需要自己手动去找对应的binlog file 和 position号。

二、手动切换操作实验
现在我们给两个mysql实例起名叫A,B,A是主库,B是备库

1、把原主从集群断开,在从库(B实例)上操作

stop slave;
reset slave all;

2、查看原主库(A实例)binlog情况

3、查看原备库(B实例)binlog情况


3cb75db8-6bf6-11ee-b1ce-0050569149b4:1-142 这个是模拟切换过程中向新的主库(B实例)写入数据,B实例自己产生的gtid事务。

4、把老的主库(A实例)挂到新的主库(B实例)上面,在A实例上操作

change master to 
master_host='192.168.167.133',
master_user='repl',
master_password='111222',                            
master_port=3306,
MASTER_AUTO_POSITION=1;


start slave;

show slave status\G  查看没有问题

5、查看新从库(A实例)binlog情况


可以看到B实例上的事务3cb75db8-6bf6-11ee-b1ce-0050569149b4:1-142 也都被接收并写入A实例了。

至此,手动切换实验完成,下面我们看下master_auto_position 这个参数的原理

三、master_auto_position 参数原理
我们知道开启gtid事务后,就不用指定file 和 position 号了,master_auto_position这个参数会自动去找主库上的事务,那它是怎么找的呢?下面是官网的描述:


这句话意思是,在执行change master to 命令后,从库会发送一个GTID SET,其中包含它已经接收、提交或两者兼而有之的事务,这个gtid set就是show master status;命令结果中的Executed_Gtid_Set字段值。

下面我们来验证下是不是这样:
验证原理是这样:现在A实例是从库,并且已经拥有主库的完整数据,也就是
3ab75db8-6bf6-11ee-b1ce-0050569149b4:1-621664,
3cb75db8-6bf6-11ee-b1ce-0050569149b4:1-142
这些事务,如果我们现在把主从断开,然后把A实例上的事务设置成3ab75db8-6bf6-11ee-b1ce-0050569149b4:1-621664这个,然后把A实例再挂到B实例上作为从库,看下是否A实例从3ab75db8-6bf6-11ee-b1ce-0050569149b4:1-621664 这些事务之后去自动找对应的gtid事务。如果是从3ab75db8-6bf6-11ee-b1ce-0050569149b4:1-621664 这写事务之后开始寻找,那么 3cb75db8-6bf6-11ee-b1ce-0050569149b4:1-142 这些事务都会再执行一遍,这样即可验证官网所说。

由于上面已经切换过主从,现在A实例是备库,B实例是主库

1、把现在的主从再断开,在A实例上操作

stop slave;
reset slave all;

2、在A实例上重新设置事务

reset master;
set @@GLOBAL.GTID_PURGED='3ab75db8-6bf6-11ee-b1ce-0050569149b4:1-621664';
show master status;

# 这里注意,Executed_Gtid_Set 这个值没法直接设置,但是可以设置GTID_PURGED值,在Executed_Gtid_Set值为空时,Executed_Gtid_Set值就等于设置的GTID_PURGED值。

3、重新启动从库线程

change master to 
master_host='192.168.167.133',
master_user='repl',
master_password='111222',                            
master_port=3306,
MASTER_AUTO_POSITION=1;

start slave;
show slave status \G

查看数据发现3cb75db8-6bf6-11ee-b1ce-0050569149b4:1-142 这些事务确实又执行了一遍,即验证master_auto_position 这个参数自动找的位置是Executed_Gtid_Set值的下一个事务号。

标签:主库,6bf6,11ee,0050569149b4,实例,master,切换,mysql,主从
From: https://www.cnblogs.com/sunjiwei/p/18512884

相关文章

  • 银河麒麟系统V10安装mysql5.7
    1、cat /proc/version查看系统版本2、官网(https://dev.mysql.com/downloads/mysql/)下载mysql 3、在服务器直接下载压缩包wgethttps://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar4、创建upload目录存储压缩包5、cd/uploa......
  • Linux安装mysql【超详细】
    一、下载安装包1、查看是否已经安装了MySQLrpm-qa|grepmysql2、查看系统位数getconfLONG_BIT3、下载MySQLMySQL官网地址4、也可以直接在服务器执行指令下载,但是下载速度比较慢。还是自己下载好拷贝过来比较快。wgethttps://dev.mysql.com/get/Downloads/my......
  • MySQL的where条件字符串区分大小写的问题
    https://blog.csdn.net/qq_45783259/article/details/132231226MySQL的where条件字符串区分大小写的问题在MySQL的默认情况下字符集采用的是utf8mb4,排序规则是utf8mb4_general_ci,这种情况下where条件遇到字符串是不区分大小写的。比如以下两条SQL语句查询出来的结果都是一样的,即......
  • MYSQL 锁后记(慢、死锁、强制释放) - 《小猫钓鱼-猫王争霸》
    在美丽的森林中,小猫们的钓鱼大赛依旧如火如荼地进行着,而“猫王争霸”的诱惑让每只小猫都充满了斗志。随着时间的推移,围绕着MySQL鱼表的各种问题也逐渐浮现。一、慢查询之困最近,小猫们发现存鱼和查看鱼表的操作有时候会变得异常缓慢。花猫焦急地说:“这可怎么办呀?存个鱼都......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现七
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现八
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 【项目实战】分布式日志搜索系统之数据同步方案(Logstash-input-jdbc、go-mysql-elast
    在构建分布式日志搜索系统时,数据同步是一个核心环节。以下是针对您提出的五种数据同步方案的详细分析:一、Logstash-input-jdbcLogstash是ElasticStack的一部分,用于从各种来源收集数据,并将其发送到Elasticsearch。Logstash-input-jdbc插件允许Logstash从关系型数据库(如My......
  • linux直接下载安装mysql8
    linux直接下载安装mysql8下载并解压下载地址:https://dev.mysql.com/get/Downloads/mkdir/opt/mysql8wgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.40-linux-glibc2.28-x86_64.tar.xztar-xJvfmysql-8.0.40-linux-glibc2.28-x86_64.tar.xzmvmysql-8.0.4......
  • 深度解读RDS for MySQL 审计日志功能和原理
    本文分享自华为云社区《【华为云MySQL技术专栏】RDSforMySQL审计日志功能介绍》,作者:GaussDB数据库。1.背景在生产环境中,当数据库出现故障或问题时,运维人员需要快速定位出异常或者高危的SQL语句。这时,审计日志能够提供详细的记录,帮助追踪每个数据库操作的执行者、执行时间以......
  • mysql递归SQL
    --表结构和数据DROPTABLEIFEXISTS`sys_region`;CREATETABLE`sys_region`(`id`int(50)NOTNULLAUTO_INCREMENTCOMMENT'地区主键编号',`name`varchar(50)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULLCOMMENT'地区名称',`sho......