从字面意思看了一下是因为slave_pending_jobs_size_max默认值为1677721616MB),但是slave接收到的slave_pending_jobs_size_max1708545317M);





解决方案

从库执行如下SQL

mysql> stop slave;

mysql>set global slave_pending_jobs_size_max=20000000;

mysql> start slave;


#在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,如果内存富余,或者延迟较大时,可以适当调大;注意这个值要比主库的max_allowed_packet


 







故障模拟:


从库设置:

mysql> set global slave_parallel_workers=4;

mysql> show variables like 'slave_parallel_workers';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| slave_parallel_workers | 4     |

+------------------------+-------+

1 row in set (0.00 sec)

<pre class="sql" name="code">



mysql> set global slave_pending_jobs_size_max=1024;

mysql> show variables like 'slave_pend%';

+-----------------------------+-------+

| Variable_name               | Value |

+-----------------------------+-------+

| slave_pending_jobs_size_max | 1024  |

+-----------------------------+-------+

1 row in set (0.00 sec)


 

主库操作:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> update erp_mkpf set usnam='测试1864错误';
ERROR 1197 (HY000): Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again


mysql> set global max_binlog_cache_size=8388608000000;
Query OK, 0 rows affected (0.00 sec)


mysql> begin;
Query OK, 0 rows affected (0.00 sec)


mysql> update erp_mkpf set usnam='测试1864错误';
Query OK, 70466 rows affected (0.38 sec)
Rows matched: 70466  Changed: 70466  Warnings: 0


mysql> commit;
Query OK, 0 rows affected (0.08 sec)




 


 

从库查看状态:

mysql> show slave status\G

               Last_SQL_Errno: 1864
               Last_SQL_Error: Cannot schedule event Update_rows, relay-log name ./HE1-relay-bin.000005, position 494 to Worker thread because its size 8200 exceeds 1024 of slave_pending_jobs_size_max.


posted on 2016-08-23 15:45  岁伏  阅读(713)  评论(0编辑  收藏  举报