MySQL5.7 基于GTID的多源复制实践
admin
2023-04-16 13:41:37
0

环境说明:

主机

IP

MySQL版本

端口

复制帐号

复制密码

Master1

192.168.1.225

5.7.25

3306

repl

123456

Master2

192.168.1.100

5.7.25

3306

repl

123456

Slave

192.168.1.240

5.7.25

3306



Master1配置文件:

[mysqld]

user = mysql

socket = /tmp/mysql3306.sock

basedir = /usr/local/mysql

datadir = /data/mysql/mysql3306/data

server-id = 2253306

log_bin = /data/mysql/mysql3306/logs/mysql-bin

log_slave_updates = 1

binlog_format = ROW

gtid_mode = on

enforce_gtid_consistency = on


Master2配置文件

[mysqld]

user = mysql

socket = /tmp/mysql3306.sock

basedir = /usr/local/mysql

datadir = /data/mysql/mysql3306/data

server-id = 1003306

log_bin = /data/mysql/mysql3306/logs/mysql-bin

log_slave_updates = 1

binlog_format = ROW

gtid_mode = on

enforce_gtid_consistency = on


Slave配置文件

[mysqld]

user = mysql

socket = /tmp/mysql3306.sock

basedir = /usr/local/mysql

datadir = /data/mysql/mysql3306/data

server-id = 2403306

log_bin = /data/mysql/mysql3306/logs/mysql-bin

log_slave_updates = 1

binlog_format = ROW

gtid_mode = on

enforce_gtid_consistency = on

master_info_repository =TABLE #多源复制只能配置为table

relay_log_info_repository =TABLE #多源复制只能配置为table


在Master1,Maste2上创建复制帐号:

mysql>set sql_log_bin=0;

mysql> grant replication slave on *.* to 'repl'@'192.168.1.240' identified by '123456';

mysql>set sql_log_bin=1;


在Master1上创建测试数据库test1,测试表t1

mysql> create database test1;

mysql> use test1;

mysql> create table t1 (id int);

mysql> insert into t1 values(1);


在Master2上创建测试数据库test2,测试表t2

mysql>create database test2;

mysql> use test2;

mysql> create table t2(id int);

mysql> insert into t2 values(2);


备份导出Master1,Master2上的test1,test2

Master1

#mysqldump -S /tmp/mysql3306.sock --single-transaction --master-data=2 test1 > test1.sql

Master2:

#mysqldump -S /tmp/mysql3306.sock --single-transaction --master-data=2 test2 > test2.sql

备份时报的警告信息可以忽略掉:

Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.


Slave配置

1.先在Slave上创建test1,test2这两个数据库

mysql>create database test1;

mysql>create database test2;


2.导入test1数据

#mysql -S /tmp/mysql3306.sock  test1 < test1.sql

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

解决办法:在Slave上先执行reset master操作,后面等数据都导入之后再手动指定,后面会说。

mysql>reset master;

#mysql -S /tmp/mysql3306.sock test1 < test1.sql; #这个时候导入就不会报错了


3.导入test2的数据

mysql> reset master; #因为导入test1数据GTID_EXECUTED又生成了,要再次清理。

#mysql -S /tmp/mysql3306.sock  test2 < test2.sql;


4.获取sql文件中gtid_purged的值,并在Slave上手动设置

#grep -m 1  "GTID_PURGED" test1.sql

SET @@GLOBAL.GTID_PURGED='31315146-adbb-11e9-b99a-525400c3d235:1-3';

#grep -m 1  "GTID_PURGED" test2.sql

SET @@GLOBAL.GTID_PURGED='e712f244-adba-11e9-abe6-525400ebcfd9:1-3';

mysql> reset master; #因为导入test2数据GTID_EXECUTED又生成了,要再次清理。

mysql> set @@global.GTID_PURGED='31315146-adbb-11e9-b99a-525400c3d235:1-3,e712f244-adba-11e9-abe6-525400ebcfd9:1-3'   #注意把两个库的值都要设置,以逗号分隔。


5.配置主从同步

1.设置Master1,Master2的信息

mysql>change master to master_host='192.168.1.225',master_port=3306,master_user='repl',master_password='123456',master_auto_position=1 for channel 'Master1';

mysql>change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_auto_position=1 for channel 'Master2';


2.配置同步过滤规则

因为Master会把所有的gtid推给Slave,如果只是部分库做同步的话,从库执行了不存在相关库的gtid时就会出错。

mysql> change replication filter replicate_do_db=(test1,test2);


6.启动Slave

mysql> start slave for channel 'Master1'; #对应Master1的同步

mysql> start slave for channel 'Master2'; #对应Master2的同步


7.验证

1.查看主从同步连接是否异常,有报错先解决报错再进行第二步测试。

mysql> show slave status\G;

2.在Master1上的test1库t1表、Master2上的test2库t2表分别写入一条记录,查看是否同步到Slave。


相关内容

热门资讯

我来教教您“新猴王拼三张到底有... 有 亲,根据资深记者爆料新猴王拼三张是可以开挂的,确实有挂(咨询软件无需...
终于懂了“天天微友辅助器?”(... 您好:天天微友这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
今日重大消息“闽游麻将怎么开挂... 您好:闽游麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
【今日要闻】“宁波游戏大厅有没... 家人们!今天小编来为大家解答宁波游戏大厅透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
玩家分享攻略“TT语音到底有挂... 家人们!今天小编来为大家解答TT语音透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里买很...
终于明白“瓦力棋牌真的有挂吗?... 家人们!今天小编来为大家解答瓦力棋牌透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...
玩家最新攻略“九酷众娱炸/金/... 玩家最新攻略“九酷众娱炸/金/花辅助器?”(其实是有挂)您好,九酷众娱炸/金/花这个游戏其实有挂的,...
日媒炒作“台湾有事,美军放弃撤... 【环球时报报道 记者 郭媛丹】日本共同社27日报道称,因考虑台湾突发事态,美军修改了原先拟将驻冲绳海...
玩家分享攻略“青鸾牛牛有挂吗?... 玩家分享攻略“青鸾牛牛有挂吗?”(果然有透视挂)您好,青鸾牛牛这个游戏其实有挂的,确实是有挂的,需要...
终于懂了“微乐云南麻将真的有挂... 您好:微乐云南麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款...