高可用-1主2从GTID复制

高可用-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有如下几点作用:

  1. 根据GTID可以知道事务最初是在哪个实例上提交的。
  2. GTID的存在方便了Replication的Failover。
    因为不用像传统模式复制那样去找master_log_file和master_log_pos。
  3. 基于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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值