解决mysql 1864 主从错误

2016-08-25 08:29:26 7479

wKiom1e87-aQ0QXXAAAPkNxB-7Q330.png

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

解决方

从库执行如下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
  
从库查看状态:
mysql> show slavestatusG
  
               Last_SQL_Errno: 1864
               Last_SQL_Error: Cannot scheduleevent Update_rows, relay-log name ./HE1-relay-bin.000005, position 494 toWorker thread because its size 8200 exceeds 1024 ofslave_pending_jobs_size_max.


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: