最近遇到一个问题,同样的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 s LOAD 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大小即可; |
|
来自: Frank__Library > 《Mysql》