当前位置: 首页 > news >正文

MySQL主从复制实现指南

MySQL主从复制实现指南

一、主从复制原理

主库 从库 数据变更操作 写入二进制日志(binlog) 建立连接请求数据 发送binlog事件 写入中继日志(relay log) 重放SQL语句 更新数据 主库 从库

主从复制工作流程:

  1. 主库将数据变更写入二进制日志
  2. 从库的IO线程连接主库请求日志数据
  3. 主库的Binlog Dump线程发送日志到从库
  4. 从库IO线程将日志写入中继日志
  5. 从库SQL线程读取中继日志并重放SQL

二、环境准备

服务器配置要求

角色IP地址MySQL版本系统要求
主库192.168.1.1008.0+4核8G
从库192.168.1.1018.0+4核8G

网络要求

  1. 主从服务器网络互通
  2. 开放3306端口通信
  3. 服务器时间同步(使用NTP)

三、主库配置步骤

1. 修改MySQL配置文件

# /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

2. 重启MySQL服务

systemctl restart mysqld

3. 创建复制用户

CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
FLUSH PRIVILEGES;

4. 查看主库状态

SHOW MASTER STATUS;

记录输出结果:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      785 | mydb         |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

四、从库配置步骤

1. 修改MySQL配置文件

# /etc/my.cnf
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
read-only = ON
replicate-do-db = mydb  # 需要复制的数据库

2. 重启MySQL服务

systemctl restart mysqld

3. 配置复制链路

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;

4. 启动复制进程

START SLAVE;

5. 检查复制状态

SHOW SLAVE STATUS\G

关键指标检查:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

五、主从复制模式对比

复制模式特点适用场景
异步复制主库提交事务后立即返回,不保证从库接收对性能要求高的场景
半同步复制主库提交事务时至少一个从库确认收到日志数据一致性要求高的场景
全同步复制主库提交事务时所有从库确认执行完毕金融级高一致性场景
GTID复制使用全局事务ID,自动定位复制位置,简化故障转移高可用集群环境

六、半同步复制配置

1. 主库安装插件

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秒超时

2. 从库安装插件

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

3. 重启从库IO线程

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

七、常见问题排查

1. 复制中断处理

-- 查看错误原因
SHOW SLAVE STATUS\G-- 跳过单个错误
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;-- 重新配置复制
STOP SLAVE;
RESET SLAVE;
CHANGE MASTER TO ...; -- 重新配置
START SLAVE;

2. 主从数据一致性校验

# 使用pt-table-checksum工具
pt-table-checksum \
--host=192.168.1.100 \
--user=root --password=YourPassword \
--databases=mydb \
--replicate=test.checksums

3. 延迟问题优化

  • 检查网络延迟:ping 192.168.1.100
  • 增加从库并行复制线程:
    STOP SLAVE;
    SET GLOBAL slave_parallel_workers = 4;
    START SLAVE;
    
  • 优化慢查询

八、主从切换步骤

1. 提升从库为主库

STOP SLAVE;
RESET SLAVE ALL;
SET GLOBAL read_only = OFF;

2. 原主库切换为从库

RESET MASTER;
CHANGE MASTER TO MASTER_HOST='192.168.1.101', ...;
START SLAVE;

九、监控与维护

关键监控指标

35% 25% 25% 15% 主从复制监控指标 复制延迟 IO线程状态 SQL线程状态 网络延迟

常用维护命令

-- 主库操作
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;

十、最佳实践建议

  1. 一致性要求高的场景:使用半同步复制+GTID
  2. 读写分离架构:应用层区分读写操作
  3. 定期校验:每周进行主从数据一致性检查
  4. 监控告警:设置复制延迟和状态告警
  5. 备份策略:主库物理备份,从库逻辑备份
  6. 版本管理:保持主从MySQL版本一致
  7. 故障演练:每季度进行主从切换演练

注意:生产环境建议至少配置两个从库,避免单点故障

通过以上配置和管理,我们可以构建稳定可靠的MySQL主从复制架构,实现数据的实时同步和高可用性。

http://www.xdnf.cn/news/964999.html

相关文章:

  • AWS Lambda Python + AWS Secrets Manager + AWS Aurora Mysql
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月10日第104弹
  • 深度学习聊天机器人 需要考虑
  • Linux简单的操作
  • 基于算法竞赛的c++编程(29)类的概念和简单应用
  • v-bind 与 v-model 的区别与联系详解
  • python第48天打卡
  • 通过 VS Code 连接 GitLab 并上传项目
  • 第十四届蓝桥杯_省赛B组(C).冶炼金属
  • 【单片机期末】汇编试卷
  • 64页|PPT|基于华为IPD与质量管理体系融合的研发质量管理:L1-L6分层架构驱动高效运营、标准化质量管理体系
  • 【解密LSTM、GRU如何解决传统RNN梯度消失问题】
  • 详解CNN
  • node+express+jwt+sequelize+mysql+本地服务器部署前端+云服务器公网部署:入门教程
  • 线程与进程(java)
  • 解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
  • 数据库——MongoDB
  • 定时器任务——若依源码分析
  • Python包(Package)详解:模块的高级组织方式
  • DeviceNet转Modbus RTU,为纺织厂生产线赋能
  • uniapp的请求封装,如何避免重复提交请求
  • mysql-innoDB存储引擎事务的原理
  • ​​​​​​​未来已来:深度解读 BLE 6.0 的革命性特性与实战应用
  • SkyReels-V1:开启多模态视频生成的新纪元
  • SpringDoc集成到Springboot
  • 第1章信息化知识归纳总结补充内容
  • day52 ResNet18 CBAM
  • Canfestival的移植思想
  • EndNote 21完整安装指南:从零开始的详细步骤(附EndNote下载安装包)
  • HTML 文本省略号