「MySQL」- 双主复制(基于GTID复制) @20210420
内容简介
所谓「双主复制」,其实就是“互做主从复制”。即每台master主机,既是master角色,又是slave角色。这样,任何一方所做的变更,都会通过主从复制到另一台主机的数据库中,以实现数据的一致性。这就是「双主复制」。
数据库复制有两种方式:基于GTID的复制;基于二进制日志位置的复制。本文讨论的前者「基于GTID的复制」。
系统环境
操作系统: | CentOS Linux release 7.4.1708 (Core) |
软件版本: | MySQL 5.6.45 |
网络信息: | master-01: 10.10.50.115 |
master-02: 10.10.50.116 |
安装MySQL服务
(跳过,详细参考「MySQL 5.6 (CentOS 7)」一文)
配置服务
# On master-01
#!/bin/sh ################################################################################ # (0)创建必要的目录: ################################################################################ mkdir -pv /var/log/mysql/ chown mysql.mysql /var/log/mysql/ ################################################################################ # (1)修改/etc/mysql/my.cnf文件: # !!!发行版不同,配置位置也不相同,请不要照搬!请不要照搬!请不要照搬! ################################################################################ mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup cat <<MYCNF >> /etc/mysql/my.cnf server_id = 1 auto-increment-offset = 1 auto-increment-increment = 2 log_bin = mysql-bin binlog_format = MIXED enforce_gtid_consistency = 1 log_slave_updates = ON gtid_mode = ON MYCNF ################################################################################ # (2)重新启动服务: ################################################################################ systemctl restart mysqld.service
# On master-02
#!/bin/sh ################################################################################ # (0)创建必要的目录: ################################################################################ mkdir -pv /var/log/mysql/ chown mysql.mysql /var/log/mysql/ ################################################################################ # (1)修改/etc/mysql/my.cnf文件: # !!!发行版不同,配置位置也不相同,请不要照搬!请不要照搬!请不要照搬! ################################################################################ mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup cat <<MYCNF >> /etc/mysql/my.cnf server_id = 2 auto-increment-offset = 2 auto-increment-increment = 2 log_bin = mysql-bin binlog_format = MIXED enforce_gtid_consistency = 1 log_slave_updates = ON gtid_mode = ON MYCNF ################################################################################ # (2)重新启动服务: ################################################################################ systemctl restart mysqld.service
创建用于复制的用户
分别在master-01与master-02上创建用于复制的用户。创建用户之后,不要忘记验证用户是否可以正常登录。
# On master-01
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%' IDENTIFIED BY 'BU3CGK6x';
# On master-02
-- SQL GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%' IDENTIFIED BY 'BU3CGK6x';
启用复制
分别在master-01与master-02上启用复制:
# On master-01
-- SQL -- STOP SLAVE; CHANGE MASTER TO master_host='10.10.50.116', master_port=3306, master_user='replication', master_password='BU3CGK6x', master_auto_position=1; START SLAVE;
# On master-02
-- SQL -- STOP SLAVE; CHANGE MASTER TO master_host='10.10.50.115', master_port=3306, master_user='replication', master_password='BU3CGK6x', master_auto_position=1; START SLAVE;
复制验证
这里没有详述验证过程。由于比较简单,所以这里只概述了验证复制是否生效的思路:
在master-01上创建库及表,然后在master-02上查看。 在master-02上创建库及表,然后在master-01上查看。
如果没有问题,就是没有问题。如果没有同步,可以在数据库上执行SHOW SLAVE STATUS \G语句,来查看同步状态和同步错误信息(如果有)。
查看状态
使用SHOW MASTER STATUS \G语句查看自己的状态;使用SHOW SLAVE STATUS \G语句来查看自己作为从库的状态;
相关文章
「MySQL」- 监控复制延迟
「MySQL」- 搭建主从复制(基于位置复制)
「MySQL」- 基于位置复制 => 基于 GTID 复制
「MySQL」- 在从库中,调整配置以启用复制
「MySQL」- 双主复制(基于位置的复制)
「MySQL」- 导出主库数据,并导入从库
参考文献
Setting up MySQL Master-Slave Replication with GTID
Bug #83713 Slave failed to initialize relay log info after OS crash when use MTS and GTID