MySQL 主从同步

基本概念

MySQL 主从同步(Replication)是指将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)的过程。主从同步是MySQL提供的一种高可用性解决方案,也是实现读写分离的基础。

工作原理

MySQL主从同步基于二进制日志(binlog)实现,主要工作流程如下:

  1. 主服务器记录变更:主服务器将所有数据变更(INSERT、UPDATE、DELETE等)记录到二进制日志中

  2. 从服务器获取日志:从服务器的I/O线程连接到主服务器,请求获取二进制日志

  3. 主服务器发送日志:主服务器的Binlog Dump线程将二进制日志内容发送给从服务器

  4. 从服务器应用变更:从服务器的SQL线程读取中继日志(relay log)并执行其中的SQL语句

同步模式

MySQL支持多种同步模式:

  1. 异步复制(默认):主服务器执行事务后立即返回,不等待从服务器确认

  2. 半同步复制:主服务器等待至少一个从服务器接收并写入中继日志后才返回

  3. 组复制(MySQL Group Replication):基于Paxos协议的多主同步复制

配置步骤

主服务器配置

  1. 修改my.cnf配置文件:

    ini 复制代码
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    binlog-format=ROW
    binlog-do-db=需要同步的数据库名
  2. 创建复制专用用户:

    sql 复制代码
    CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  3. 查看主服务器状态:

    sql 复制代码
    SHOW MASTER STATUS;

从服务器配置

  1. 修改my.cnf配置文件:

    ini 复制代码
    [mysqld]
    server-id=2
    relay-log=mysql-relay-bin
    read-only=1
  2. 配置主从连接:

    sql 复制代码
    CHANGE MASTER TO
    MASTER_HOST='master_ip',
    MASTER_USER='repl',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=position_number;
  3. 启动复制:

    sql 复制代码
    START SLAVE;
  4. 检查复制状态:

    sql 复制代码
    SHOW SLAVE STATUS\G

常见问题与解决方案

  1. 数据不一致 :定期使用pt-table-checksum工具检查数据一致性

  2. 复制延迟:

    • 优化主服务器查询性能

    • 增加从服务器硬件资源

    • 考虑使用并行复制

  3. 网络中断:

    • 配置自动重连参数slave_net_timeout

    • 使用GTID(全局事务标识符)简化故障恢复

应用场景

  1. 读写分离:主库写,从库读,分担主库压力

  2. 数据备份:从服务器可作为实时备份

  3. 高可用性:主库故障时可快速切换到从库

  4. 数据分析:在从库执行报表查询等耗时操作不影响主库性能

性能优化建议

  1. 使用ROW格式的二进制日志

  2. 在从服务器上禁用不必要的存储引擎

  3. 适当调整sync_binlog和innodb_flush_log_at_trx_commit参数

  4. 考虑使用多线程复制(MySQL 5.6+)

  5. 定期监控复制延迟和状态

注意事项

  1. 主从服务器的MySQL版本应兼容

  2. 表结构变更可能导致复制中断

  3. 某些SQL函数(如UUID(), RAND())可能导致主从不一致

  4. 大事务可能导致复制延迟增加

相关推荐
ShineWinsu4 分钟前
对于Redis:AOF持久化的解析
linux·数据库·redis·缓存·面试·持久化·aof
晚风叙码9 分钟前
MySQL 数据类型详解:从数值到字符串,一篇讲透
android·mysql·adb
仍然.13 分钟前
Redis---集群
数据库·redis·缓存
Allstar_4315 分钟前
DV/PV 验证管理:为量产放行提供完整证据链——全星研发项目管理 APQP 软件系统汽车电子行业专业级研发项目管理平台
数据库·汽车
传奇开心果编程33 分钟前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
小范的技术工坊37 分钟前
向量数据库解决了什么问题?
数据库
小蒜学长40 分钟前
在线保险服务与管理平台的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·服务平台·在线保险
做运维的阿瑞1 小时前
SQL 面试高频:用户、商品、订单三表查询全解析
数据库·sql·mysql
CJi0NG2 小时前
【自用】MySQL - 语法:DDL、DML、DQL、DCL
数据库·mysql
姜鱼问生3 小时前
数据库备份 + 灾难恢复演练:从 dump 恢复全库
运维·数据库