MySQL 高可用配置:主从复制与读写分离

一、主从复制原理

主从复制通过二进制日志(Binary Log)实现数据同步: $$ \text{主库}(Master) \xrightarrow{\text{binlog}} \text{从库}(Slave) $$

  1. 写入流程

    • 主库接收写操作,记录binlog
    • 从库I/O线程拉取binlog
    • 从库SQL线程重放日志
  2. 故障转移
    当主库故障时,从库可提升为新主库(需满足 $ \Delta t_{\text{复制延迟}} < \text{容忍阈值} $)

二、配置步骤

1. 主库配置 (my.cnf)

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW

2. 创建复制账户

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

3. 从库配置 (my.cnf)

[mysqld]
server-id=2
relay-log=mysql-relay-bin
read-only=1  # 禁止直接写入

4. 启动复制

CHANGE MASTER TO
  MASTER_HOST='master_ip',
  MASTER_USER='repl',
  MASTER_PASSWORD='SecurePass123!',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;
START SLAVE;

三、读写分离实现

1. 应用层方案

# Python伪代码示例
def db_selector(sql):
    if sql.startswith("SELECT"):
        return slave_pool.get_connection()  # 从从库读取
    else:
        return master_conn  # 写入主库

2. 中间件方案

工具 特点
ProxySQL 支持动态路由规则
MaxScale 官方中间件,自动故障转移
ShardingSphere 支持分布式事务
四、高可用保障措施
  1. 监控指标

    • 复制延迟:SHOW SLAVE STATUSSeconds_Behind_Master
    • 健康检查:每 $ T=5s $ 检测主库状态
  2. 故障处理流程

    graph LR
    A[主库故障] --> B[暂停应用写入]
    B --> C[提升从库为新主]
    C --> D[重定向其他从库]
    D --> E[恢复服务]
    

  3. 数据一致性保障

    • 半同步复制:确保至少一个从库收到日志
    • 开启GTID:gtid_mode=ON
五、性能优化建议
  1. 读负载均衡:配置多从库($ N \geq 3 $)
  2. 写优化:主库使用SSD磁盘,设置 innodb_flush_log_at_trx_commit=2
  3. 连接池管理:设置 max_connections=1000

重要提示

  • 定期验证数据一致性:pt-table-checksum
  • 备份策略:主库每日全量+binlog增量备份
  • 测试环境验证故障切换流程(建议每月演练)

此方案可实现 $ RTO < 120s $(故障恢复时间)和 $ RPO \approx 0 $(数据丢失量),满足金融级可用性要求。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