MySQL数据库运维之主从复制延迟问题排查

上篇文章介绍了单机环境下的MySQL主从异步复制和主从半同步复制的搭建过程。搭建过程很简单,但是在实际使用过程中,更多的是解决问题,本篇文章将介绍一下MySQL主从复制中常见的问题以及如何定位问题和如何解决问题。

一、从库复制延迟问题

1、可能的原因如下
(1)主从服务器处于不同的网络之中,由于网络延迟导致;
(2)主从服务器的硬件配置不同,从服务器的硬件配置(包括内存,CPU,网卡等)远低于主服务器;
(3)主库上有大量的写入操作,导致从库无法实时重放主库上的binlog;
(4)主库上存在着大事务操作或者慢SQL,导致从库在应用主库binlog的过程过慢,形成延迟;
(5)数据库实例的参数配置问题导致,如:从库开启了binlog,或者配置了每次事务都去做刷盘操作;

2、主从同步延迟问题判断
(1)根据从库上的状态参数判断


在输出结果中找到Seconds_Behind_Master参数,这个参数表示的是从库上的IO线程和SQL线程相差的时间,然后根据该参数值判断,这个值只是初步判断,不能由这个值来下结论,有如下几种情况:
a、0:表示无延迟,理想状态;
b、NULL:表示从库上的IO线程和SQL线程中,有某一个线程出现问题,可以再次查看Slave_IO_Running和Slave_SQL_Running的值是否都为Yes;
c、大于0:表示主从已经出现延迟,这个值越大,表示从库和主库之间的延迟越严重;
d、小于0:这个值在官方文档中没有说明,通常不会出现。如果出现,那恭喜你中奖了,撞见MySQL的bug了;

(2)根据主从库上面当前应用的二进制日志文件名称或者重放日志的位置来判断
① 同时打开两个MySQL的命令行窗口,分别打开主库和从库,在第一个窗口上执行查看主库当前状态的命令


② 在第二个从库的命令行窗口执行如下命令


③ 比较从库上的Master_Log_File和Relay_Master_Log_File文件之间是否有差异
a、如果有差异,则说明主从延迟很严重;
b、如果没有差异,则比较Read_Master_Log_Pos和Exec_Master_Log_Pos的差异,这俩参数分别表示从库当前读取到的主库的二进制日志文件位置点和已经执行到的位置点;
c、如果上述输出都没有差异,可以通过主库上"show master status"和从库上"show slave status"的结果作比较。主要比较主库的"File"和从库的"Master_Log_File",主库上的"Position"和从库上的"Read_Master_Log_Pos";

3、主从延迟解决办法
(1)判断是否由于网络导致
方法:测试主从库之间的网络延迟,比如测试ping延迟。同时可以检查主从同步的时候是否使用了主库的域名来同步,而域名解析速度可能会特别慢。或者使用其他测试工具;
(2)判断是否由于硬件环境导致
方法:确认主从库的硬件配置是否相差较大,如果配置参数相差较大,可以排查从库上的CPU,内存,IO使用率来判断是否因为硬件配置导致;
(3)判断是否在主库上有大量的DML操作
方法:可以再主库上通过"show full processlist"命令查看当前正在执行的sql,查看是否有大量正在执行的SQL,或者观察主库的CPU和内存使用率,判断是否有高并发操作;
(4)判断是否有慢SQl,可以再主库上临时打开慢SQL记录,临时打开方法如下


(5)检查从服务器参数配置是否合理
① 查看从库是否开启了binlog日志,从库上执行如下命令查看


如果开启了binlog日志,而且从库未充当其他库的主库时,可以将从库上的binlog关闭,否则会增加从库负担,每次重放完成主库的binlog还要记录到自身的binlog

② 查看从库上的sync_binlog参数的值,这个参数表示的是事务提交多少次之后,由MySQL来将binlog_cache中的数据刷新到磁盘,有以下几种值:
0:表示事务提交之后,MySQL不做刷新binlog_cache到磁盘的操作,而是由操作系统来定时自动完成刷盘操作,这种操作对性能损耗最少,但是也最不安全;
n:表示提交n次事务之后,由MySQL将binlog_cache中的数据刷新到磁盘,如果开启,会对性能有一定程度的损耗。所以,从库上如果延迟很严重,可以考虑将该参数的值设为0;


③ 如果从库中要同步的数据库使用的是InnoDB存储引擎,可以查看innodb_flush_log_at_trx_commit参数。这个参数表示事务执行完成之后,多久的频率刷新一次日志到磁盘上,可用的值有如下几种:
0:表示MySQL会将日志缓冲区中的数据每秒一次地写入日志文件中,并且日志文件的刷盘操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作,效率最搞,但是安全性也比较低,可能会丢失数据;
1:每一次事务提交都需要把日志写入磁盘,这个过程是特别耗时的操作;
2:每一次事务提交之后,不会自动触发日志刷盘的操作,而是由操作系统来决定什么时候来做刷新日志的操作,在操作系统挂了的情况下才会丢失数据;
如果在主从延迟非常严重的情况下,可以将从库的该参数设置为0,以提高从库上重放主库二进制日志的效率。


注意:上述设计到修改MySQL数据库实例的操作中,修改之后会立刻生效,但是重启实例之后,会失效,如果要永久修改,则需要编辑mysql配置文件,然后重启。

至此,主从复制延迟的常见原因就介绍完毕,还有更多其他原因需要实际问题实际解决,此处并未提到,欢迎大家评论提出!下篇文章将介绍MySQL数据库的数据备份与恢复!

后续文章将更新在个人小站上,欢迎查看。

原文地址:https://www.cnblogs.com/sqlserver-my/p/11017518.html

