分享

max_allowed_packet设置过小导致slave报错原因

 Frank__Library 2015-09-16

最近遇到一个问题,同样的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大小即可;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多