Mysql双主互备M-M部署

1
2
3
实验环境: Centos6.5 minimal 64位系统
服务器IP:192.168.10.27(master、slave)
192.168.10.29(master、slave)

说明:

1
2
3
4
1.	安装包已经提前下载好,此文档中不再演示下载步骤
2. 根据笔者习惯,所有的源码包都在/a01/apps/apps_src/
3. 所有的服务安装路径都在/a01/apps/xxxxxxx
4. 服务器只安装了MySQL,如果不会安装,请参考之前文章

包版本:

1
MySQL:		mysql-5.7.19.tar.gz或者mysql-boost-5.7.19.tar.gz

温馨提示:

在做主主同步前,提醒下需要特别注意的一个问题:

主主复制和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以涉及到自增长重复问题,例如:

出现的问题(多主自增长ID重复)

1
2
3
4
1)首先在A和B两个库上创建test表结构;
2)停掉A,在B上对数据表test(存在自增长属性的ID字段)执行插入操作,返回插入ID为1;
3)然后停掉B,在A上对数据表test(存在自增长属性的ID字段)执行插入操作,返回的插入ID也是1;
4)然后 同时启动A,B,就会出现主键ID重复

解决方法:

只要保证两台服务器上的数据库里插入的自增长数据不同就可以了

如:A插入奇数ID,B插入偶数ID,当然如果服务器多的话,还可以自定义算法,只要不同就可以了

在下面例子中,在两台主主服务器上加入参数,以实现奇偶插入!

记住:在做主主同步时需要设置自增长的两个相关配置,如下:

1
2
auto_increment_offset       表示自增长字段从那个数开始,取值范围是1 .. 65535。这个就是序号。如果有n台mysql机器,则从第一台开始分为设1,2...n
auto_increment_increment 表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535。如果有n台mysql机器,这个值就设置为n。

在主主同步配置时,需要将两台服务器的:

1
2
3
auto_increment_increment     增长量都配置为2
auto_increment_offset 分别配置为1和2。这是序号,第一台从1开始,第二台就是2,以此类推.....
这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。(针对的是有自增长属性的字段)

Mysql双主互备部署

192.168.10.27数据库部署

一、配置my.cnf
1
2
3
4
5
6
7
8
9
10
vim /etc/mysql/my.cnf

server-id=1
log-bin=mysql-bin-master1
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
sync_binlog=1
auto-increment-increment=2
auto-increment-offset=1
slave-skip-errors=all

(这些参数不再详细说明,可参考M-S部署中的说明,这里没有指定需要同步的库代表同步所有库,除了binlog-ignore-db忽略的库)

二、重启Mysql
1
service mysqld restart
三、数据同步授权
1
2
3
4
mysql -u root -p123456

mysql> grant replication slave on *.* to slave@'192.168.10.29' identified by "123456";
mysql> flush privileges;

查看权限方式:

1
mysql> show grants for slave@'192.168.10.29';

PLvul9.png

最好将库锁住,仅仅允许读,以保证数据一致性;待主主同步环境部署后再解锁;锁住后,就不能往表里写数据,但是重启mysql服务后就会自动解锁!

1
2
mysql> flush tables with read lock;
mysql> show master status;

PLvlex.png

192.168.10.29数据库部署

一、配置my.cnf
1
2
3
4
5
6
7
8
9
10
vim /etc/mysql/my.cnf

server-id=2
log-bin=mysql-bin-master2
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
sync_binlog=1
auto-increment-increment=2
auto-increment-offset=2
slave-skip-errors=all
二、重启Mysql
1
service mysqld restart
三、数据同步授权
1
2
3
4
5
6
mysql -u root -p123456

mysql> grant replication slave on *.* to slave@'192.168.10.27' identified by "123456";
mysql> flush privileges;
mysql> flush tables with read lock;
mysql> show master status;

PLv1w6.png

两台Mysql数据库上分别部署

一、先在192.168.10.27部署
1
2
3
4
5
mysql> unlock tables;
mysql> stop slave;
mysql> change master to master_host='192.168.10.29',master_user='slave',master_password='123456';
mysql> start slave;
mysql> show slave status \G

PLv3TK.png

二、在192.168.10.29部署
1
2
3
4
5
mysql> unlock tables;
mysql> stop slave;
mysql> change master to master_host='192.168.10.27',master_user='slave',master_password='123456';
mysql> start slave;
mysql> show slave status \G

PLvGFO.png

测试双主互备M-M效果

一、master1上创建库,master2查看
1、在192.168.10.27上创建nongkaige库
1
mysql> create database nongkaige;
2、在192.168.10.29上查看
1
mysql> show databases;

PLvUld.png

二、master2上创建库,master1查看
1、在192.168.10.29上创建huanglihua库
1
mysql> create database huanglihua;
2、在192.168.10.17上查看
1
mysql> show databases;

PLzE24.png

三、还有插入数据、表
1、master1插入表和数据
1
2
3
4
mysql> use nongkaige;
mysql> create table pipixia(id int(10),name varchar(20));
mysql> insert into pipixia values(1,"hehe"),(2,"heihei");
mysql> select * from pipixia;

PLznq1.png

2、master2查看
1
2
mysql> use nongkaige;
mysql> show tables;

PLzQIK.png

1
mysql> select * from pipixia;

PLz3GD.png

四、删除数据
1、master2删除heihei数据
1
mysql> delete from nongkaige.pipixia where id=2;
2、master1查看
1
mysql> select * from pipixia;

PLz8Re.png

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%