时间: 2024-10-17 02:39:53

MySQL数据库运维之主从复制延迟问题排查的相关文章

MySQL数据库运维之主从复制搭建

上篇文章详细介绍了MySQL数据库的单机多实例搭建,本篇文章将在上篇文章的基础上介绍MySQL主从复制过程,其中常见的复制架构有:异步复制,半同步复制及同步复制.常用的复制架构有异步复制及半同步复制! 一.常见的复制架构 1.主主复制(1)结构图: (2)说明:主主复制即复制的两个实例互为主从,两个库中都可以同时读和写:(3)优点: 2.一主一从(1)结构图: (2)说明:指的是在两个数据库实例中,一个实例扮演着主库的角色,另一个实例扮演着从库的角色.这种方案中,从库通常用来作为备份使用,提供服

MySQL数据库运维课程

MySQL数据库运维课程 http://www.dataguru.cn/article-4834-1.html?union_site=comm100 课程大纲 第一课:机器选型.系统规划 第二课:安装部署 第三课:压力测试 第四课:性能优化 第五课:字符集和权限安全 第六课:日志系统 第七课:备份与恢复1 第八课:备份与恢复2 第九课:常用工具 第十课:MySQL集群 第十一课:分布式集群 第十二课:集群高可用(HA)和容灾演练 第十三课:自动化运维 第十四课:监控和审计系统 第十五课:成长规划

PL1900-炼数成金MySQL数据库运维

随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了.对于学习有困难不知道如何提升自己可以加扣:1225462853进行交流得到帮助,获取学习资料. 下载地址:http://pan.baidu.com/s/1jI05TPW MySQL数据库作为世界上最流行的开源数据库,以简单.易用.开源等特点,收到互联网行业的推崇.随着去IOE运动的如火如荼,MySQL数据库已经

XXMySQL数据库运维变更流程

MySQL数据库运维变更流程 草拟时间:2015.11.13制订时间:修订时间: 0x00 目的 规范MySQL数据库的运维人员变更流程,降低操作流程引发的安全隐患,减少人为的错误风险. 0x01.场景 1.业务人员根据业务需要进行数据订正,库表字段结构变更的相关需求.2.运维人员根据数据库日常运维,故障处理与性能优化的变更需求. 0x02.类型 1.数据订正(insert,update,delete相关操作) 重大变更  数据订正表的总数据条数100W以上,且表属于核心业务.        数

与“十“俱进 阿里数据库运维10年演进之路

导语阿里巴巴集团拥有超大的数据库实例规模,在快速发展的过程中我们在运维管理方面也在不断的面临变化,从物理器到容器.从独占到混布.从本地盘到存储计算分离.从集团内到大促云资源,从开源的MySQL到自研分布式数据库,运维管控进行了自我革新与进化. 作者--谭宇(花名:茂七),阿里巴巴高级技术专家.2009年加入阿里,对分布式系统和数据库领域有很大的兴趣.目前负责阿里巴巴集团数据库中台建设,支撑了集团数据库在容器化.存储计算分离.在离线混部.大规模迁移建站以及智能运维等技术探索与落地. 本文梳理了阿里

一个兼职DBA的数据库运维经验 小米科技 [email protected] 2011

一个兼职DBA的数据库运维经验 小米科技  [email protected] 2011 报警监控系统粒度太大,不好用(我们公司现状)数据库状况:十个服务器,惠普HP380G7 戴尔R710 ,都做了主从全部sas盘 15K RAID10服务器内存24G数据库跟业务混用,不是专门给数据库用 导致出问题(我们公司现状)备份用的xtrabackup 数据库不大:160G 70G 30G程序支持分库分表 --------------------------问题 io util% 100%(学)正常io

数据库运维保障

数据库运维保障 国庆假期本来是可以开开心心去玩的,但是由于某些突发情况,例如天灾导致的数据库故障的情况还是有可能出现 如果出现这种情况不但破坏了国庆假期玩乐的美好心情,节后上班也可能由于没有做好预防措施要遭遇领导挨批. 为了避免发生这种情况,对于公司业务系统的相关运维人员来说不能掉以轻心,一定要做好预防措施. 以下是总结的一些突发情况预防措施 1.做好公司业务系统的监控报警,关键时刻启动应急预案 2.服务器选择双电源服务器,避免单电源故障造成的服务器宕机 3.选择优质的机房,机房一定要有发电机,

从一个简单的约束看规范性的SQL脚本对数据库运维的影响

原文:从一个简单的约束看规范性的SQL脚本对数据库运维的影响 之前提到了约束的一些特点,看起来也没什么大不了的问题,http://www.cnblogs.com/wy123/p/7350265.html以下以实际生产运维中遇到的一个问题来说明规范的重要性. 如下是一个简单的建表脚本,表面上看起来并没有什么问题.其中创建了3个约束,一个主键约束,一个唯一约束,一个默认值约束,该脚本执行起来没有任何问题. USE Test GO if exists(select 1 from sys.tables

DBA_Oracle数据库运维监控(案例)(待学习)

2014-07-27 BaoXinjian 一.摘要 1 - 数据库账户是否锁住监控 2 - 数据库表空间大小 3 - 进程异常停止监控 4 - Session中处理时间过长的进程监控 二.案例1 - 账户是否锁住监控 1. 如何监控 2. 如何处理 三.案例2 - 表空间大小不够监控 1. 如何监控 2. 如何处理 四.案例3 - 进程异常停止监控 1. 如何监控 2. 如何处理 五.案例4 - Session中处理时间过长的进程监控 1. 如何监控 2. 如何处理 DBA_Oracle数据库