从字面意思看了一下是因为slave_pending_jobs_size_max默认值为16777216(16MB),但是slave接收到的slave_pending_jobs_size_max为17085453(17M);
解决方案
从库执行如下SQL
1
2
3
|
mysql>stop slave;
mysql>
set
global
slave_pending_jobs_size_max=20000000;
mysql> start slave;
|
#在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,如果内存富余,或者延迟较大时,可以适当调大;注意这个值要比主库的max_allowed_packet大
故障模拟:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
从库设置
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.00sec)
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.00sec)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
主库操作:
mysql>
update
erp_mkpf
set
usnam=
'测试1864错误'
;
ERROR 1197 (HY000):Multi-statement
transaction
required more than
'max_binlog_cache_size'
bytes ofstorage; increase this mysqld variable
and
try again
mysql>
set
global
max_binlog_cache_size=8388608000000;
Query OK, 0 rowsaffected (0.00 sec)
mysql>
begin
;
Query OK, 0 rowsaffected (0.00 sec)
mysql>
update
erp_mkpf
set
usnam=
'测试1864错误'
;
Query OK, 70466 rowsaffected (0.38 sec)
Rows
matched:70466 Changed: 70466 Warnings: 0
mysql>
commit
;
Query OK, 0 rowsaffected (0.08 sec)
|
1
2
3
4
5
6
|
本文转自 dbapower 51CTO博客,原文链接:http://blog.51cto.com/suifu/1841764,如需转载请自行联系原作者