MySQL 5.7并发复制和mysqldump相互阻塞引起的复制延迟-Linux运维日志

有需要服务器方面的需求和咨询,可以联系博主 QQ 7271895

本来MySQL BINLOG和SHOW PROCESSLIST命令属于八竿子打不着的两个事务,但在最近故障排查中,发现主库和从库已经存在很严重的复制延迟,但从库上显示slave_behind_master值为0,复制SQL线程与备份线程之间相互阻塞,但未报死锁

在从库上执行SHOW PROCESSLIST发现复制的SQL线程等待锁,而等待SQL的WHERE条件竟然是类似于WHERE C1=’ABC’ AND C2>’2018-03-01′ AND C2<‘2018-03-26’ 这种个范围查询,第一时间想到就是怎么是个基于STATEMENT的复制,不科学啊,我们生产环境统一使用基于ROW格式的复制,难道研发私自修改回话级别的复制格式?

使用MySQL Binlog导出日志一看:

MySQL 5.7并发复制和mysqldump相互阻塞引起的复制延迟-Linux运维日志

发现真错怪研发同事啦,rbr_only=yes说明基于ROW格式进行复制,“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”也是基于行格式复制的典型特征之一,last_committed和sequence_number用于MySQL 5.7版本中的并发复制,row_query后跟的是在主库上执行的原始SQL,也就是我们在从库SHOW PROCESSLIST中看到的SQL,但实际上从库执行的还是BINLOG部分,该BINLOG可以直接可以直接直接在从库上执行,也可以解析成一行行的数据DML操作,BINLOG部分如下:

MySQL 5.7并发复制和mysqldump相互阻塞引起的复制延迟-Linux运维日志

==========================================================================================================

另外一个很有意思的问题,如果在从库上运行mysqldump进行备份,且从库上使用并行复制,会导致备份和复制相互阻塞:

MySQL 5.7并发复制和mysqldump相互阻塞引起的复制延迟-Linux运维日志

在上面的阻塞中,多个SQL线程与备份线程相互之间阻塞,且MySQL无法有效检测出死锁环路而触发死锁的回滚机制,导致复制线程和备份作业相互hang住,需要DBA进行干预(取消备份或停止复制),在复制SQL线程被hang住期间,复制的IO线程仍可以正常工作接受到主库的Binlog信息,但slave_behind_master并不会随之增大,如果仅通过监控slave_behind_master值来判断主从复制延迟,则会导致延迟监控存在严重漏洞,因此在监控复制延迟时,除监控slave_behind_master值外,还需要监控主库binlog位置点和从库执行的binlog位置点。

如果有不懂的、欢迎加入我们学派吧。一起学习交流。右上角站长群

主题测试文章,只做测试使用。发布者:云大使,转转请注明出处:https://www.xp8.net/data/641.html

(0)
打赏 微信扫一扫 微信扫一扫
apache如何做到日志分割-Linux运维-学派吧
上一篇 2018年9月30日 下午2:01
下一篇 2018年9月30日 下午7:29

相关推荐

  • SQL Server 2000安全设置之-数据库危险存储过程的删除与恢复系教程

    今天给大家打来一篇关于sql数据库安全设置 操作步骤:1、删除危险存储过程打开企业管理器-工具-SQL 查询分析器,输入下面代码use masterexec sp_dropextendedproc ‘xp_cmdshell’exec sp_dropextendedproc ‘xp_dirtree’exec sp…

    数据库运维 2018年10月17日
    3.2K00
  • MySQL中utf8和utf8mb4编码有什么区别?-mysql教程-学派吧

    本篇文章给大家带来的内容是关于MySQL中utf8和utf8mb4编码有什么区别?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不…

    数据库运维 2019年4月9日
    2.8K00
  • Navicat连接MySQL8.0的方法教程-学派吧

    本篇文章给大家带来的内容是关于Navicat连接MySQL8.0的方法(有效),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 今天下了个 MySQL8.0,发现Navicat连接不上,总是报错1251; 原因是MySQL8.0版本的加密方式和MySQL5.0的不一样,连接会报错。 试了很多种方法,终于找到一种可以实现的: 更改加密方式 1.…

    数据库运维 2018年11月26日
    3.1K00
  • 数据库中的Schema是什么?-mysql教程-

    数据库中schema是数据库对象集合,它包含了表,视图等多种对象。schema就像是用户名,当访问数据表时未指明属于哪个schema,系统就会自动的加上缺省的schema 我们在学习数据库中会碰到一个模糊的概念,它就是Schema。很多人对他都不是很了解,今天将要在文章中为大家详细介绍这个概念,具有一定的参考作用,希望对大家有所帮助。 【推荐课程:数据库教程…

    数据库运维 2019年4月24日
    5.6K00
  • MYSQL查询怎么优化?mysql查询优化的方法教程-mysql教程-学派吧

    本篇文章给大家带来的内容是关于python中进程池的简单实现代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助 1. 在所有用于where,order by和group by的列上添加索引 索引除了能够确保唯一的标记一条记录,还能是MySQL服务器更快的从数据库中获取结果。索引在排序中的作用也非常大。 Mysql的索引可能会占据额外的空间,并…

    数据库运维 2018年11月24日
    2.5K00

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

工作时间:周一至周五,9:30-18:30,节假日休息

添加微信
添加微信
分享本页
返回顶部