mysql主从复制(二):主主复制,多主多从模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wx5040257/article/details/79782808

一  简介

     在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器(这篇博客暂时不涉及)。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有主从复制和主主复制。显然,主主复制、多主多从结构更难增强系统的稳定性及安全性。主从复制请参考我前面的博文。

二  实验环境

     mysql5.6.16+centos6.5  32位

三  拓扑图

     

如图所示,master11和master10做为主节点,它们又互为主从

它们底下又可以接多个从节点,这里就以接一个从节点为例,并假定最开始数据库schooldb在master11上,其它节点均无数据


四  操作步骤

在master11  机器上

#  vi  /usr/my.cnf 

# log_bin
log-bin=master11_log
binlog-do-db=schooldb
log-slave-updates=1
#作为从服务器时的中继日志
relay_log=school-relay-bin
#事务特性,最好设为1
sync_binlog=1

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
server_id = 11
# socket = .....

重要参数解释:

在双主模式中,log-slave-updates 配置项一定要配置,否则在master10上进行了更新数据,在master11和slave13上会更新,但是在slave12上不会更新

sync_binlog表示每几次事务提交,MySQL把binlog缓存刷进日志文件中,默认是0,最安全的是设置为1;

重启 mysql

#service mysql  restart

登录mysql 

#mysql  -uroot  -p


创建一个用于slave和master通信的用户账号

mysql>  GRANT replication slave ON *.* TO 'wx123'@'%' IDENTIFIED BY '123456'; 


刷新权限以避免出现拒绝访问的情况

mysql>  flush privileges;


在master10机器上操作

#  vi  /usr/my.cnf 

# log_bin
log-bin=master10_log
binlog-do-db=schooldb
log-slave-updates=1
#作为从服务器时的中继日志
relay_log=school-relay-bin
#事务特性,最好设为1
sync_binlog=1

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
server_id = 10
# socket = .....

重启 mysql

#service mysql  restart

登录mysql 

#mysql  -uroot  -p

创建一个用于slave和master通信的用户账号

mysql>  GRANT replication slave ON *.* TO 'wx123'@'%' IDENTIFIED BY 'test123'; 


刷新权限以避免出现拒绝访问的情况

mysql>  flush privileges;


从节点的配置,这里就以slave12 为例,如下图

重启 mysql

#service mysql  restart


这时候要锁住master11的表,防止写操作

执行命令 

mysql> lock tables;

接下来,导出master11 schooldb数据库中的数据,恢复到master10和slave12数据库中


数据量小的话用上图所示方法最快!当然用其它备份恢复方法都行。

分别在master11 和master10上执行show master status命令,如图,记下File和Position参数


登录master10  执行如下命令,如图


同理,在slave12 上也执行上面的命令

然后,在master 11上执行命令,如下图:


这样子,master11和master10就互为主从,即为主主模式!

然后在mstar11上解锁表

mysql>  unlock tables;


五 验证

在master10上把用户表的名称ggg改为ggg10,结果发现master11和slave12上的数据都自动更改过来了




同理,在master11上把名称改为ggg11,master10和slave12也会自动改过来,至此,主主模式配置完成!

六   假定master10宕机,如何重新恢复并接上

在master11上停止slave, 并保证没有新的数据进来,可以采取锁库锁表的方式

mysql>   stop slave;

然后对master10进行修复恢复,恢复完毕后执行命令

mysql>  stop slave;

并将master11上的数据备份恢复到master10以保证数据一致性。

然后参考上面的步骤,用change命令互相设为主从即可

然后对master11解锁



展开阅读全文

没有更多推荐了,返回首页