高可用-1主2从GTID复制
https://jeames.blog.youkuaiyun.com/article/details/124514052
感谢邦德老师
文章目录
前言
1.GTID复制
1.1原理1.2功能
2搭建1主2从
2.1下载镜像2.2创建映射目录2.3容器部署2.4参数文件配置2.5重启容器
2.6修改MySQL密码3.主从同步
3.主从同步
3.1主库备份3.2从库同步数据
4.同步确认
4.1主从状态查看4.2数据确认
前言
MySQL的各种高可用架构,都脱离不了MySQL实例之间的数据同步,本博客详细的对GTID复制做了说明
1.GTID复制
1.1原理
GTID (Global Transaction lD,全局事务ID)
是全局事务标识符,是一个已提交事务的编号,并且是一个全局唯一的编号。
GTID是从MySQL 5.6版本开始在主从复制方面推出的重量级特性。
GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。
GTID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。
GTID有如下几点作用:
- 根据GTID可以知道事务最初是在哪个实例上提交的。
- GTID的存在方便了Replication的Failover。
因为不用像传统模式复制那样去找master_log_file和master_log_pos。 - 基于GTID搭建主从复制更加简单,确保每个事务只会被执行一次。
1.2功能
1、GTID使用master_auto_position=1代替了基于binlog和position号的主从复制搭建的方式,
更便于主从复制的搭建。
2、GTID可以知道事务在最开始是在哪个实例上提交的。
3、GTID方便实现主从之间的 failover,再也不用不断的去找position和 binlog。GTID不需要传统的binlog和position号了,
而是在从库"change master to"时使用"master_auto_position=1"的方式搭建,这就让操作变得更加方便和可靠了。
2.搭建1主2从
2.1下载镜像
docker pull mysql:8.0.27
2.2创建映射目录
mkdir -p /mysqlgtid/master/conf.d
mkdir -p /mysqlgtid/masterldata
mkdir -p /mysqlgtid/slave1/conf.d
mkdir -p /mysqlgtid/slave1/data
mkdir -p /mysqlgtid/slave2/conf.d
mkdir -p /mysqlgtid/slave2/data
2.3容器部署
主库
docker run -d --name mysql8027M33061
-h master -p 33061:3306 --net=mysql-network --ip 172.72.0.5
-v /mysqlgtid/master/conf.d:/etc/mysql/conf.d -v /mysqlgtid/masterldata:/var/lib/mysql/
-e MYSQL_ROOT_PASSWORD=jem
mysql:8.0.27
从库1
docker run -d --name mysql8027M33062
-h slave1 -p 33062:3306 --net=mysql-network --ip 172.72.0.6
-v /mysqlgtid/slave1/conf.d:/etc/mysql/conf.d -v /mysqIgtid/slave1/data:/varlib/mysql/
-e MYSQL_ROOT_PASSWORD=jem
mysql:8.0.27
从库2
docker run -d --name mysq|8027M33063
-h slave2 -p 33063:3306 --net=mysql-network --ip 172.72.0.7
-V /mysqlgtid/slave2/conf d:/etc/mysql/conf.d -V /mysqlgtid/slave2/data:/var/lib/mysqI/
-e MYSQL_ ROOT_ PASSWORD=jem
mysql:8.0.27
![(https://img-blog.csdnimg.cn/284c75338a144c6eac7dcbc4e2d54a24.png)
2.4参数文件配置
主库参数配置
cat>/mysqlgtid/master/conf.d/my.cnf<<"EOF”
[mysqld]
port=3306
character_set_server=utf8mb4
secure_file_priv=
server-id=802733061
log-bin=
binlog_format=row
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
log-slave-updates=1
skip-name-resolve
gtid-mode=ON
enforce-gtid-consistency=on
report_host=172.72.0.5
EOF
从库1参数配置
从库2参数配置
2.5重启容器
docker restart mysql8027M33061
docker restart mysql8027M33062
docker restart mysql8027M33063
docker ps
2.6修改MySQL密码
mysql> alter user root@‘%’ identified with mysql_native_password by ‘root’; --更改密码
mysql> flush privileges;
MySQL8装好之后,必须修改密码,不然无法远程登陆
3.主从同步
3.1主库备份
一导出时不能加一set-gtid-purged=off参数
mysqldump -uroot -proot -h192.168.1.54 -P33061 --single-transaction
-hex-blob --routines --events --triggers --source-data=2
databases jemdb --default-character-set=utf8
-max_allowed_packet=512M > /tmp/gtidsalve.sql
3.2从库同步数据
从库1同步
mysql -uroot -proot -h192.168.1.54 -P33062</tmp/gtidsalve.sql
以下操作为启动同步
change master to
master_host=‘172.72.0.5’,
master_port=3306,
master_user=‘repl’,
master_password=‘root’,
master_auto_position=1;
从库2同步
mysql -uroot -proot -h192.168.1.54 -P33063< /tmp/gtidsalve.sql
以下操作为启动同步
change master to
master_host=‘172.72.0.5’,master_port=3306,
master_user=‘repl’,
master_password=‘root’,
master_auto_position=1;
start slaye;
mysql> show slave status\G;
4.同步确认
4.1主从状态查看从库状态查看
show slave hosts;
4.2数据确认主库插入数据
-主库:
insert into mytb1 values(1, ‘a’),(2,b’),(3,C’),(4, d’),(5,‘e’),;
SELECT*FROM jemdb.mytb1;