主从复制工作流程:
角色 | IP地址 | MySQL版本 | 系统要求 |
---|---|---|---|
主库 | 192.168.1.100 | 8.0+ | 4核8G |
从库 | 192.168.1.101 | 8.0+ | 4核8G |
# /etc/my.cnf
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
binlog-do-db = mydb # 需要复制的数据库
expire_logs_days = 7
max_binlog_size = 100M
systemctl restart mysqld
CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
记录输出结果:
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 785 | mydb | | |
+------------------+----------+--------------+------------------+-------------------+
# /etc/my.cnf
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
read-only = ON
replicate-do-db = mydb # 需要复制的数据库
systemctl restart mysqld
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='SecurePass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=785;
START SLAVE;
SHOW SLAVE STATUS\G
关键指标检查:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
复制模式 | 特点 | 适用场景 |
---|---|---|
异步复制 | 主库提交事务后立即返回,不保证从库接收 | 对性能要求高的场景 |
半同步复制 | 主库提交事务时至少一个从库确认收到日志 | 数据一致性要求高的场景 |
全同步复制 | 主库提交事务时所有从库确认执行完毕 | 金融级高一致性场景 |
GTID复制 | 使用全局事务ID,自动定位复制位置,简化故障转移 | 高可用集群环境 |
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 1000; # 1秒超时
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
-- 查看错误原因
SHOW SLAVE STATUS\G
-- 跳过单个错误
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
-- 重新配置复制
STOP SLAVE;
RESET SLAVE;
CHANGE MASTER TO ...; -- 重新配置
START SLAVE;
# 使用pt-table-checksum工具
pt-table-checksum \
--host=192.168.1.100 \
--user=root --password=YourPassword \
--databases=mydb \
--replicate=test.checksums
ping 192.168.1.100
STOP SLAVE;
SET GLOBAL slave_parallel_workers = 4;
START SLAVE;
STOP SLAVE;
RESET SLAVE ALL;
SET GLOBAL read_only = OFF;
RESET MASTER;
CHANGE MASTER TO MASTER_HOST='192.168.1.101', ...;
START SLAVE;
-- 主库操作
SHOW MASTER STATUS;
SHOW BINARY LOGS;
PURGE BINARY LOGS BEFORE '2023-06-01 00:00:00';
-- 从库操作
SHOW SLAVE STATUS;
STOP SLAVE;
START SLAVE;
SHOW RELAYLOG EVENTS;
注意:生产环境建议至少配置两个从库,避免单点故障
通过以上配置和管理,我们可以构建稳定可靠的MySQL主从复制架构,实现数据的实时同步和高可用性。