MySQL 参数“max_binlog_cache_size”过小导致SQL失败

今天,开发同事在发布一个SQL的时候失败后,找到我说报告了如下错误:

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再次执行没有出现上述错误。

时间: 2025-01-19 05:21:45

MySQL 参数“max_binlog_cache_size”过小导致SQL失败的相关文章

mysql max_allowed_packet设置过小导致写入失败

mysql max_allowed_packet 设置过小导致记录写入失败 mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES like '%max_allowed_packet%'; 调整: set global max_allowed_packet = 1024*1024*100   ##设置为100M exit 退出mysql客户端,重新登陆生

mysql max_allowed_packet 设置过小导致记录写入失败

mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES like '%max_allowed_packet%'; 显示的结果为: +--------------------+---------+ | Variable_name      | Value   | +--------------------+---------+ | max_allowed_

mysql导入数据失败:mysql max_allowed_packet 设置过小

mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES like '%max_allowed_packet%'; 目前的配置是:1M 修改方法 1.修改配置文件 可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改. max_allowed_packet = 20M 如果找不到my.c

MySQL参数调优最佳实践

前言很多时候,RDS用户经常会问如何调优RDS MySQL的参数,为了回答这个问题,写一篇blog来进行解释: 哪一些参数不能修改,那一些参数可以修改:这些提供修改的参数是不是已经是最佳设置,如何才能利用好这些参数:哪些参数可以改细心的用户在购买RDS的时候都会看到,不同规格能够提供的最大连接数以及内存是不同的,所以这一些产品规格的限制参数:连接数.内存用户是不能够修改的,如果内存或者连接数出现了瓶颈: 内存瓶颈:实例会出现OOM,然后导致主备发生切换连接数瓶颈:应用不能新建立连接到数据库则需要

MySQL参数优化测试建议

一.参数优化前压力测试0.优化测试前提虚拟机vm12.5,OS centos 6.9(系统已优化),cpu2(I5 4288u 2.6GHZ),MEM4GB ,HardDisk:Apple SSD(SM-0512F) 1.模拟数据库数据为了测试我们创建一个test1的库创建一个tb1的表,然后导入20万行数据,脚本如下:vim slap.sh #!/bin/bash HOSTNAME="localhost" PORT="3306" USERNAME="ro

测试环境mysql参数max_allowed_packet自动更改的问题排查过程

新到了一家公司,这几天,开发三天两头反应执行mysql语句报1024的错误,经排查,是max_allowed_packet值过小导致的.于是乎调大该参数 命令行执行: 解决办法1. mysql> set global max_allowed_packet = 2*1024*1024*10 但是过了一天,又反映报错.于是查看该参数 mysql> show variables like 'max_allowed_packet'; +--------------------+----------+

mysql备份指定条件的sql脚本

mysqldump -uroot -proot DBName tabaleName -w" 条件='????'  "  --lock-all-tables > 目标路径 转自:http://blog.chinaunix.net/uid-27038861-id-3591736.html mysqldump备份还原和mysqldump导入导出语句大全详解 mysqldump备份: mysqldump -u用户名 -p密码 -h主机 数据库 a -w "sql条件"

批量 kill mysql 中运行时间长的sql

转自:思齐-批量 kill mysql 中运行时间长的sql 以下内容来自mysql手册: 13.5.5.3. KILL语法KILL [CONNECTION | QUERY] thread_id每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运行,并使用KILL thread_id语句终止一个线程. KILL允许自选的CONNECTION或QUERY修改符: · KILL CONNECTION与不含修改符的KILL一样:它会终止与给

如何在mysql查找效率慢的SQL语句

如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL .下面介绍MySQL中如何查询慢的SQL语句 一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log 这