MySQL设定MAX_BINLOG_SIZE

1.修改/etc/my.cnf

添加max_binlog_size=512m


2.在线修改

SET @set_value = 1073741824;
SET @@global.max_binlog_size = @set_value;
SELECT @@global.max_binlog_size;

### 如何通过禁用 Binlog 日志解决多语句事务超出 `max_binlog_cache_size` 的问题 当 MySQL 数据库运行在主从复制模式下时,Binlog 是用于记录所有更改数据的 SQL 语句的日志文件。如果在一个事务中执行了大量的更新操作或者单条 SQL 语句影响了大量行数,则可能会导致 Binlog 缓存超过其最大限制 (`max_binlog_cache_size`),从而引发错误。 为了防止这种情况发生,在某些特定场景下可以考虑临时禁用 Binlog 来避免此问题的发生。以下是实现方法及相关注意事项: #### 方法一:设置会话级别的 `sql_log_bin` 可以通过关闭当前会话的二进制日志功能来暂时停止写入 Binlog 文件。这适用于那些不需要同步到其他节点上的事务处理情况。 ```sql SET sql_log_bin = 0; START TRANSACTION; -- 执行多个 DML 操作... INSERT INTO table_name VALUES (...); UPDATE another_table SET column=value WHERE condition; COMMIT; SET sql_log_bin = 1; -- 记得恢复默认行为 ``` > **注意**: 此方式仅对当前连接有效,并不会改变全局配置[^4]。 #### 方法二:修改全局变量 (不推荐) 虽然也可以通过调整全局参数永久性地关闭整个实例上的 Binlog 功能,但这通常不是最佳实践,因为这样做会影响所有的客户端以及可能破坏现有的复制架构。 ```sql STOP SLAVE; -- 如果存在从属服务器的话先暂停它们的工作流程 RESET MASTER; -- 清除现有 Master Info Repository 中的信息并删除所有旧版 Binary Logs SET GLOBAL binlog_format='ROW'; -- 或者选择 STATEMENT/MIXED 根据需求而定 SET GLOBAL log_bin=OFF; ``` 然而,请谨慎行事!一旦做出上述改动之后再重新启用 Replication 将变得复杂得多。 另外需要注意的是,即使启用了 READ COMMITTED 隔离级别或将 innodb_locks_unsafe_for_binlog 设置为 ON ,也不能完全消除死锁的可能性;只是降低了发生的几率而已[^2]。 最后提醒一点,尽管释放不符合条件记录锁定有助于减少争用现象,但对于 UPDATE 和 DELETE 类型的操作而言,InnoDB 存储引擎依然只会保留针对实际受影响行加上的排他 X 锁。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值