• ADADADADAD

    mysql复制延时排查[ mysql数据库 ]

    mysql数据库 时间:2024-12-24 19:13:17

    作者:文/会员上传

    简介:

    主从延时如果排查?1. show slave status\G,看一下relay_master_log_file & exec_master_log_pos数值有没有变化(如果是GTID复制也可以看executed_gtid_set的事物号有没有增长 ),

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    主从延时如果排查?

    1. show slave status\G,看一下relay_master_log_file & exec_master_log_pos数值有没有变化(如果是GTID复制也可以看executed_gtid_set的事物号有没有增长 ),如果一直不变化,说明有大事物,导致sql_thread线程hang住,这个时候需要查看主库的binlog,看一下是什么事物:

    mysqlbinlog -v --base64-output=decode-rows --start-position= exec_master_log_pos relay_master_log_file | less

    然后等大事物结束或者回滚;


    这次事物结束后,如果下次从库不能接受这样延时,怎么办,有什么根本的解决方法?

    (1)把从库对读要求比较高的业务切换到主库上;

    (2)以后更新大事物拆分成多个小事物,比如说一次更新20万条改为一次更新10万条;


    2. 如果relay_master_log_file & exec_master_log_pos数值增长很慢,怎么办?

    (1)解析对应的binlog: mysqlbinlog -v --base64-output=decode-rows --start-position= exec_master_log_pos relay_master_log_file | less

    查看对应的表,看看表有没有主键,索引等结构


    (2)检查系统是不是过载cpu,memory,io,


    io可以通过工具iotop和pt-ioprofile查看

    如果发现是mysql库下的slave_relay_log_info.ibd文件占用IO很高,可以考虑调大sync_relay_log_info,让这个文件同步不要太频繁。


    cpu可以通过top命令查看:

    如果user比较高,可以show processlist查看,慢日志,有没有大量的排序,主要是sql语句

    如果sys很高的话,一般来说,因为:

    1、发生swap

    2、数据库内发生严重的锁等待

    3、用了ssd等设备,产生大量中断,或者网卡中断(cpu中断不均衡)

    4、MySQL里频繁创建连接及关闭

    5、频繁用到timestamp列,且time_zone=SYSTEM


    memory:

    free -gt

    vmstat


    看看mysql的errorlog,主从的server-id是否不一样


    如何查看网卡是否连接:

    ifconfig |grep up

    dmesg|grep eth


    以上方法都不行的话,可以尝试其他方法:

    使用工具perf top

    pstack `pidof mysqld`

    ipmitool

    硬件方面raid卡等


    mysql复制延时排查.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载