主从同步设置的重要参数log_slave_updates

说明:最近部署了mysql的集群环境,详细如下M01和M02为主主复制,M01和R01为主从复制;在测试的过程中发现了以下问题:

1、M01和M02的主主复制是没有问题的(从M01写入数据能同步到M02,从M02写入数据能够同步到M01);

2、主从同步的时候,当从M01写入的时候,数据可以写入到R01;

3、当从M02写入的时候,数据就不能写入到R01;

 

问题的原因:log_slave_updates参数的状态为NO

mysql的官网说明如下:

Normally, a slave does not log to its own binary log any updates that are received from a master server. This option tells the slave to log the updates performed by its SQL thread to its own binary log. For this option to have any effect, the slave must also be started with the --log-bin option to enable binary logging. Prior to MySQL 5.5, the server would not start when using the --log-slave-updates option without also starting the server with the --log-bin option, and would fail with an error; in MySQL 5.5, only a warning is generated. (Bug #44663) --log-slave-updates is used when you want to chain replication servers. For example, you might want to set up replication servers using this arrangement:

A -> B -> C

   

Here, A serves as the master for the slave B, and B serves as the master for the slave C. For this to work, B must be both a master and a slave. You must start both A and B with --log-bin to enable binary logging, and B with the --log-slave-updates option so that updates received from A are logged by B to its binary log. 

a) M01同步从M02同步数据过来的时候,log_slave_updates参数用来控制M01是否把所有的操作写入到binary log,默认的情况下mysql是关闭的;

b) R01数据的更新需要通过读取到M01的binary log才能进行更新,这个时候M01是没有写binary log的,所以当数据从M02写入的时候,R01也就没有更新了。。

 

问题的解决方法:

 

log_slave_updates:默认值为OFF;

Dynamic Variable:NO

 

处理方法:修改/etc/my.cnf,增加一行log_slave_updates=1,重启数据库后就可以了;

 

总结:设置完该参数后,数据库的架构就可以设置成M01和M02为主主同步,R01通过M01进行主从同步;

应用的写操作中M02上面进行,读操作中R01上面进行(如果读操作很多的话,可以在M01上面架设多台只读数据库),当M02发生故障后,系统的写操作自动迁移到M01上面。这种架构基本可以保证大部分公司的应用需求;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL主从同步有两种方式:基于语句的复制和基于行的复制。无论使用哪种方式,都需要进行以下几个步骤: 1. 在主服务器上开启二进制日志功能 2. 在主服务器上创建一个用于从服务器连接的用户,并赋予该用户复制权限 3. 在从服务器上配置主服务器的相关信息,并启动从服务器的复制进程 以下是基于语句的复制的具体命令行操作: 1. 在主服务器上开启二进制日志功能 ``` vim /etc/my.cnf ``` 在 [mysqld] 段中添加如下配置: ``` log-bin=mysql-bin binlog-format=statement ``` 保存并退出,重启 MySQL 服务使配置生效。 2. 在主服务器上创建一个用于从服务器连接的用户,并赋予该用户复制权限 ``` CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES; ``` 注意:在 MySQL 8.0 版本及以上,需要将 REPLICATION SLAVE 改为 REPLICATION SLAVE PROXY。 3. 在从服务器上配置主服务器的相关信息,并启动从服务器的复制进程 ``` vim /etc/my.cnf ``` 在 [mysqld] 段中添加如下配置: ``` server-id=2 relay-log=mysql-relay-bin log_slave_updates=1 read_only=1 ``` 其中,server-id 是从服务器的唯一标识符,可以设置为任意整数;relay-log 是从服务器用于存储复制事件的日志文件;log_slave_updates=1 表示从服务器将接收到的变更事件也写入自己的二进制日志文件中;read_only=1 表示从服务器只能读取数据,不能写入数据。 保存并退出,重启 MySQL 服务使配置生效后,执行以下命令启动从服务器的复制进程: ``` CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=100; START SLAVE; ``` 其中,MASTER_HOST 是主服务器的 IP 地址;MASTER_USER 和 MASTER_PASSWORD 是在主服务器上创建的用于从服务器连接的用户和密码;MASTER_LOG_FILE 和 MASTER_LOG_POS 分别是主服务器当前二进制日志文件的名称和位置,可以通过在主服务器上执行 SHOW MASTER STATUS 命令获取。 至此,基于语句的复制的主从同步已经完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值