master master mysql_MySQL主从架构之Master-Master互为主备

前言

通常,为了简化逻辑,master会设置为只读,正常只通过slave进行读写。 若要两边都写,为了避免自增id冲突,一般会设置奇偶错开,即一台的自增ID均为奇数,另一台均为偶数。

基本原理

首先,slave开启log_bin二进制日志,这里面记录了数据的修改日志,这是同步的基础。

然后,master配置slave的连接信息,监听slave的修改日志message。

最后,slave一旦有修改,立即向master发送通知,然后master接收到log_bin日志,进行相关数据操作。实现数据同步。

master-master和master-slave的区别只是互为master和slave。仅此而已。

具体操作

1.两台相同版本的mysql服务器。为了简便,我是在win下复制两份mysql在同一台机器上执行。一台端口3307 m1,另一台3308 m2。(这里是slave同步master的数据,和前言刚好相反)

2.修改m1,m2配置文件my.ini,在linux下当然是my.conf。配置如下

m1

[mysqld]

port= 3307server-id = 1log_bin= E:/np/mysql32_2/log_bin/mysql_log_bin #开启log_bin

binlog_do_db= a #开启log_bin的数据库

m2

[mysqld]

port= 3308server-id = 2log_bin= E:/np/mysql32_2/log_bin/mysql_log_bin #开启log_bin

binlog_do_db= a #开启log_bin的数据库

注:其实如果是master-slave模式,m2配置里面的log_bin和binlog_do_db都不需要。这里我们配置的是master-master。

3.启动两个数据库,首先配置m1为m2的master

进入m1>显示master的状态

show master status

输出结果如下:

mysql_log_bin.000007796a

证明主库已经做好准备。

进入m2>绑定master为m1,其中master_log_file为上述master的File值mysql_log_bin.000007

change master to master_host='localhost',master_user='root',master_password='123456',master_port=3308,master_log_pos=0,master_log_file='mysql_log_bin.000007'

m2>继续执行,查看绑定的结果

show slave status

可以看到Slave_IO_Running | Slave_SQL_Running两个值都是NO,证明还没启动同步

m2>继续执行,启动同步

start slave;

可以看到Slave_IO_Running | Slave_SQL_Running两个值都是YES,启动成功。

至此,我们已经配置好了mysql主从同步。接下来,如法炮制,在m1上绑定m2为master。就完成了互为主备的mysql同步。

关闭或者取消同步

暂时关闭, 暂时不向master同步数据

stop slave

彻底取消向master的同步

stop slave;

change master to master_host=' '; --注意里面是一个空格,而不是什么都木有。

测试

随意更改两个库的表数据,能同步,证明配置成功。

注意问题

1.我发现重启数据库,该配置仍然生效而且不用start slave。同步自动开启了,估计是把配置信息持久化了。

2.未开始同步之前,必须保持两个库的数据完全一致,不然会导致不一致的表的数据无法同步。

3.出现2的问题,,手动把数据改成一致,然后再更改数据,同步立马回复正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值