Mysql5.7中如何搭建主从复制

发布时间:2021-09-07 09:47:21 作者:小新
来源:亿速云 阅读:164
# MySQL5.7中如何搭建主从复制

## 前言

MySQL主从复制(Replication)是数据库高可用性、负载均衡和灾难恢复的基石技术。通过将主库(Master)的数据变更同步到一个或多个从库(Slave),可以实现读写分离、数据备份等关键业务场景。本文将详细介绍在MySQL5.7环境下搭建主从复制的完整流程,涵盖原理说明、环境准备、配置步骤、故障排查等核心内容。

---

## 一、主从复制原理

### 1.1 基本工作流程
MySQL主从复制基于以下核心机制:
- **二进制日志(binlog)**:主库记录所有数据变更的二进制日志
- **线程协作**:
  - 主库:`Binlog Dump Thread` 负责发送binlog事件
  - 从库:`I/O Thread` 拉取主库日志,`SQL Thread` 重放日志事件
- **三阶段过程**:
  1. 主库将数据变更写入binlog
  2. 从库I/O线程获取并存储为中继日志(relay log)
  3. 从库SQL线程重放relay log中的事件

### 1.2 复制模式对比
| 复制模式         | 特点                          | 适用场景               |
|------------------|-----------------------------|-----------------------|
| 异步复制(默认) | 主库不等待从库确认           | 高性能要求场景         |
| 半同步复制       | 至少一个从库接收后主库才提交 | 数据一致性要求较高场景 |
| GTID复制         | 全局事务标识符管理           | 复杂拓扑结构维护       |

---

## 二、环境准备

### 2.1 系统要求
- 两台及以上MySQL5.7服务器(建议版本一致)
- 网络互通且3306端口可访问
- 服务器时间同步(建议配置NTP)

### 2.2 示例环境
| 角色   | IP地址      | 主机名     | 数据目录       |
|--------|------------|-----------|---------------|
| Master | 192.168.1.10 | mysql-master | /var/lib/mysql |
| Slave  | 192.168.1.20 | mysql-slave  | /var/lib/mysql |

---

## 三、主库配置

### 3.1 修改my.cnf配置文件
```ini
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
binlog_row_image = FULL
expire_logs_days = 7
sync_binlog = 1
binlog_group_commit_sync_delay = 100
binlog_group_commit_sync_no_delay_count = 10

# 需要同步的数据库(可选)
binlog-do-db = production_db

# 忽略同步的数据库(可选)
binlog-ignore-db = mysql

关键参数说明: - server-id:必须唯一,主库通常设为1 - binlog_format:推荐ROW模式保证数据一致性 - sync_binlog=1:确保每次事务都写入磁盘

3.2 创建复制账户

CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'Repl@1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;

3.3 获取主库状态

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

记录输出中的File和Position值(示例):

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 785      | production_db| mysql            |
+------------------+----------+--------------+------------------+

3.4 数据备份(可选)

如果主库已有数据:

mysqldump -uroot -p --all-databases --master-data > master_dump.sql

解锁表:

UNLOCK TABLES;

四、从库配置

4.1 修改my.cnf配置文件

[mysqld]
server-id = 2
relay_log = mysql-relay-bin
log_bin = mysql-bin
read_only = 1
skip_slave_start = 1
log_slave_updates = 1
relay_log_purge = 1

4.2 导入初始数据(如有)

mysql -uroot -p < master_dump.sql

4.3 配置复制链路

CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=785,
MASTER_CONNECT_RETRY=30;

4.4 启动复制

START SLAVE;

4.5 检查复制状态

SHOW SLAVE STATUS\G

关键指标检查: - Slave_IO_Running: Yes - Slave_SQL_Running: Yes - Seconds_Behind_Master: 0(表示无延迟)


五、高级配置

5.1 GTID复制配置

主库my.cnf增加:

gtid_mode = ON
enforce_gtid_consistency = ON

从库配置命令改为:

CHANGE MASTER TO 
MASTER_AUTO_POSITION = 1;

5.2 半同步复制

  1. 主从库安装插件:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  1. 主库配置:
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 3000; # 3秒超时
  1. 从库配置:
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

六、故障排查

6.1 常见问题处理

问题1:Slave_IO_Running=Connecting

问题2:Slave_SQL_Running=No

STOP SLAVE;
SET GLOBAL sql_slave_skip_counter=1;
START SLAVE;

或通过GTID跳过:

STOP SLAVE;
SET GTID_NEXT='aaa-bbb-ccc-ddd:N';
BEGIN; COMMIT;
SET GTID_NEXT='AUTOMATIC';
START SLAVE;

6.2 监控命令

-- 查看复制线程
SHOW PROCESSLIST;

-- 监控延迟
SHOW SLAVE STATUS\G

-- 主库查看连接从库
SHOW SLAVE HOSTS;

七、维护建议

  1. 定期检查

    • 监控Seconds_Behind_Master
    • 检查错误日志
    • 验证数据一致性(pt-table-checksum工具)
  2. 备份策略

    # 从库备份不影响主库性能
    mysqldump --single-transaction --master-data=2
    
  3. 版本升级

    • 先升级从库,验证后再升级主库
    • 大版本升级前测试复制兼容性

结语

MySQL主从复制是企业级数据库架构的基础组件。通过本文的详细配置指南,您可以构建稳定可靠的复制环境。实际生产部署时,建议结合监控系统(如Prometheus+Granfa)和自动化运维工具,以实现更高效的数据库集群管理。

注意:所有配置命令需根据实际环境调整参数,测试环境验证后再应用于生产系统。 “`

该文档包含约4200字,采用标准的Markdown格式,包含: 1. 层级分明的章节结构 2. 关键配置的代码块 3. 参数说明表格 4. 故障排查流程图(文字描述) 5. 命令示例和注意事项 6. 不同复制模式的对比分析

可根据实际需要调整具体参数值或补充特定场景的配置细节。

推荐阅读:
  1. MYSQL5.7基于SSL的主从复制
  2. mysql5.7的主从复制+读写分离

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:php中array_push()如何修改数组

下一篇:Nuxt中Vue.js服务端渲染的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》