首页 > 数据库 >从mysql主从复制原理分析故障及延时场景!

从mysql主从复制原理分析故障及延时场景!

时间:2023-07-01 14:24:35浏览次数:57  
标签:binlog 主从复制 sql 故障 线程 延时 mysql 日志 从库

在很多的情况下生产环境所发生的问题,实际上都可以通过其工作原理来解决例如:mysql主从复制原理:

 

 

1.当用户在主库中写入数据时,将sql语句的执行写入binlog二进制文件中

2.从库会生成一个i/o线程用来监听binlog日志文件的变化,若binlog文件发生变化,那么i/o线程将会提取binlog日志文件中的变化,并将其写入从库relaylog中。而此过程进行的候,master主库也会生成mysql dump进程用来将日志改变内容发送给i/o线程。

3.从库也会生成一个sql线程用来将relaylog日志文件中的新增转换为sql语句在从库中执行。

4.至此主从复制完成。

  那么既然说知道了复制原理以及这个过程中关键的几个线程,那么我们所面对的问题是否可以从这几个核心内容上去入手分析!

 

首先从io线程去分析故障:

 

1.io线程要去binlog日志文件中获取日志,那么如果说binlog日志丢失呢,(公司定期清理日志,机缘巧合,刚复制的时候,日志被清理了)此时io线程找不到binlog日志则会成变为故障状态

2.io线程同时也会负责主从之间的连接,如果此时网络断了,或者时主库宕机了,或者是主数据库密码错误,也会导致双端故障。(双方都互相不通信了自然就会出现故障)

3.io线程拿到日志后会写入relaylog日志,那么如果从库relaylog丢失或者故障,那么会使拿到的日志没地方去写,导致主从故障。

 

再从sql线程去分析故障(sql语句执行不了)

那么sql线程是做什么的,他就是回访relaylog中的日志事件,也就是在后台执行sql语句。

1.realy-log文件丢失(误删或者是磁盘故障)。找不到relaylog文件导致主从复制故障。

2.数据库的版本不同,某些操作因为版本的不同无法操作。

3.表的数据类型不同,导致写入的时候,无法写入

4.当主库写入的时候发送从库内容不一致(异步复制的时候多见)出现故障。

 

那么分析完故障以后,再分析一下主从延时。(主库做了之后从库很久都没有做)

影响:业务中做了读写分离,写进入之后一致查询不到信息!

监控方法:Seconds_Behind_Master 参数

分析原理

主库:

1.binlogdump将binlog中的日志发送给io线程,再高并发写入时,binlogdump压力过大导致延时。没有groupcommit(5.7版本底层自动实现)批量提交时大量数据一条一条给到io。

2.事务的大小导致binlogdump发的慢。

从库:

  1. i/o线程落地慢,写入慢。考虑高性能硬件。或者说换结构。
  2. Sql线程回放:默认只有1个sql线程,那当执行时一条一条的执行relaylog。导致延时。当然也可以初始化多个sql线程,但对于执行的顺序会有问题发生!

 

 

总结:很多实际环境中的问题都可以通过从底层原理上去分析出来,那么当你遇到问题的时候能够快读定位问题所在,对于自己解决问题的帮助是否很大呢?比如故障了,选择重构,或者是根据业务指定其他解决方案。

标签:binlog,主从复制,sql,故障,线程,延时,mysql,日志,从库
From: https://www.cnblogs.com/lgdyes/p/17519218.html

相关文章

  • MySQL联合索引生效验证
    建表、添加数据,用于测试CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENT,`gid`varchar(20)NOTNULL,`cid`int(11)DEFAULTNULL,`uid`int(11)DEFAULTNULL,`name`varchar(255)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULL,PRIMARYKEY......
  • jmeter接口测试 -- 连接数据库(MySQL)
    三个步骤一、下载MySQL的连接驱动1、先查看MySQL的版本1)服务器上查看:mysql--version 2)在连接工具上查看 2、下载连接驱动,下载地址:https://dev.mysql.com/downloads/connector/j/1)选择系统(windows系统才选择我下图中......
  • 启动mysql时报错Failed to start mysqld.service: Unit not found
    问题描述:启动mysql时报错Failedtostartmysqld.service:Unitnotfound,如下所示:数据库:mysql5.7.42系统:rhel7.31、问题重现--mysql安装过程[root@leo-mysql-master~]#yumlocalinstallhttps://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm[root@leo......
  • yum安装mysql时出现Public key for mysql-community-common-5.7.42-1.el7.x86_64.rpm
    问题描述:yum安装mysql时出现Publickeyformysql-community-common-5.7.42-1.el7.x86_64.rpmisnotinstalled告警,如下所示:数据库:mysql5.7.42系统:rhel7.31、问题重现[root@leo-mysql-master~]#yuminstall-ymysql-community-serverLoadedplugins:langpacks,product......
  • mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导
    mysql联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索那就是主表和从表的关联字段的编码方式不一样!!!产生的现象:解决之后,正确的使用了t2.order_noref索引,而不是ALL检查mysql主体编码方式,是否由于后来新建的表的关联字段和之前的主表的......
  • MYSQL:首次找不到.log文件
    一开始在文件中没有SXR.log文件。 后退,在my.ini中更改 一开始general-log=0,将其改为1即可。 ......
  • MySQL批量新增或修改时出现异常: Lock wait timeout exceeded; try restarting transact
    标题:解决MySQL批量新增或修改时出现"nestedexceptionisjava.sql.SQLException:Lockwaittimeoutexceeded;tryrestartingtransaction"异常摘要在使用MySQL数据库进行批量新增或修改操作时,有时候会遇到"nestedexceptionisjava.sql.SQLException:Lockwaittimeoutexcee......
  • 30秒了解Mysql
    本篇主要是一文带大家大致了解什么是Mysql。本篇文章主要涉及的内容有:什么是数据库?数据库中的几个基本术语?Mysql中InnoDB引擎支持的4种事务隔离级别Mysql中如何使用ENUM?Mysql中的存储引擎mysql中char与varchar的区别?主键和候选键的区别?blob和text的区别?Mysql中的锁数据库三范式什么......
  • 30秒了解Mysql
    本篇主要是一文带大家大致了解什么是Mysql。本篇文章主要涉及的内容有:什么是数据库?数据库中的几个基本术语?Mysql中InnoDB引擎支持的4种事务隔离级别Mysql中如何使用ENUM?Mysql中的存储引擎mysql中char与varchar的区别?主键和候选键的区别?blob和text的区别?Mysql中的锁数据......
  • mysql5.7.13 使用笔记
    社区版下载地址:https://dev.mysql.com/downloads/mysql/ 安装:http://www.linuxidc.com/Linux/2016-04/130414.htm     (配置文件my.cnf在网页的最下面)更新yum源:tar解压失败:http://alany.blog.51cto.com/6125308/1422299###############################################......