1️⃣ sql_log_bin 的作用

  • 用于控制 当前连接(会话)执行的写操作 是否记录到 二进制日志(binlog)
  • 影响的是 SESSION 级别 的 DML(INSERT/UPDATE/DELETE)记录。

2️⃣ 级别说明

级别

能否配置

说明

SESSION

✅ 可以通过 SET sql_log_bin=0;1 控制

只对当前连接有效

GLOBAL

❌ 官方 MySQL 不允许

尝试 SET GLOBAL sql_log_bin=0; 会报错:

ERROR 1238 (HY000): Variable 'sql_log_bin' is a SESSION variable and can't be used with SET GLOBAL


3️⃣ 权限要求

  • 修改 SESSION 级别的 sql_log_bin 需要 SUPERSESSION_ADMIN 权限;
  • 没有权限会报:
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER, SESSION_ADMIN privilege(s) for this operation

4️⃣ 实际使用场景

  1. 临时禁止 DML 写入 binlog(单个连接)
SET sql_log_bin = 0;
DELETE FROM t1 WHERE id=4;
SET sql_log_bin = 1;
  1. 多连接控制
  • 每个连接需要分别设置 sql_log_bin=0
  • 没有全局开关来对所有连接同时生效。

5️⃣ 结论

  • 不支持全局配置,只能在 当前会话(SESSION) 控制;
  • 全局禁止 binlog 只能通过 binlog_format=OFF(关闭 binlog),但这会影响所有主从复制和恢复,通常不推荐。