点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!一
问题发现
某一天巡检时,发现某一套mysql主从延迟存在16743秒的延迟。
二
问题排查
2.1 查看mysql主从情况
主从延迟167436秒,且relay-log远大于mysql-bin。
2.2 查看从库当前进程
存在主从复制进程等待时间较大的问题。
2.3 查看主机资源使用情况
Cpu、内存、磁盘使用率都有冗余,主机互ping均没有丢包的情况。
2.4 查看从库磁盘I/O
%util接近100%,存在磁盘I/O繁忙的问题。关闭mysql主从复制,磁盘I/O恢复正常。三
问题解决
综上,从库存在磁盘I/O繁忙,mysql主从延迟较高,从库复制主库数据时间高等待的问题,主从复制过程导致磁盘I/O繁忙,磁盘I/O繁忙导致数据积压,鉴于此,从提升主机磁盘I/O性能,以及优化mysql参数的两个方向来解决此问题。主机侧同事无法提升主机磁盘I/O性能,只能从优化mysql参数的方式来尝试修复,查看mysql控制磁盘写入策略参数:
注:
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主从延迟逐渐降低。