Variable 'log_slave_updates' is a read only variable 不重启修改mysql变量

本文介绍了解决MySQL复制过程中遇到的log_slave_updates变量无法设置的问题。通过使用gdb工具成功将该变量从OFF状态更改为ON状态,实现了从库正确复制主库的数据更新。


执行复制的时候遇到的问题

mysql> show variables like 'log_slave_updates';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| log_slave_updates | OFF   |
+-------------------+-------+
1 row in set (0.00 sec)

mysql> set global log_slave_updates=1;
ERROR 1238 (HY000): Variable 'log_slave_updates' is a read only variable

mysql> system gdb -p $(pidof mysqld) -ex "set opt_log_slave_updates=1" -batch
mysql> show variables like 'log_slave_updates';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| log_slave_updates | ON |
+-------------------+-------+


http://planet.mysql.com/entry/?id=20450

<think>我们正在讨论MariaDB多主多从复制中`log_slave_updates`参数的作用。根据引用[1]和引用[4]的信息,我们可以分析:1.**`log_slave_updates`参数的作用**:-当设置为`ON`(或1)时,从库会将从中继日志中执行的事件记录到自己的二进制日志中。-这在多级复制(级联复制)中非常重要,因为从库可能需要作为其他从库的主库。 2. **在MariaDB多主多从复制中的必要性**:-在多主复制中,每个节点既是主库又是从库,因此必须开启`log_slave_updates`(如引用[1]中配置所示),这样它才能将接收到的更新传递到其他节点。-如果开启,从库执行的事件会写入二进制日志,其他节点就无法从该节点复制数据。 3. **`log_slave_updates=1`与`log_slave_updates`的区别**:-在MariaDB配置文件中,参数可以有两种写法:-`log_slave_updates`:这等同于`log_slave_updates=ON`,表示开启。-`log_slave_updates=1`:数字1也代表开启(0代表关闭)。-因此,两者在功能上没有区别,只是配置的写法同。4.**与GTID复制的关系**(参考引用[3][4]):-在MySQL5.6的GTID复制中,必须开启`log_slave_updates`,因为从库需要在二进制日志中记录GTID信息,以便其他从库识别。-但MariaDB10和MySQL5.7改进了GTID实现,再强制要求开启`log_slave_updates`(引用[3]提到MySQL5.7开启GTID模式后需要开启`log_slave_updates`参数,MariaDB同理)。 **结论**:-在多主多从复制中,如果节点需要作为其他节点的数据源(即级联复制),必须开启`log_slave_updates`。-配置方式上,`log_slave_updates=1`和`log_slave_updates`(或`log_slave_updates=ON`)效果相同。**配置示例**(参考引用[1]):```ini[mysqld]log-bin=mysql-binlog-slave-updates#或log-slave-updates=1server-id=10```**注意事项**:-开启该参数会增加磁盘I/O(因为从库需要写二进制日志),需确保磁盘性能足够[^4]。-在纯从库(参与级联)且无GTID的场景下,可关闭此参数以节省资源。 §§相关问题§§1. MariaDB多主复制中如何避免数据冲突?2.如何监控MariaDB复制延迟? 3. GTID复制相对于传统复制有哪些优势?</think>### MariaDB 多主多从复制中 `log_slave_updates=1` 与 `log_slave_updates` 的区别详解 在 MariaDB 多主多从复制架构中,`log_slave_updates` 参数是关键配置项。其两种写法 `log_slave_updates=1` 和 `log_slave_updates` **在功能上完全等价**,都表示开启从库的二进制日志记录功能。区别仅在于语法形式: | **配置写法** | **含义** | **适用场景** | |----------------------|--------------------------------------------------------------------------|----------------------------------| | `log_slave_updates=1` | 显式启用参数(数字`1`表示开启) | 所有 MariaDB 版本 | | `log_slave_updates` | 隐式启用参数(省略值默认为`ON`) | MariaDB 5.5+ / MySQL 5.6+ | | `log_slave_updates=0` | 显式禁用参数(数字`0`表示关闭) | 需要关闭功能的场景 | --- ### 核心作用解析 1. **核心功能** 开启后,从库会将自己执行的中继日志(Relay Log)事件**写入本地二进制日志(Binlog)**。这使得该从库可成为其他从库的主库,实现级联复制[^1]。 2. **多主多从复制的必要性** - 在环形或多主架构中(如双主复制),每个节点既是主库又是从库 - 若开启此参数,节点接收的更新**会传递到下级节点**,导致复制链断裂 - 典型配置示例: ```ini [mysqld] server-id = 10 log-bin = mysql-bin log-slave-updates # 或 log-slave-updates=1 ``` 3. **与 GTID 复制的关系** - 在 MySQL 5.6/MariaDB 10.0 的 GTID 复制中,**必须开启**此参数(引用[3][4]) - 否则从库无法在 Binlog 中记录 GTID 信息,导致复制失败 - MySQL 5.7+/MariaDB 10.2+ 优化了 GTID 实现,再强制依赖此参数[^3] --- ### 性能影响与最佳实践 1. **资源消耗** - ✅ 优势:支持复杂拓扑(如环形、星形复制) - ⚠️ 代价:增加磁盘 I/O(需额外写入 Binlog),在写入密集场景可能成为瓶颈(引用[4]) 2. **配置建议** | **场景** | **推荐配置** | |------------------------------|----------------------------| | 单级主从复制 | 关闭(减少 I/O 开销) | | 多级复制(级联) | 必须开启 | | 多主环形复制 | 必须开启 | | GTID 复制(旧版本) | 必须开启 | 3. **验证方法** 检查参数状态: ```sql SHOW VARIABLES LIKE 'log_slave_updates'; -- 返回 Value = ON 表示生效 ``` --- ### 典型问题解决 **场景**:级联复制中断 **原因**:中间从库未开启 `log_slave_updates` **解决步骤**: 1. 修改配置文件: ```ini [mysqld] log-slave-updates=1 # 显式启用 ``` 2. 重启 MariaDB: ```bash systemctl restart mariadb ``` 3. 重新配置复制链路(引用[2]): ```sql CHANGE MASTER TO MASTER_HOST='192.168.11.31', MASTER_USER='repl_user', MASTER_PASSWORD='secure_pass', MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=358; ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值