首页 > 数据库 >【MySQL】MySQL主从复制延迟原因及处理思路

【MySQL】MySQL主从复制延迟原因及处理思路

时间:2023-09-01 16:33:06浏览次数:48  
标签:主库 主从复制 SQL MySQL DDL 从库 延迟

  MySQL主从复制延迟原因及处理思路

  • 主库DML请求频繁(TPS较大)

主库写请求较多,有大量insert、delete、update并发操作,短时间产生了大量的binlog 【原因分析】 主库并发写入数据,而从库SQL Thread为单线程应用日志,很容易造成relaylog堆积,产生延迟。 【解决思路】 做sharding,通过scale out打散写请求。或考虑升级到MySQL 5.7+,开启基于逻辑时钟的并行复制。  
  • 主库执行大事务

大量导入数据,INSERT INTO $tb1 SELECT * FROM $tb2、LOAD DATA INFILE等;比如UPDATE、DELETE了全表等 【原因分析】 假如主库花了5分钟更新一张大表,在主从库配置相近的情况下,从库也需要花几乎同样的时间更新这张大表,此时从库延迟开始堆积,后续的events无法更新。 【解决思路】 拆分大事务,及时提交。  
  • 主库对大表执行DDL语句

现象和主库执行大事务相近;检查Exec_Master_Log_Pos一直未动,也有可能是在执行DDL。 【原因分析】 1、DDL未开始,被阻塞,SHOW SLAVE STATUS检查到Slave_SQL_Running_State为waiting for table metadata lock,且Exec_Master_Log_Pos不变。 2、DDL正在执行,SQL Thread单线程应用导致延迟增加。Slave_SQL_Running_State为altering table,Exec_Master_Log_Pos不变 【解决思路】 通过processlist或information_schema.innodb_trx来找到阻塞DDL语句的查询,干掉该查询,让DDL正常在从库执行。 DDL本身造成的延迟难以避免,建议考虑: ① 业务低峰期执行 ② set sql_log_bin=0后,分别在主从库上手动执行DDL(此操作对于某些DDL操作会造成数据不一致,请务必严格测试)  
  • 主库与从库配置不一致

【原因分析】 硬件上:主库实例服务器使用SSD,而从库实例服务器使用普通SAS盘、cpu主频不一致等 配置上:如RAID卡写策略不一致,OS内核参数设置不一致,MySQL落盘策略不一致等 【解决思路】 尽量统一DB机器的配置(包括硬件及选项参数) 甚至对于某些OLAP业务,从库实例硬件配置高于主库等  
  • 表缺乏主键或唯一索引

binlog_format=row的情况下,如果表缺乏主键或唯一索引,在UPDATE、DELETE的时候可能会造成从库延迟骤增。 此时Slave_SQL_Running_State为Reading event from the relay log。 并且SHOW OPEN TABLES WHERE in_use=1的表一直存在。 Exec_Master_Log_Pos不变。 mysqld进程的cpu几近100%(无读业务时),io压力不大 【原因分析】 做个极端情况下的假设,主库更新一张500w表中的20w行数据,该update语句需要全表扫描 而row格式下,记录到binlog的为20w次update操作,此时SQL Thread重放将特别慢,每一次update可能需要进行一次全表扫描 【解决思路】 检查表结构,保证每个表都有显式自增主键,并建立合适索引。  
  • 从库自身压力过大

【原因分析】 从库执行大量select请求,或业务大部分select请求被路由到从库实例上,甚至大量OLAP业务,或者从库正在备份等。 此时可能造成cpu负载过高,io利用率过高等,导致SQL Thread应用过慢。 【解决思路】 建立更多从库,打散读请求,降低现有从库实例的压力。    

标签:主库,主从复制,SQL,MySQL,DDL,从库,延迟
From: https://www.cnblogs.com/sxdcgaq8080/p/17672283.html

