(十四)基于GTID的主从复制

本文详细介绍如何在MySQL 5.7环境下配置GTID主从复制、主主复制及多主一从复制的过程,包括环境搭建、账号授权、数据备份与恢复等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)GTID主从复制

1)环境介绍

1195071-20180427002716541-585698770.png

/etc/redhat-release 
CentOS Linux release 7.3.1611 (Core)

MySQL版本:5.7

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.22-log |
+------------+

2) master端配置

  • 准备数据
mysql>  create database testdb;
mysql>  create table testdb.t1(id int,name varchar(50));
mysql>  insert into testdb.t1 values(1,'jack'),(2,'alex');
  • 开启二进制日志和配置server-id
#vim /etc/my.cnf
log-bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
  • 重启服务器
#systemctl restart mysqld
  • 创建授权账号
mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.111.%' identified by 'Reprep@123';
mysql> flush privileges;
  • 备份数据库
mysqldump -uroot -pRedhat@123 -A -R --triggers --routines --events  --single-transaction --master-data=1 --flush-logs >$(date +%F)-mysql-all.sql
  • 把备份的数据库文件拷贝到从库主机上
scp -r 2018-04-26-mysql-all.sql root@192.168.111.152:/root
  • 在完整备份后在创建一些数据
mysql> insert into testdb.t1 values(3,'www');
mysql> insert into testdb.t1 values(4,'yyyy');

3)slave端配置

  • 验证主库创建的账号是否能够正常登陆,也验证是否有防火墙问题
# mysql -h192.168.111.151 -urep -p'Reprep@123'
  • 配置从库的server-id和设置从库只读
    注意应用程序连接从库的权限不要给所有权限,只让从库只读
#vim /etc/my.cnf
log-bin
server-id=2
read-only 
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE     \\把mysql连接主库的信息保存在表中
relay-log-info-repository=TABLE
log_slave_updates = ON
  • 重启数据库
#systemctl restart mysqld
  • 把备份导入到从库上
mysql -uroot -pRedhat@123 </root/2018-04-26-mysql-all.sql  
  • 连接主库
mysql> change master to 
    -> master_host='192.168.111.151',               \\生成环境建议使用主机名,不建议使用ip地址
    -> master_user='rep',
    -> master_password='Reprep@123',
    -> master_auto_position=1;
change master to master_host='192.168.111.151',master_user='rep',master_password='Reprep@123',master_auto_position=1;
  • 开启复制和验证状态
mysql> start slave;
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主库上创建数据库:
1195071-20180428105151018-1410337516.png
从库上验证:
1195071-20180428105221727-519759086.png

(2)GTID主主复制

1195071-20180427011550349-648947542.png

  • 在master1作为从库上指向master2,注意:master2作为从库之前已经change过master1
    这里的host是master2,不要弄错了;同时生产环境建议不要使用ip
mysql> change master to master_host='192.168.111.152',master_user='rep',master_password='Reprep@123',master_auto_position=1;
mysql> start slave;
mysql>show slave\G
  • master1插入数据
mysql>  insert into testdb.t1 values(10,'aaaa');
  • master2插入数据同时把master2以前是slave的read-only删除
mysql> insert into testdb.t1 values(11,'bbbb');
  • 验证:发现两边master的数据都能正常同步,very good
mysql> select * from testdb.t1;
+------+------+
| id   | name |
+------+------+
|   10 | aaaa |
|   11 | bbbb |

(3)GTID多主一从

1195071-20180427224721699-1305056453.png

MySQL5.7中使用的是多源复制

  • 在master1上备份全库,同时把备份文件传给slave1
#mysqldump -uroot -pRedhat@123 -A -R  --triggers --routines --events --single-transaction --master-data=1 --flush-logs > `date +%F`-mysql-all.sql
#scp -r 2018-04-26-mysql-all.sql 192.168.111.153:/root
  • slave配置
#vim /etc/my.cnf
server-id=3
read-only 
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE     
relay-log-info-repository=TABLE
log_slave_updates = ON
  • 重启数据库
systemctl restart mysqld
  • 导入备份
mysql> reset master;
#mysql -uroot -pRedhat@123 </root/2018-04-26-mysql-all.sql
  • 连接主库
master> change master to master_host='192.168.111.151',master_user='rep',master_password='Reprep@123',master_auto_position=1 for channel 'rep-master1';
master> change master to master_host='192.168.111.152',master_user='rep',master_password='Reprep@123',master_auto_position=1 for channel 'rep-master2';

`mysql> start slave;

转载于:https://www.cnblogs.com/lovelinux199075/p/8956060.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值