首页 > 数据库 > MySQL > 正文

mysql复制超时排查

2024-07-24 12:36:03
字体:
来源:转载
供稿:网友
  主从延时如果排查?
 
  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卡等

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表