ERROR 1197 (HY000) at line 4: Multi-statement transaction required more than ‘max_binlog_cache_size‘

ERROR 1197 (HY000) at line 4: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again

意思是多语句食物请求更大的max_binlog_cache_size,需要增加此参数值后再次尝试

这个时候接到报警说主从不同步,SQL线程挂掉了

登陆系统后查看主从状态后,果然和同事的这个SQL有关系

询问了一下同事的操作的SQL:

首先复制一张表,方式是:create table  table_B like table_A,然后使用insert into  table_B select * from table_A 

总共是四张表这样的然后只执行成功了一张表,后面就报了如上的错误

注意:使用like方式创建的表好处就是可以获得一张和源表一样的表结构索引和存储引擎等

           缺点就是创建的是一张空表,需要再次将数据插入到新表中

但这样的方式为什会造成一个从库复制中断呢?而另外的从库是正常的

原因是这样的:复制中断的这个从库的角色是备份库,开启了binlog 且binlog格式是ROW,其他从库未开启binlog

mysql> show variables like 'binlog_format';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| binlog_format | ROW   |

+---------------+-------+

row 格式的binlog的特点:在 row 模式下,所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容。所以会造成binlog cache因为过小而中断

知道了错误原因就好解决问题了:

首先增加这个参数的大小:set global max_binlog_cache_size=XXXXXXX  (这样重启系统后会失效)

然后启动复制进程 start slave; 

查看复制状态 show slave status\G

主从复制恢复正常

同事的SQL再次执行没有出现上述错误。
sql = "show global variables like 'max_binlog_cache_size';"

40G
# sql ='set global max_binlog_cache_size=40*1024*1024*1024;'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值