设为首页 收藏本站
查看: 600|回复: 0

[经验分享] 处理mysql复制故障一例

[复制链接]

尚未签到

发表于 2018-9-27 07:36:09 | 显示全部楼层 |阅读模式
  今天一个主从复制的服务器出现了问题,数据和主服务器不一样,但是复制进程是对的。开始我只看了复制进程,没有太注意,原始内容如下:
  


  • mysql> show slave status\G
  • *************************** 1. row ***************************
  •                Slave_IO_State: Waiting for master to send event
  •                   Master_Host: 192.168.125.9
  •                   Master_User: slave
  •                   Master_Port: 9188
  •                 Connect_Retry: 10
  •               Master_Log_File: mysql-bin.000004
  •           Read_Master_Log_Pos: 805036116
  •                Relay_Log_File: localhost-relay-bin.000018
  •                 Relay_Log_Pos: 192473825
  •         Relay_Master_Log_File: mysql-bin.000004
  •              Slave_IO_Running: Yes
  •             Slave_SQL_Running: Yes
  •               Replicate_Do_DB:
  •           Replicate_Ignore_DB:
  •            Replicate_Do_Table:
  •        Replicate_Ignore_Table:
  •       Replicate_Wild_Do_Table:
  •   Replicate_Wild_Ignore_Table:
  •                    Last_Errno: 0
  •                    Last_Error:
  •                  Skip_Counter: 0
  •           Exec_Master_Log_Pos: 197587108
  •               Relay_Log_Space: 805036869
  •               Until_Condition: None
  •                Until_Log_File:
  •                 Until_Log_Pos: 0
  •            Master_SSL_Allowed: No
  •            Master_SSL_CA_File:
  •            Master_SSL_CA_Path:
  •               Master_SSL_Cert:
  •             Master_SSL_Cipher:
  •                Master_SSL_Key:
  •         Seconds_Behind_Master: 25236
  • Master_SSL_Verify_Server_Cert: No
  •                 Last_IO_Errno: 0
  •                 Last_IO_Error:
  •                Last_SQL_Errno: 0
  •                Last_SQL_Error:
  • 1 row in set (0.00 sec)
  

  后来发现数据不对,发现
  Read_Master_Log_Pos和Exec_Master_Log_Pos真么差别这么大,原理上,应该是挨着的, 然后开始找问题,把日志翻来覆去的看,没有发现任何问题,然后看了一下processlist: ,发现延迟了5个多小时,我的个娘耶。
  

  


  • mysql> show processlist\G
  • *************************** 1. row ***************************
  •      Id: 1
  •    User: root
  •    Host: localhost
  •      db: NULL
  • Command: Query
  •    Time: 0
  •   State: NULL
  •    Info: show processlist
  • *************************** 2. row ***************************
  •      Id: 2
  •    User: system user
  •    Host:
  •      db: NULL
  • Command: Connect
  •    Time: 1038
  •   State: Waiting for master to send event
  •    Info: NULL
  • *************************** 3. row ***************************
  •      Id: 3
  •    User: system user
  •    Host:
  •      db: NULL
  • Command: Connect
  •    Time: 18697
  •   State: freeing items
  •    Info: NULL
  • 3 rows in set (0.00 sec)
  

  基本确认主库和从库是延迟,而不是认为或者其他bug之类的东西。
  开始找延迟的原因吧:
  1、检查网络延时:
  


  • [root@localhost var]# ping 192.168.125.9
  • PING 192.168.125.9 (192.168.125.9) 56(84) bytes of data.
  • 64 bytes from 192.168.125.9: icmp_seq=1 ttl=64 time=0.555 ms
  • 64 bytes from 192.168.125.9: icmp_seq=2 ttl=64 time=0.588 ms
  • 64 bytes from 192.168.125.9: icmp_seq=3 ttl=64 time=0.635 ms
  • 64 bytes from 192.168.125.9: icmp_seq=4 ttl=64 time=0.588 ms
  • 64 bytes from 192.168.125.9: icmp_seq=5 ttl=64 time=0.586 ms
  

  没有发现问题。
  
