您好,登录后才能下订单哦!
# MySQL中怎么配置主从复制
## 一、主从复制原理概述
MySQL主从复制(Replication)是将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)的过程。其核心工作原理如下:
1. **二进制日志(Binlog)**:主服务器将所有数据更改事件记录到二进制日志中
2. **日志传输**:从服务器的I/O线程从主服务器请求二进制日志
3. **中继日志(Relay Log)**:从服务器将获取的日志保存到本地的中继日志
4. **日志重放**:从服务器的SQL线程读取中继日志并重放其中的SQL事件
这种异步复制架构使得读写分离、数据备份和负载均衡成为可能。
## 二、环境准备
### 2.1 服务器要求
- 主从服务器MySQL版本建议一致或从服务器版本高于主服务器
- 网络互通,建议内网环境
- 示例环境:
- 主服务器:192.168.1.100
- 从服务器:192.168.1.101
- MySQL版本:8.0.x
### 2.2 配置文件准备
**主服务器my.cnf配置**:
```ini
[mysqld]
server-id = 1 # 必须唯一
log_bin = mysql-bin # 开启二进制日志
binlog_format = ROW # 推荐使用ROW格式
binlog_row_image = FULL # 记录完整的行数据
expire_logs_days = 7 # 日志保留天数
sync_binlog = 1 # 每次事务提交都同步日志
从服务器my.cnf配置:
[mysqld]
server-id = 2 # 必须唯一且不同于主服务器
relay_log = mysql-relay-bin # 中继日志位置
read_only = ON # 从库设为只读
log_slave_updates = ON # 级联复制时需要
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'Repl@1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
记录输出中的File和Position值,例如:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 785 | | |
+------------------+----------+--------------+------------------+
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@1234',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=785;
START SLAVE;
SHOW SLAVE STATUS\G
关键指标检查: - Slave_IO_Running: Yes - Slave_SQL_Running: Yes - Seconds_Behind_Master: 0
主服务器过滤:
# 只复制特定库
binlog-do-db = db1
binlog-do-db = db2
# 忽略特定库
binlog-ignore-db = mysql
从服务器过滤:
# 只复制特定库
replicate-do-db = db1
# 忽略特定表
replicate-ignore-table = db1.temp_%
gtid_mode = ON
enforce_gtid_consistency = ON
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@1234',
MASTER_AUTO_POSITION = 1;
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
错误现象:
Slave_IO_Running: Connecting
Last_IO_Error: error connecting to master...
解决方案: 1. 检查网络连通性 2. 验证复制账户权限 3. 检查主服务器防火墙设置
错误现象:
Slave_SQL_Running: No
Last_SQL_Error: Could not execute... Duplicate entry...
解决方案:
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
或使用pt-table-checksum工具检测差异
监控命令:
SHOW SLAVE STATUS\G
关注Seconds_Behind_Master值
优化方案: 1. 升级从服务器硬件 2. 调整参数:
slave_parallel_workers = 4 # 并行复制线程数
slave_parallel_type = LOGICAL_CLOCK
推荐监控指标: - 复制延迟时间 - 复制线程状态 - 网络延迟
计划内切换步骤: 1. 停止主库写入 2. 确保从库完全同步 3. 提升从库为主库 4. 配置其他从库连接新主库
使用pt-table-checksum工具:
pt-table-checksum --replicate=test.checksums h=master
pt-table-sync --replicate=test.checksums h=master h=slave --print
CHANGE MASTER TO MASTER_SSL=1,
MASTER_SSL_CA='/path/to/ca.pem',
MASTER_SSL_CERT='/path/to/client-cert.pem',
MASTER_SSL_KEY='/path/to/client-key.pem';
主服务器:
从服务器:
网络优化:
MySQL主从复制是构建高可用数据库架构的基础,正确配置和维护复制环境可以:
建议在生产环境部署后定期测试故障转移流程,并持续监控复制状态,确保数据服务的连续性和可靠性。 “`
注:本文实际约2000字,包含配置示例、常见问题解决方案和优化建议等实用内容。可根据需要扩展特定章节的细节说明或添加更多实际案例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。