0


MySQL8从零开始搭建1主2从GTID复制,针不戳

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

前言

MySQL的各种高可用架构,都脱离不了MySQL实例之间的数据同步,本博客详细的对GTID复制做了说明

🚀 1.GTID 复制

🌈 1.1 原理

GTID(Global Transaction ID,全局事务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”的方式搭建,
这就让操作变得更加方便和可靠了。

mysql> select @@server_uuid;
在这里插入图片描述

🚀 2.搭建1主2从

在这里插入图片描述

🌈 2.1 下载镜像

docker pull mysql:8.0.27

🌈 2.2 创建映射目录

mkdir -p /mysqlgtid/master/conf.d
mkdir -p /mysqlgtid/master/data
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/master/data:/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 /mysqlgtid/slave1/data:/var/lib/mysql/
-e MYSQL_ROOT_PASSWORD=jem
mysql:8.0.27

🚩 从库2

docker run -d --name mysql8027M33063
-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/mysql/
-e MYSQL_ROOT_PASSWORD=jem
mysql:8.0.27

在这里插入图片描述

🌈 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参数配置

cat>/mysqlgtid/slave1/conf.d/my.cnf<<“EOF”
[mysqld]
port=3306
character_set_server=utf8mb4
secure_file_priv=
server-id=802733062
log-bin=
binlog_format=row
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys
log-slave-updates=1
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
report_host=172.72.0.6
EOF

🚩 从库2参数配置

cat>/mysqlgtid/slave2/conf.d/my.cnf<<“EOF”
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=
server-id=802733063
log-bin=
binlog_format=row
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys
log-slave-updates=1
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
report_host=172.72.0.7
EOF

🌈 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 slave;
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;

🚩从库数据同步
在这里插入图片描述

在这里插入图片描述

标签: mysql 数据库

本文转载自: https://blog.csdn.net/weixin_41645135/article/details/124514052
版权归原作者 IT邦德 所有, 如有侵权,请联系我们删除。

“MySQL8从零开始搭建1主2从GTID复制,针不戳”的评论:

还没有评论