2、检查系统资源
  


  • [root@localhost var]# iostat -dx 1 5
  • Linux 2.6.18-164.el5PAE (localhost.localdomain)         11/18/2011

  • Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
  • sda               0.07    40.80  0.22 123.53     6.06  1314.72    10.67     0.98    7.92   2.74  33.97
  • sda1              0.01     0.00  0.00  0.00     0.02     0.00    18.93     0.00    2.33   1.60   0.00
  • sda2              0.00     0.00  0.00  0.00     0.01     0.00    36.13     0.00    3.65   2.81   0.00
  • sda3              0.02     0.01  0.00  0.01     0.02     0.16    20.21     0.00    5.36   2.71   0.00
  • sda4              0.00     0.00  0.00  0.00     0.00     0.00     2.00     0.00   21.00  21.00   0.00
  • sda5              0.04    40.79  0.22 123.52     6.01  1314.56    10.67     0.98    7.92   2.74  33.96

  • Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
  • sda               0.00   156.00  2.00 365.00    16.00  4160.00    11.38     3.15    8.64   2.68  98.30
  • sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda4              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda5              0.00   156.00  2.00 365.00    16.00  4160.00    11.38     3.15    8.64   2.68  98.30

  • Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
  • sda               0.00   112.00  0.00 315.00     0.00  3448.00    10.95     2.52    8.06   3.13  98.70
  • sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda4              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda5              0.00   112.00  0.00 315.00     0.00  3448.00    10.95     2.52    8.06   3.13  98.70

  • Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
  • sda               0.00   103.96  0.00 195.05     0.00  2392.08    12.26     3.12   15.47   5.06  98.71
  • sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda4              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • sda5              0.00   103.96  0.00 195.05     0.00  2392.08    12.26     3.12   15.47   5.06  98.71
  

  发现有IO,但是不太厉害,算正常。
  
然后看CPU,使用top命令
  


  • Tasks: 141 total,   1 running, 139 sleeping,   1 stopped,   0 zombie
  • Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  • Cpu1  :  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  • Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  • Cpu3  :  0.0%us,  4.7%sy,  0.0%ni, 94.7%id,  0.0%wa,  0.0%hi,  0.7%si,  0.0%st
  • Cpu4  :  0.0%us,  1.3%sy,  0.0%ni,  1.0%id, 97.3%wa,  0.3%hi,  0.0%si,  0.0%st
  • Cpu5  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  • Cpu6  :  0.0%us,  0.0%sy,  0.0%ni, 91.3%id,  0.0%wa,  3.7%hi,  5.0%si,  0.0%st
  • Cpu7  :  0.3%us,  7.0%sy,  0.0%ni, 81.8%id,  0.0%wa,  1.0%hi,  9.9%si,  0.0%st
  • Mem:   4139196k total,  2605768k used,  1533428k free,   215052k buffers
  • Swap:  8385920k total,        0k used,  8385920k free,  2143992k cached
  

  发现
  

Cpu4  :  0.0%us,  1.3%sy,  0.0%ni,  1.0%id, 97.3%wa,  0.3%hi,  0.0%si,  0.0%st  这个核有点问题  

  wait太高的,话,应该是cpu在等待IO资源,导致的。 但是IO资源又不太高,才几M的写入。 不过现在也没办法,只有想法降低mysql的写入来试试看。  我关闭了slave更新bin-log的功能 #log-slave-updates  然后重启mysql,启动slave进程。现在Slave_SQL进程速度加快了,明显看见 Exec_Master_Log_Pos数增加,show processlist中的时间也在缩短, 过了有20多分钟,数据同步完成了。通过maatkit工具检查,没有问题。  故障现在是修复了,不过为什么mysql的IO那么低,却会导致IO资源缺乏,我尝试通过写文件来测试磁盘IO,应该可以达到130多M/s。 这个问题现在比较诡异了,估计是mysql slave只能使用单核导致的,而这台服务器虽然是8核的,但是单核的主频只有2.13,中继sql,执行sql,写入自己的blog,IO请求都在一个核上,导致的资源不足。
  在补充一下,这个机器业务空闲后,我做了一个基准测试,发现效率还是上不去。找了硬件的原因,也怀疑过编译参数,在相同硬件平台和mysql版本做了相关测试。最后发现这次性能问题的最终杀手是my.cnf的一个配置。这次心血来潮加了如下一个参数
  sync_binlog=1  //意思是即时同步binlog到硬盘上,不缓存日志,目的是避免硬件故障或者软件故障导致binlog没有即时写盘而丢失。但是开始没想到这个参数在QPS上到100左右后,性能消耗是如此的高,导致整个CPU核都在等待IO,建议大家以后不是特别需要,还是别碰这个参数了,默认是0,由操作系统来调度什么时候写入到硬盘,或者将值调整到比较大。
  还有一个就是innodb引擎的
  innodb_flush_log_at_trx_commit = N
N=0  – 每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上;

N=1  – 每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;

N=2  – 每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;

如果设置为1,效率也会相当的低,建议设置到2,如果想要性能再提交,可以设置为0.


具体可以参见如下文章:http://www.mysqlops.com/2011/10/26/mysql-variable-third.html




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-602519-1-1.html 上篇帖子: Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群 下篇帖子: 一个参数引起的mysql从库宕机血案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表