mysql中怎么配置主从复制

发布时间:2021-06-21 17:03:27 作者:Leah
来源:亿速云 阅读:166
# 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       # 级联复制时需要

三、详细配置步骤

3.1 主服务器配置

  1. 创建复制专用账户:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'Repl@1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
  1. 查看主服务器状态:
SHOW MASTER STATUS;

记录输出中的File和Position值,例如:

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

3.2 从服务器配置

  1. 配置复制源:
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;
  1. 启动复制:
START SLAVE;
  1. 检查复制状态:
SHOW SLAVE STATUS\G

关键指标检查: - Slave_IO_Running: Yes - Slave_SQL_Running: Yes - Seconds_Behind_Master: 0

四、高级配置选项

4.1 复制过滤

主服务器过滤

# 只复制特定库
binlog-do-db = db1
binlog-do-db = db2

# 忽略特定库
binlog-ignore-db = mysql

从服务器过滤

# 只复制特定库
replicate-do-db = db1

# 忽略特定表
replicate-ignore-table = db1.temp_%

4.2 GTID复制(MySQL 5.6+)

  1. 主从服务器都添加配置:
gtid_mode = ON
enforce_gtid_consistency = ON
  1. 从服务器配置改为:
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@1234',
MASTER_AUTO_POSITION = 1;

4.3 半同步复制

  1. 主服务器安装插件:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
  1. 从服务器安装插件:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

五、常见问题排查

5.1 连接问题

错误现象:

Slave_IO_Running: Connecting
Last_IO_Error: error connecting to master...

解决方案: 1. 检查网络连通性 2. 验证复制账户权限 3. 检查主服务器防火墙设置

5.2 数据不一致

错误现象:

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工具检测差异

5.3 复制延迟

监控命令:

SHOW SLAVE STATUS\G

关注Seconds_Behind_Master值

优化方案: 1. 升级从服务器硬件 2. 调整参数:

slave_parallel_workers = 4    # 并行复制线程数
slave_parallel_type = LOGICAL_CLOCK

六、维护与管理

6.1 日常监控

推荐监控指标: - 复制延迟时间 - 复制线程状态 - 网络延迟

6.2 主从切换

计划内切换步骤: 1. 停止主库写入 2. 确保从库完全同步 3. 提升从库为主库 4. 配置其他从库连接新主库

6.3 数据一致性校验

使用pt-table-checksum工具:

pt-table-checksum --replicate=test.checksums h=master
pt-table-sync --replicate=test.checksums h=master h=slave --print

七、安全注意事项

  1. 复制账户应限制IP并设置强密码
  2. 建议使用SSL加密复制通道:
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';
  1. 定期审计复制账户权限

八、性能优化建议

  1. 主服务器:

    • 使用SSD存储
    • 设置sync_binlog=1保证数据安全
    • 适当增加binlog_cache_size
  2. 从服务器:

    • 启用并行复制
    • 使用多线程SQL应用
    • 考虑关闭从库的二进制日志(非级联环境)
  3. 网络优化:

    • 使用专用网络通道
    • 调整slave_net_timeout参数

九、总结

MySQL主从复制是构建高可用数据库架构的基础,正确配置和维护复制环境可以:

  1. 实现读写分离提升性能
  2. 提供数据冗余保证安全性
  3. 支持无缝升级和维护
  4. 为故障转移提供基础

建议在生产环境部署后定期测试故障转移流程,并持续监控复制状态,确保数据服务的连续性和可靠性。 “`

注:本文实际约2000字,包含配置示例、常见问题解决方案和优化建议等实用内容。可根据需要扩展特定章节的细节说明或添加更多实际案例。

推荐阅读:
  1. 配置mysql5.7主从复制
  2. MySQL GTID 主从复制的原理及配置

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

mysql

上一篇:使用PHP怎么在后台获取小程序Openid

下一篇:dubbo中FailfastClusterInvoker的作用是什么

相关阅读

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

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