MySQL复制滞后、延迟问题及解决方法

确认复制延迟的方法

执行

mysql>show slave status\G

如果"seconds_behind_master"不为"0",需要对其关注,并调查其产生的根本原因

 

首先需要确认滞后的原因会来自两方面,来自IO_Thread (比如网络连接速度慢,磁盘慢)或 SQL_Thread(施放中继日志里面的SQL过慢)

执行

mysql>show master status\G

 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

确认一下两个线程是否运行,如果没有正常运行,确认一下错误日志里面的内容,然后使其运行。

接下来需要确认,是否

Master_log_file

Relay_Master_Log_File

Read_Master_Log_Pos

Exec_Master_Log_Pos

值相等,但是Seconds_Behind_Master从未减少。

然后在主服务上执行SHOW MASTER STATUS,确认当前主服务的日志文件和位置,Exec_Master_Log_Pos 是否落后 Read_Master_Log_Pos。

 

解决方法

 

如果从服务有多台的情况下,检查:

全部的主机是否使用相同的硬件

是否使用同一版本的MySQL(从服务器的版本应等于或高于主服务器版本)

检查路由、网络防火墙

 

IO 线程滞后

通常是网络原因或者饱和原因

使用大容量的binlog

检查网络和磁盘的速度

 

SQL 线程滞后

1 、检查在从服务器上执行过长的事务

2 、检查在从服务器上活动集中的IO操作

停止IO线程,确认问题是否解决

改变innodb_flush_log_at_trx_commit参数,确认是否解决,尝试改为0,确认一下结果,最终可以尝试改为2。

减少max_relay_log_size值 避免读取负载过大,例如8M mysql> set global max_relay_log_size = 8*1024*1024;

检查从服务器没有使用 log_slave_updates = 1

3 、考虑使用  Multi Threaded Slave (MTS)

4 、确认是否过多的表没有使用主键

如果日志采用row或MIXED格式,如果表没有主键,会引起延迟。

这是因为当在主服务器上执行事务时,可以使用任何可用的键或直接的表扫描,

当在从服务器SQL上应用行事件时不使用这些。

从主服务器的二进制日志中的行事件被逐行地应用到从服务器的匹配行映像时,

如果使用主键惟一地标识每一行时,就可以快速地将更改应用到从服务器的适当的行映像。

然而,当没有定义主键时,对于主服务器上的每一个受影响的行,整个行映像都必须逐行进行比较。

5 、在MySQL 5.7中如果持续的统计特性会对MySQL复制产生负面影响就会禁用它并检查是否有任何改进。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31549334/viewspace-2215035/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31549334/viewspace-2215035/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL_错误代码以及出错信息对照: 0101 属于其他进程的专用标志。 0102 标志已经设置,无法关闭。 0103 无法再次设置该标志。 0104 中断时无法请求专用标志。 0105 此标志先前的所有权已终止。 0106 请将软盘插入驱动器 %1。 0107 后续软盘尚未插入,程序停止。 0108 磁盘正在使用或已由其他进程锁定。 0109 管道已经结束。 0110 系统无法打开指定的设备或文件。 0111 文件名太长。 0112 磁盘空间不足。 0113 没有其他可用的内部文件标识符。 0114 目标内部文件标识符不正确。 0117 该应用程序所运行的 IOCTL 调用不正确。 0118 校验写入的开关参数值不正确。 0119 系统不支持所请求的命令。 0120 该系统上不支持此功能。 0121 标记已超时。 0123 文件名、目录名或卷标语法错误。 0124 系统调用层不正确。 0125 磁盘没有卷标。 0126 找不到指定的模块。 0127 找不到指定的过程。 0128 没有要等候的子进程。 0129 模式下运行。 0130 试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄。 0131 试图将文件指针移至文件开头之前。 0132 无法在指定的设备或文件中设置文件指针。 0133 对于包含已连接驱动器的驱动器,不能使用 JOIN 或 SUBST 命令。 0134 试图在已经连接的驱动器上使用 JOIN 或 SUBST 命令。 0135 试图在已经替换的驱动器上使用 JOIN 或 SUBST 命令。 0136 系统试图删除尚未连接的驱动器的 JOIN。 0137 系统试图删除尚未替换的驱动器的替换项。 0138 系统试图将驱动器连接到已连接的驱动器下的目录。 ... ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值