相关文章

  • 通过延迟从库来恢复MySQL数据【转】
    在前面,我们讲了,通过创建一个临时从库,再把数据同步到误操作的前一个事务,来恢复误删除的数据,可以点击跳转。但是临时准备一套从库,会多花费很多时间,那有没有更快的办法呢?这一篇文章,就讲一下通过延迟从库,来恢复误删除的数据。比如平时这个从库都是延迟主库1小时,当主库出现误操作,从......
  • Linux完全卸载MySQL(二进制包/源码 安装方式)
    测试环境说明:[root@linuxpg53~]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)[root@linuxpg53~]#mysql--versionmysqlVer14.14Distrib5.7.30,forlinux-glibc2.12(x86_64)usingEditLinewrappermysql>status--------------mysqlVer......
  • mysql数据库运行sql:datetime(0) NULL DEFAULT NULL报错【杭州多测师_王sir】
     一、错误信息CREATETABLE`file`(`id`varchar(32)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULLCOMMENT'文件md5',`name`varchar(128)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULL,`create_time`datetime(0)NULLDEFA......
  • MySQL的基本概念和常见用法
    MySQL是一种流行的开源关系型数据库管理系统(RDBMS),广泛用于开发Web应用程序和管理数据。以下是MySQL的知识大纲,涵盖了MySQL的基本概念和常见用法:1.数据库基础什么是数据库?什么是关系型数据库?数据库管理系统(DBMS)的作用。MySQL的历史和发展。2.安装和配置下载和安装MySQL......
  • 软件测试|MySQL唯一约束详解
    简介MySQL唯一约束(UniqueKey)是指所有记录中字段的值不能重复出现。MySQL中的唯一约束是一种用于确保表中某列或多列的取值唯一的数据库约束。唯一约束的作用是防止表中出现重复的值,确保数据的完整性和一致性。在本文中,我们将详细介绍MySQL中唯一约束的定义、用法以及其在数据库设......
  • 软件测试|MySQL 非空约束详解
    简介MySQL中的非空约束(NOTNULLConstraint)是一种用于确保表中某列不允许为空值的数据库约束。非空约束的作用是保证特定列的数据始终包含有效值,防止在插入或更新操作时出现空值,从而维护数据的完整性和一致性。在本文中,我们将详细介绍MySQL中非空约束的定义、用法以及在数据库设计......
  • mysql快速学习
    MySQL简介MySQL是关系型数据库(即通过外键关联来建立表与表的连接)补充一下非关系数据库NoSQL:非关系型数据库,常见的有Redis、mongoDB、CouchDB、cassandra等等特点:免费,开源数据库小巧,功能齐全使用便捷可运行于Windows或Linux操作系统可适用于中小型甚至大型网站应......
  • 243.mysql 内存统计相关
    1.查看mysql是否打开了关于innodb内存相关的监控SELECT*FROMperformance_schema.setup_instrumentsWHERENAMELIKE'%memory/innodb%';2.没有打开的话开一下(自己判断:重启数据库会恢复原有设置)#updateperformance_schema.setup_instrumentssetenabled='yes'wher......
  • Oracle数据迁移MySQL的三种简单方法
    Oracle数据迁移MySQL的三种简单方法更新时间:2023年06月05日10:58:16  作者:牛牛的笔记 对于许多企业而言,迁移数据库时最大的挑战之一是如何从一个数据库平台顺利迁移到另一个平台,下面这篇文章主要给大家介绍了关于Oracle数据迁移MySQL的三种简单方法,需要的朋友可以参......
  • MySQL InnoDB 是怎么使用 B+ 树存数据的?
    这里限定MySQLInnoDB存储引擎来进行阐述,避免不必要的阅读歧义。首先通过一篇文章简要了解下B树的相关知识:你好,我是B树。B+树是在B树基础上的变种,主要区别包括:1、所有数据都存储在叶节点,其它几点作为索引存储。2、数据节点添加链指针,便于横向检索。数据是怎么......