MySQL replication M-M
1、理论部分
1.1、Master to Master
1)左右两台主机互为Master
2)不会同时做写操作,只一台做写操作
1.2、M-M模式的工作模型的介绍
1)当左边的Master突然当机,有健康检测的前端将自动切换到右边的Master,不会造成前端的服务中断,请求可以继续,但由于出问题之前数据时可以同步的,所以数据是保持一致性的,我们可以继续将数据往下写。
2)当左边的Master都恢复正常,而新的数据都被提交到右边Master,数据都会同步到左边的Master上。
3)而当前左边的Master变成写操作的机器。
不能同时写入两台机器的原因:
当数据库设计到实务性操作的时候,增加写入点会破坏事务的唯一性和原则性的操作
2、实验部分
配置MySQL的replication的M-M模式
2.1、step1
基础环境配置
主机信息:
1)MySQL-RM
hostname=MySQL-RM
ipaddress=10.168.0.107
2)MySQL-LM
hostname=MySQL-LM
ipaddress=10.168.0.108
安装官方的yum源:yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
并安装以下rpm包:yum install -y mysql mysql-server mysql-devel
启动服务并设置服务自动启动:chkconfig mysqld on
/etc/init.d/mysqld start
开启服务的防火墙:
vim编辑/etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
重启iptables服务:/etc/init.d/iptables restart
2.2、setp2
In Right Master
vim 编辑/etc/my.cnf[mysqld]
server-id = 1
log-bin = on
以下参数是可选项:gtid-mode=on
enforce-gtid-consistency
log-slave-updates
log-bin
binlog-format=row
创建MySQL新用户权限grant super,reload,replication slave on *.* to repl@10.168.0.108 identified by 'repl';
flush privileges;
重启MySQL服务quit
/etc/init.d/mysqld restart
cd /var/lib/mysql/
ls
可以发现新增以下两个二进制日志文件:
mysqld-bin.000001
mysqld-bin.index
查看master角色的状态:mysql -uroot -p
show master status;
In Left Master
vim 编辑/etc/my.cnf[mysqld]
server-id = 2
log-bin = on
以下参数是可选项:gtid-mode=on
enforce-gtid-consistency
log-slave-updates
log-bin
binlog-format=row
重启MySQL服务/etc/init.d/mysqld restart
cd /var/lib/mysql/
ls
可以发现新增以下两个二进制日志文件:
mysqld-bin.000001
mysqld-bin.index
show master status;
连接到Right Master:change master to
master_host='10.168.0.107',
master_user='repl',
master_password='repl';
start slave;
show slave status\G
2.3、step3
In Left Mastermysql -uroot -p
grant super,reload,replication slave on *.* to repl@10.168.0.107 identified by 'repl';
flush privileges;
In Right Master
链接到Left Masterchange master to
master_host='10.168.0.108',
master_user='repl',
master_password='repl';
start slave;
show slave status\G
2.4、step4
测试
In Right Mastercreate database cmdschool;
show databases;
In Left Mastershow databases;
show databases;
In Left Masterdrop database cmdschool;
show databases;
In Right Mastershow databases;