一、环境准备(主从库均需配置)
主库配置:
# my.cnf 核心配置项
[mysqld] # 不是[mysql]
server-id = 100 # 全局唯一,建议用IP末段(如200)
log-bin = /var/lib/mysql/mysql-bin.log
binlog_format = ROW # 推荐行级复制模式
gtid_mode = ON # 启用GTID简化故障切换
enforce_gtid_consistency = ON
expire_logs_days = 7 # 日志保留7天
bind-address = 0.0.0.0 # 开启其他任意ip访问(或指定ip)
从库配置:
[mysqld]
server-id = 130 # 与主库不同,集群中唯一
relay-log = relay-bin # 开启中继日志
read_only = ON # 从库只读(可选)
gtid_mode = ON # 若主库启用GTID则需同步开启
enforce_gtid_consistency = ON
二、主库操作流程
# 1. 创建复制专用用户(主库执行)
mysql> CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'SecurePass123!';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
# 2. 全量备份(保留GTID信息)
mysqldump --all-databases \
--triggers --routines --events \
--single-transaction \
-u root -p \
> /backup/full_dump_$(date +%F).sql
三、从库初始化操作
1. 清空旧数据(新mysql实例可跳过)
mysql> RESET MASTER;
mysql> STOP SLAVE;
mysql> RESET SLAVE ALL;
2. 导入全量备份
mysql -u root -p < /path/to/full_dump_2025-04-06.sql
3. 验证GTID状态
mysql> SELECT @@GLOBAL.GTID_EXECUTED;
+------------------------------------------+
| @@GLOBAL.GTID_EXECUTED |
+------------------------------------------+
| 3b09f929-7f22-11ec-a1f7-00125d123456:1-100 |
+------------------------------------------+
四、建立GTID复制链路
-- sql 从库执行(关键配置)
CHANGE MASTER TO
MASTER_HOST = '192.168.100.10',
MASTER_PORT = 3306,
MASTER_USER = 'repl',
MASTER_PASSWORD = 'SecurePass123!',
MASTER_AUTO_POSITION = 1; -- 启用GTID自动定位
START SLAVE;
五、验证复制状态
-- sql查看复制线程状态
SHOW SLAVE STATUS;
关键指标验证
Slave_IO_State: Waiting for source to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Retrieved_Gtid_Set: 3b09f929-7f22-11ec-a1f7-00125d123456:1-100
Executed_Gtid_Set: 3b09f929-7f22-11ec-a1f7-00125d123456:1-150
Seconds_Behind_Master: 0
六、扩展:GTID复制优势
- 故障切换更可靠:无需记录binlog文件名和位置
- 自动容错:自动跳过已应用的事务
- 一致性保障:全局事务ID确保数据一致性
- 级联复制简化:从库可以作为其他从库的主库
注意事项
server_uuid唯一性:检查/var/lib/mysql/auto.cnf确保主从不重复
时间同步:主从服务器需配置NTP同步
版本一致性:主从MySQL大版本需保持一致
网络策略:确保3306和随机端口通信畅通