最近遇到一个问题,同样的mysql参数配置,然后往master上面成功插入一条 >16M的记录,结果slave复制报错。
测试:
建测试表
CREATE TABLE `Attachments` ( `Content` longblob) ENGINE=InnoDB DEFAULT CHARSET=utf8;
查看max_allowed_packet大小
root@(none) 04:26:57>show global variables like 'max_allowed_packet';+--------------------+----------+| Variable_name | Value |+--------------------+----------+| max_allowed_packet | 16777216 |+--------------------+----------+1 row in set (0.00 sec)
往里面插入>16M数据
xuebb@xuebb-Aspire-5733:/home/vobiledata$ du -sh s 29M sLOAD DATA INFILE '/home/vobiledata/s' INTO TABLE Attachments1;
结果发现在master成功插入,同时slave报错
131118 13:31:23 [ERROR] Error reading packet from server: log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master ( server_errno=1236) 131118 13:31:23 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master', Error_code: 1236
解释:读取master binlog是由于单行记录超过了max_allowed_packet的限制大小。读取失败
原因: 事务具有四大特性:原子性,一致性,隔离性,持久性
max_allowed_packet 针对的是一个事务中的一行记录大小,当一行记录超过了限制的大小,将会报错。master上能插入成功的原因在于事务是不可分割的整体,他有原子性。不管 多大,都会插入,然而 slave会通过dmp命令读取master的binlog,然后写入relay log中,当读取的一行记录大小超过max_allowed_packet的大小,将会报错。
解决方法:
加大max_allowed_packet大小即可;
联系客服