MySQL基于GTIDs的主从复制

来源:互联网 发布:iphone7和8的区别知乎 编辑:程序博客网 时间:2024/06/17 17:53

MySQL基于GTIDs的主从复制

之前的文档中讲述了基于二进制日志文件位置的复制,这一节讲如何搭建基于GTID(Global Transaction Identifiers)的主从复制。如果要了解GTID的概念,请参考下一篇文章

测试环境:

Mysql 5.7.18 社区版,Ubuntu 16.04,两台机器,db2a作为Master, db2b作为slave

前提条件:

db2a, db2b之前并非主、从关系。也就是说,从零开始搭建。如果之前已经是基于二进制日志文件位置的复制,请参考链接

目标:

复制db2a上的两个数据库sample和test1

具体步骤:

1. Master备份数据库、并恢复到slave:

db2a:
root@db2a:~# mysqldump -u root -pqingsong --databases sample test1 > sample.test1.db
root@db2a:~# scp sample.test1.db db2b:/root
root@db2a:~# ssh db2b mysql -u root -pqingsong < sample.test1.db

2. Master上创建用户,只赋予复制权限

mysql> use mysql
mysql> CREATE USER 'repl'@'db2b' IDENTIFIED BY 'repl';

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'db2b';


3. 配置mysql.cnf文件

两台机器上必须都开启GTID,也就是设置gtid_mode和enforce_gtid_consistency为ON。并且使用不同的server_id。 Master上必须开启二进制日志,Slave上则不必开启二进制日志,我的配置中,Master和Slave都开启了:

db2a上:
[mysqld]
...
log-bin = /var/log/mysql/binerr.log
binlog-format = ROW
user = mysql
server_id = 1
gtid_mode = ON
enforce_gtid_consistency = ON

db2b上:
[mysqld]
...
log-bin = /var/log/mysql/binerr.log
binlog-format = ROW
user = mysql
server_id = 2
gtid_mode = ON
enforce_gtid_consistency = ON

配置完成后重启两台机器上的MySQL server。并确保第4步之前,不要有应用修改数据库内容。

4. 在Slave上配置复制信息,并启动复制

mysql> CHANGE MASTER TO
> MASTER_HOST = 'db2a',
> MASTER_PORT = 3306,
> MASTER_USER = 'repl',
> MASTER_PASSWORD = 'repl',
> MASTER_AUTO_POSITION = 1;

mysql> START SLAVE;

至此,配置成功,db2a上做的操作,都同步到db2b上,两边数据始终一致。 相比Binary Log File Position Based Replication, GTID复制更简单,只要两台机器上都开启GTID,并在slave上指定master的信息就可以开始复制了。