一、GTID
GTID(Global Transaction Identifier)是MySQL的一种用于标识分布式环境中事务的全局唯一标识符。它在MySQL的主从复制场景中尤为重要,尤其是在使用MariaDB或MySQL 5.6及更高版本的环境中。
GTID由两部分组成:服务器ID(标识执行该事务的服务器)和事务序号(表示在该服务器上执行的事务顺序)。每个事务都有一个唯一的GTID来标识它,无论是在主数据库上提交还是由从属数据库处理。GTID的格式通常是server_id:transaction_number。
所以在配置MySQL主主复制前,需要确保两台主服务器都启动了GTID模式
二、准备工作
1. 准备两台虚拟机,这里我的配置如下:
服务器 | ||
服务器 Ⅰ | 服务器 Ⅱ | |
IP | 192.168.159.120 | 192.168.159.121 |
2. 软件配置如下:
MySQL | 5.7 |
三、服务器Ⅰ配置
1. 修改配置文件:
进入 my.cnf 文件:
vim /etc/my.cnf
添加以下内容:
log-slave-updates = true
auto_increment_offset = 1
auto_increment_increment = 2 # 奇数ID
server-id = 100
log_bin = mysql-bin # 打开二进制功能,master主服务器必须打开此项
gtid_mode = ON
enforce_gtid_consistency = true
配置说明:
server-id
:设置服务器的唯一标识符。log_bin
:启用二进制日志记录。gtid_mode
:启用 GTID 模式。enforce_gtid_consistency
:强制 GTID 一致性。
添加之后保存,然后重启mysql服务:
systemctl restart mysqld
接下来我们需要创建一个有复制权限的用户,这个用户用于两个服务器之间的同步:
set global validate_password_length=4;
set global validate_password_policy=LOW; # 这里我想改一个简单的密码,所以执行以上两行,若要设置复杂密码则忽略此两行
grant replication slave on *.* to 'repluser'@'192.168.159.%' identified by '123456';
flush privileges;
这些 SQL 命令的作用如下:
grant replication slave
:授予用户复制权限。flush privileges
:刷新权限,立即生效。
2. 查看状态:
完成以上步骤后,我们查看一下主服务器的状态:
show master status;
以下是我的服务器Ⅰ的状态:
这里我们需要记住file为mysql-bin.000002,position为1213
打开另一台服务器Ⅱ 192.168.159.121,登录mysql:
CHANGE MASTER TO master_host = '192.168.159.120', # 服务器IP地址
master_port = 3306,
master_user = 'repluser', # 创建的用户名
master_password = '123456', # 密码
master_log_file = 'mysql-bin.000002', # 这里需要看另一台服务器的file
master_log_pos = 1213; # 这里需要看另一台服务器的position
将之前记住的两个数值输入进去,启动服务:
start slave;
四、服务器Ⅱ配置
!!!服务器Ⅱ的配置和服务器Ⅰ的配置基本一致,有些细节需要修改以下!!!
1. 修改配置文件:
进入 /etc/my.cnf 文件:
vim /etc/my.cnf
添加以下内容:
log-slave-updates = true
auto_increment_offset = 2
auto_increment_increment = 2 # 偶数ID
server-id = 101
log_bin = mysql-bin # 打开二进制功能,master主服务器必须打开此项
gtid_mode = ON
enforce_gtid_consistency = true
配置说明在服务器Ⅰ中已经说明,这里不重复了
添加之后保存文件,重启mysql服务:
systemctl restart mysqld
和服务器Ⅰ配置一样,接下来需要创建一个有复制权限的用户,这个用户用于两个服务器之间的同步:
set global validate_password_length=4;
set global validate_password_policy=LOW; # 这里我想改一个简单的密码,所以执行以上两行,若要设置复杂密码则忽略此两行
grant replication slave on *.* to 'repluser'@'192.168.159.%' identified by '123456';
flush privileges;
2. 查看状态:
完成以上步骤后,我们查看一下主服务器的状态:
show master status;
以下是我的服务器Ⅱ的状态:
这里的file为mysql-bin.000001,position为2437
打开另一台服务器Ⅰ 192.168.159.120,登录mysql:
CHANGE MASTER TO master_host = '192.168.159.121', # 服务器IP地址
master_port = 3306,
master_user = 'repluser', # 创建的用户名
master_password = '123456', # 密码
master_log_file = 'mysql-bin.000001', # 这里需要看另一台服务器的file
master_log_pos = 2437; # 这里需要看另一台服务器的position
将之前记住的两个数值输入进去,启动服务:
start slave;
五、测试是否配置成功
1. 登录数据库,输入以下指令查看:
show slave status;
状态如下(这里我使用的工具为Navicat):
这里需要看到 Slave_IO_Running 和 Slave_SQL_Running 为两个 yes
分别在两个数据库中添加数据,查看另一个数据库是否一致,一致即完成
标签:slave,log,Linux,主主,mysql,master,MySQL,服务器,GTID From: https://blog.csdn.net/2302_76618426/article/details/142521781