OpenAnolis8配置MySQL5.7主从复制🍒
OpenAnolis8配置MySQL5.7主从复制🍒
MySQL5.7有多种主从复制方式,本文使用GTID方式做主从复制。
一、GTID主从复制的核心原理
- 
GTID的组成 
 GTID由两部分组成:- 
server_uuid:MySQL实例的唯一标识符,存储在数据目录的auto.cnf文件中。
- 
transaction_id:事务提交时生成的递增序列号,保证同一实例内唯一。
 
- 
- 
工作流程 - 
主库事务提交:主库为每个事务生成GTID并记录到二进制日志(binlog)中。 
- 
从库同步: - 
I/O线程:从库通过I/O线程拉取主库的binlog并写入本地中继日志(relay log)。 
- 
SQL线程:从库读取relay log中的GTID,检查本地 gtid_executed集合。若该GTID未执行,则执行事务并记录到自身binlog;若已存在则跳过。
 
- 
- 
自动定位:通过 MASTER_AUTO_POSITION=1参数,从库自动向主库请求缺失的GTID事务,无需手动指定log_file和log_pos。
 
- 
- 
核心优势 - 
简化故障转移:无需手动查找binlog位置,直接基于GTID自动同步。 
- 
数据一致性:GTID连续无空洞,确保主从数据一致。 
- 
安全性:每个GTID仅执行一次,避免重复执行导致数据混乱。 
 
- 
二、GTID主从复制的部署步骤
1. 环境准备
- 
主库(Master):IP 192.168.66.189,MySQL 5.6及以上版本。
- 
从库(Slave):IP 192.168.66.244,MySQL版本需与主库一致。
- 
确保主从服务器时间同步(如使用Chrony服务,见chrony时间同步)。 
2. 主库配置
部署MySQL见 MySQL5.7部署,这里不再赘述。
修改配置文件/etc/my.cnf,添加GTID配置信息。
[root@localhost ~]# vim /etc/my.cnf
[client]
# 默认连接 MySQL 时使用的字符集
default-character-set = utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysqld]
user=mysql
socket=/var/lib/mysql/mysql.sock
port=3306
pid-file=/var/lib/mysql/mysql.pid
basedir=/usr/local/mysql5.7
datadir=/var/lib/mysql
# GITD配置
server-id = 1
log-bin = mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON
log-slave-updates = ON
binlog_format = ROW
skip_slave_start = 1
lower_case_table_names = 1
explicit_defaults_for_timestamp = 1
#日志配置
log-error = /var/log/mysql/error.log
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 2
expire_logs_days = 7
# 字符集设置及排序规则
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci重启MySQL
[root@localhost ~]# systemctl restart mysql创建复制用户
[root@localhost ~]# mysql -uroot -p
mysql> CREATE USER 'repl'@'192.168.66.244' IDENTIFIED BY 'Noleaf';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.66.244';
mysql> FLUSH PRIVILEGES;3. 从库配置
修改配置文件,添加GTID配置信息。
[root@localhost ~]# vim /etc/my.cnf
[client]
# 默认连接 MySQL 时使用的字符集
default-character-set = utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysqld]
user=mysql
socket=/var/lib/mysql/mysql.sock
port=3306
pid-file=/var/lib/mysql/mysql.pid
basedir=/usr/local/mysql5.7
datadir=/var/lib/mysql
# GITD配置
server-id = 2
log-bin = mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON
log-slave-updates = ON
binlog_format = ROW
skip_slave_start = 1
lower_case_table_names = 1
explicit_defaults_for_timestamp = 1
#日志配置
log-error = /var/log/mysql/error.log
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 2
expire_logs_days = 7
# 字符集设置及排序规则
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci重启MySQL
[root@localhost ~]# systemctl restart mysql4. 数据同步
导出主库数据
[root@localhost ~]# mysqldump -uroot -p --all-databases --single-transaction --set-gtid-purged=ON > master_dump.sql导入从库
[root@localhost ~]# mysql -uroot -p < master_dump.sql 5. 启动主从复制
配置从库连接主库
[root@localhost ~]# mysql -uroot -p
mysql> CHANGE MASTER TO
       MASTER_HOST = '192.168.66.189',
       MASTER_USER = 'repl',
       MASTER_PASSWORD = 'Noleaf',
       MASTER_AUTO_POSITION = 1;启动复制
mysql> start slave;验证复制状态
mysql> SHOW SLAVE STATUS\G;主要观察以下两个线程状态

6. 总结
基于GTID的主从复制通过全局事务标识符实现了高可靠、自动化的数据同步,尤其适合复杂拓扑和高可用场景。
部署时需注意GTID模式的一致性配置及数据备份的完整性,日常运维中可通过GTID集合监控快速定位同步问题。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号