您的位置:首页 > 数据库 > SQL

Centos7搭建基于GTID的MySQL主从复制架构

2020-07-04 18:06 831 查看

简介

主从复制(也称 AB 复制)是将来自一个MySQL数据库服务器(主服务器)中的数据复制到一个或多个MySQL数据库服务器(从服务器)中
GTID
从MySQL 5.6.5 开始新增了一种基于 GTID 的主从复制方式,GTID(Global Transaction ID)是全局事务ID,通过 GTID可以保证每一个在主库中提交的事务在整个数据库集群中有一个唯一的ID,因此当在主库上提交事务或者被从库应用时,可以通过ID定位和追踪每一个事务,不用再通过手工去可以找偏移量的值,这种方式强化了数据库的主备一致性,故障恢复以及容错能力。

准备Centos7设备

配置ip和hostname,关闭防火墙和selinux
在/etc/hosts中添加主机名和IP地址映射

hostname ip
master 192.168.29.132
bak 192.168.29.138

配置MySQL

添加主从复制账号
MySQL5.7:

mysql>grant replication slave on *.* to 'repl'@'%' identified by 'your_password';
mysql>flush privileges;

MySQL8:

mysql>create user 'repl'@'%' identified by 'your_password';
mysql>grant replication slave on *.* to 'repl'@'%';
mysql>flush privileges;

修改master结点的配置文件/etc/my.cnf

[root@master ~]# vi /etc/my.cnf
[mysqld]
#设置Master主机信息
server-id=1
log-bin=binlog
#基于事务的Replication
#可以实现基于库的多线程复制,减少主从复制的延迟
#主机配置
gtid_mode=ON
#强制执行GTID一致性
enforce_gtid_consistency=1
#设定把master主机信息保存在表中
#默认以文件形式保存
master-info-repository=table
relay-log-info-repository=table

备份master主机的数据并导入到bak主机中

在master结点执行备份命令,并传到bak结点中

[root@master ~]#  mysqldump -u root -p  -A > mydb.sql
[root@master ~]# scp mydb.sql root@bak:/tmp/

在bak结点中创建数据库并进行数据导入

[root@bak ~]# mysql -u root -p < /tmp/mydb.sql

配置bak主机的配置文件

[root@bak ~]# vi /etc/my.cnf
[mysqld]
#基于事务的Replication
#可以实现基于库的多线程复制,减少主从复制的延迟
#主机配置
server-id=2
gtid_mode=ON
#强制执行GTID一致性
enforce_gtid_consistency=1
#设定把master主机信息保存在表中
#默认以文件形式保存
master-info-repository=table
relay-log-info-repository=table

启动bak结点的MySQL服务并进行主从配置

mysql>stop slave;
mysql>change master to
->master_host='192.168.29.132',
->master_user='repl',
->master_password='your_password',
->master_auto_position=1

参数含义:
master_host:主机IP地址
master_user:主从复制远程主机用户
master_password:主从复制远程主机用户的密码
master_auto_position:自动寻找偏移量
mysql>start slave;
mysql>show slave status\G;

查看bak主机中slave状态

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

测试验证

master结点操作数据库

mysql> create database mydb;
mysql> use mydb;
mysql> create table test(id int primary key);
mysql> insert into test values(1);

bak结点查看数据

mysql> select * from mydb.test;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: