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

MySQL主从复制与读写分离

一、MySQL主从复制(Replication)

1. 核心原理
  • 主库(Master):处理写操作,并将数据变更记录到二进制日志(Binary Log, binlog)。

  • 从库(Slave):通过IO线程从主库拉取binlog,保存为中继日志(Relay Log),再由SQL线程重放日志,实现数据同步。

  • 复制模式

    • 异步复制(默认):主库不等待从库确认,性能高,但存在数据丢失风险。

    • 半同步复制:主库至少等待一个从库接收binlog后才提交事务,平衡性能与安全性。

    • 全同步复制:需所有从库确认,延迟高,较少使用。

2. 配置步骤
  1. 主库配置

    # my.cnf
    server-id=1
    log-bin=mysql-bin
    
    CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    FLUSH PRIVILEGES;
    SHOW MASTER STATUS; -- 记录File和Position
  2. 从库配置

    # my.cnf
    server-id=2
    relay-log=mysql-relay
    
    CHANGE MASTER TOMASTER_HOST='master_ip',MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
    START SLAVE;
    SHOW SLAVE STATUS\G; -- 检查Slave_IO_Running和Slave_SQL_Running
3. 监控与维护
  • 主库状态SHOW MASTER STATUS;

  • 从库状态SHOW SLAVE STATUS\G(关注Seconds_Behind_Master判断延迟)。

  • 故障处理:通过STOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;跳过错误。


二、读写分离(Read/Write Splitting)

1. 实现方式
  • 应用层逻辑:在代码中区分读写操作,连接不同数据源(如Spring配置多数据源)。

  • 中间件代理

    • ProxySQL:灵活的路由规则,支持负载均衡和故障转移。

    • MySQL Router:官方轻量级中间件,自动路由读/写请求。

    • MaxScale:MariaDB开发的数据库代理,支持复杂查询路由。

2. 负载均衡策略
  • 轮询(Round Robin):均匀分配读请求。

  • 权重分配:根据从库配置分配不同权重。

  • 动态路由:基于从库负载或延迟动态调整。

3. 一致性保障
  • 强制读主库:对实时性要求高的读操作直连主库。

  • 半同步复制:减少数据延迟风险。

  • GTID(全局事务标识):确保事务在集群中唯一,简化故障恢复。


三、优势与挑战

优势
  • 性能提升:读操作分散到多个从库,缓解主库压力。

  • 高可用性:主库故障时可快速切换从库(需配合MHA、Orchestrator等工具)。

  • 数据备份:从库作为实时备份,避免数据丢失。

挑战
  • 复制延迟:异步复制可能导致从库数据滞后,需监控Seconds_Behind_Master

  • 主库单点故障:需通过集群方案(如InnoDB Cluster)或VIP转移解决。

  • 复杂查询路由:某些中间件可能无法处理跨库事务或复杂SQL。


四、实际应用建议

  1. 场景适配:读多写少(如电商、内容平台)收益最大,写密集场景需谨慎。

  2. 监控工具:使用Percona Monitoring、Prometheus + Grafana监控复制状态。

  3. 自动化运维:结合Ansible、Kubernetes实现自动化部署与故障恢复。

  4. 混合架构:结合分库分表(如ShardingSphere)应对海量数据。

相关文章:

  • 概率相关问题
  • antd 主题色定制
  • Node.js 循环依赖问题详解:原理、案例与解决方案
  • Modbus TCP转Profinet网关:数字化工厂异构网络融合的核心枢纽
  • “this”这个关键字
  • Node.js
  • ip命令详解
  • 死锁(Deadlock)知识点详解
  • YOLO v3:目标检测领域的质变性飞跃
  • 大语言模型 08 - 从0开始训练GPT 0.25B参数量 - MiniMind 单机多卡 torchrun deepspeed
  • 量化交易 - 网格交易策略实现与原理解析
  • 【Conda】环境应用至JupyterLab
  • Python课程及开源项目推荐
  • 399. 除法求值
  • 遗传算法求解旅行商问题分析
  • 【FMC216】基于 VITA57.1 的 2 路 TLK2711 发送、2 路 TLK2711 接收 FMC 子卡模块
  • [学习]RTKLib详解:tle.c(系列终章)
  • Android 图片自动拉伸不变形,点九
  • windows ffmpeg msvc x64编译
  • pytorch训练可视化工具---TensorBoard
  • 为什么越来越多景区,把C位留给了书店?
  • 日本航空自卫队一架练习机在爱知县坠毁
  • 4月份全国企业销售收入同比增长4.3%
  • 《克莱默夫妇》导演罗伯特·本顿去世,终年92岁
  • 牛市早报|中方调整对美加征关税措施,五部门约谈外卖平台企业
  • 中保协发布《保险机构适老服务规范》,全面规范保险机构面向老年人提供服务的统一标准