MySQL主从延迟高问题

2024年 5月 30日 58.3k 0

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!一

问题发现

某一天巡检时,发现某一套mysql主从延迟存在16743秒的延迟。

问题排查

2.1 查看mysql主从情况

主从延迟167436秒,且relay-log远大于mysql-bin。MySQL主从延迟高问题-1

2.2 查看从库当前进程

存在主从复制进程等待时间较大的问题。MySQL主从延迟高问题-2

2.3 查看主机资源使用情况

Cpu、内存、磁盘使用率都有冗余,主机互ping均没有丢包的情况。MySQL主从延迟高问题-3MySQL主从延迟高问题-4MySQL主从延迟高问题-5

2.4 查看从库磁盘I/O

%util接近100%,存在磁盘I/O繁忙的问题。关闭mysql主从复制,磁盘I/O恢复正常。MySQL主从延迟高问题-6

问题解决

综上,从库存在磁盘I/O繁忙,mysql主从延迟较高,从库复制主库数据时间高等待的问题,主从复制过程导致磁盘I/O繁忙,磁盘I/O繁忙导致数据积压,鉴于此,从提升主机磁盘I/O性能,以及优化mysql参数的两个方向来解决此问题。主机侧同事无法提升主机磁盘I/O性能,只能从优化mysql参数的方式来尝试修复,查看mysql控制磁盘写入策略参数:MySQL主从延迟高问题-7

注:

innodb_flush_log_at_trx_commit = 1:每次事务提交时,都会将日志写入并刷写到磁盘上,这样可以确保ACID的持久性,但是可能因为磁盘I/O的高频率操作而影响性能。

innodb_flush_log_at_trx_commit = 2:在事务提交时,日志只是写入到日志缓冲区中,而缓冲区则每秒刷写到磁盘一次。这个设置可以提高性能,因为将日志写入磁盘的频率降低了,减少了磁盘I/O操作的次数,但是如果MySQL异常退出,最近1秒内的事务可能会丢失。

与业务沟通后,允许MySQL异常退出时从库最近一秒的数据丢失,修改从库mysql参数innodb_flush_log_at_trx_commit=2,重启mysql,磁盘I/O恢复正常,mysql主从延迟逐渐降低。

问题总结:此次问题是由主机磁盘性能不足导致mysql主从同步延迟较大,通过修改mysql的innodb_flush_log_at_trx_commit参数,以减少磁盘I/O操作的次数,问题才得到解决。在生产环境中修改这个参数之前,一定要了解其可能带来的影响,与业务充分沟通后,根据系统需求进行适当的修改。
MySQL主从延迟高问题-8END

本文作者:符 海(上海新炬中北团队)

本文来源:“IT那活儿”公众号

MySQL主从延迟高问题-9

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论