首页 > 数据库技术 > 详细

MySQL主从架构之Master-Master互为主备

时间:2015-10-14 19:38:20      阅读:446      评论:0      收藏:0      [点我收藏+]

前言

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

基本原理

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

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

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

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

    

具体操作

1.两台相同版本的mysql服务器。为了简便,我是在win下复制两份mysql在同一台机器上执行。一台端口3307 m1,另一台3308 m2。

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

m1

[mysqld]
port = 3307
server-id = 1
log_bin = E:/np/mysql32_2/log_bin/mysql_log_bin #开启log_bin
binlog_do_db = a #开启log_bin的数据库

m2

[mysqld]
port = 3308
server-id = 2
log_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.000007	796	a		

证明主库已经做好准备。

进入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的问题,,手动把数据改成一致,然后再更改数据,同步立马回复正常。

 

MySQL主从架构之Master-Master互为主备

原文:http://www.cnblogs.com/zenghansen/p/4878131.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!