MySQL之change master

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 问题来源:同事;   问题背景:在切换了master的IP(master的实例没变,只是IP变了)之后,主库和从库之间产生了非常高的流量;主从开启了GTID和semi-sync;   现象分析...

问题来源:同事;

 

问题背景:在切换了masterIPmaster的实例没变,只是IP变了)之后,主库和从库之间产生了非常高的流量;主从开启了GTIDsemi-sync

 

现象分析:

从监控图表上看,主库产生的异常流量全部为sendreceive正常;

从库的异常流量全部为receivesend正常;

主库的send流量曲线和从库的receive曲线是基本重合的;

 

通过对流量监控的观察,基本判断为主库的send流量全部发往了从库;

据描述,当时候在从库上的操作只有一个change master, 修改了master_host,并指定了auto_position=1

 

提出疑问:是否是change master导致了从库重新接收了主库上已经执行过的binlog

 

在测试环境验证一下:

MySQL5.7.12GTID

 

使用auto_position配置的主从,执行几个操作,看一下relay-log的内容,

这时候再在从库上面change master,看一下relay-log的内容;

可以发现,在change master以后,MySQL已经把原有的relay-log清空了,并且在新的relay-log里面标注了有关GTID的信息;

重新开启slave,使用auto_position=1,再看一下relay-logslave的信息;


可以看到slave已经启动,但是并没有从主库拉取日志,那么在主库上执行一个sql看看,

可以看到重新同步的时候,slave接收到的binlog,是从之前已执行GTID之后的日志,并没有接收已经执行过的binlog

所以change master,并使用auto_position=1,并不会导致从库去重新拉去已经执行过的主库的binlog;

问题的延伸:如果在change master的时候,从库本身已经有延迟,那么在change master之后,之前已经拉取到的binlog(已经拉取,但是还没有在从库复现的那一部分)会不会重新拉取,从而产生短时间内的流量高峰?

回答:会;


验证:拿正在跑sysbench的环境看看,从库已经有延迟了,这时候停掉slave, 看一下从库的relay-logslave的信息;

接收到的事务ID远多于执行完的,说明有比较大的延迟;


找到relay-log中对应的这个事务


以及事务所处的relay-log的位置


可以看到relay-log中确实已经堆积了一部分log了,

然后change master, 看看slave的信息,再看看监控和relay-log的信息;


和之前一样,相关的relay-log全部被清空了,那么单独打开IO thread, 然后看看监控中流量的数据,
主库全部是发送,

从库全部是接收,

如预料一般,之前没来得及同步的那一部分日志,又被拉取下来了;

 

结论:如果在从库有延迟的情况下,执行change master的操作,会清除relay-log,然后重新拉取延迟的那一部分的binlog会在主从之间产生一个流量高峰,有多高,持续多久,取决于延迟的这部分binlog的大小;

 

那么,最开始提出的问题,是不是因为这个原因造成的?

回答:可能在切换的过程中确实有堆积一部分binlog,但并不是主要原因,因为当时异常流量的现象持续时间非常长,产生的总流量远远超过主库binlog总的大小;还需要继续去排查......

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
关系型数据库 MySQL 数据库
MySQL 的 change buffer 是什么?
MySQL 的 change buffer 是什么?
|
存储 关系型数据库 MySQL
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
211 3
|
存储 SQL 缓存
【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用
【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用
336 0
|
存储 固态存储 关系型数据库
【MySQL技术内幕】2.5-Master Thread工作方式
【MySQL技术内幕】2.5-Master Thread工作方式
107 0
|
关系型数据库 MySQL 数据库
MySQL 的 change buffer 是什么?
MySQL 的 change buffer 是什么?
|
前端开发 关系型数据库 MySQL
关于mysql的change和modify
关于mysql的change和modify
|
SQL 缓存 关系型数据库
MySQL(三)SQL优化、Buffer pool、Change buffer
MySQL(三)SQL优化、Buffer pool、Change buffer
328 0
|
关系型数据库 MySQL 数据库
MySQL学习笔记-change buffer 和 redo log
MySQL学习笔记-change buffer 和 redo log
283 0
|
SQL 缓存 监控
一文带你了解MySQL之Change Buffer
上一篇文章一文带你了解MySQL数据库InnoDB_Buffer_Pool(点击跳转)我们学习了InnoDB Buffer Pool的工作原理,其作用是减少MySQL读取数据时直接与磁盘打交道的次数。那么写入数据时MySQL是否做了减少IO的优化呢?答案是肯定的,就要我们深入的学习Change Buffer。
610 0
一文带你了解MySQL之Change Buffer

推荐镜像

更多