赞
踩
一、前言
MySQL GTID(Global Transaction Identifier)主从复制原理是MySQL replication的一个进步,它使得复制配置变得更简单,并提供了更高的数据一致性,GTID是全局唯一的事务ID,由两个部分组成:<server_uuid>:<transaction_id>
,用来标识主库上执行的每个事务。当一个事务在主库上提交时,对应的GTID会发送到从库上,从库使用该GTID来确保只应用一次相应的事务,从而避免重复执行,在所有节点的日志文件中,同一个event的gtid值都是一致的
server_uuid
:服务器的唯一标识符,用于标识事务最初在哪个服务器上生成
transaction_id
:事务的编号,在每个服务器上是连续递增的
工作流程
1.master节点一个事务被执行并提交,提交时,事务被赋予一个唯一的GTID,该事务及其GTID被记录在master节点的binlog中
2.slave节点的io线程获取master节点的binlog,写入到relaylog中,读取值根据gitd_next变量决定slave下一个执行哪个gtid事务
3.slave节点的SQL线程读取relaylog中的事务,通过slave节点的binlog检查事务的GTID是否有记录
4.如果该GTID在从服务器上未被应用过,从服务器就执行该事务并将其记录到binlog
5.如果该GTID已经被应用过,则跳过该事务,避免重复执行
搭建mysql主从使用三台主机,主机信息如下
ip | 端口 | 主机名 | 角色 |
10.1.60.80 | 3306 | rabbitmq04 | salve |
10.1.60.114 | 3306 | rabbitmq01 | slave |
10.1.60.115 | 3306 | rabbitmq02 | master |
二、部署
为每台主机修改主机名并配置hosts
hostnamectl set-hostname rabbitmq04
vi /etc/hosts
- 10.1.60.114 rabbitmq01
- 10.1.60.115 rabbitmq02
- 10.1.60.80 rabbitmq04
关闭防火墙与selinux
systemctl stop firewalld&&systemctl disable firewalld
setenforce 0
每台主机安装mysql服务
参考:yum安装mysql 5.7_yum安装mysql5.7_Apex Predator的博客-CSDN博客
编辑配置文件
vi /etc/my.cnf
- gtid_mode=on #开启gtid
- enforce-gtid-consistency=on #当启用此选项时,MySQL 强制执行 GTID 一致性,确保从服务器不会执行未在主服务器上存在的事务。这有助于防止数据不一致
- log_slave_updates=on #当启用此选项时,从服务器将其接收到的更改记录到自己的二进制日志中,这允许从服务器充当其他从服务器的主服务器。这在构建链式主从复制拓扑时非常有用
- relay_log_purge=0 #当设置为 0 时,从服务器不会自动删除中继日志。这意味着中继日志将一直保留,直到管理员手动删除它们。这可以用于调试和数据恢复的目的
- log-error=/var/log/mysqld.log
- pid-file=/var/run/mysqld/mysqld.pid
- server_id=2 #需要每个都不一样id
- log_bin=mysql-bin
- binlog_format=mixed
- expire_logs_days=7
- max_binlog_size=1g
重启mysql服务
systemctl restart mysqld
查看gtid服务是否生效
mysql -u root -p
show variables like '%gtid%';
每台主机配置相同的用于主从同步的用户
GRANT SELECT, RELOAD, PROCESS, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'orchestrator'@'%' identified by '11111111';
flush privileges;
配置两个slave主机的mysql数据库,此处跟binlog主从配置不一样,不需要知道binlog文件号和pos值
CHANGE MASTER TO MASTER_HOST='rabbitmq02',
MASTER_USER='orchestrator',
MASTER_PASSWORD='11111111',
MASTER_PORT=3306,
master_auto_position=1;
start slave;
show slave status\G
也可以查看master库的状态
show master status;
至此gtid主从数据库配置完成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。