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_binloginnodb_flush_log_at_trx_commit参数

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

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

注意事项

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

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

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

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

相关推荐
weixin_458580128 小时前
php怎么处理跨域请求_php如何设置header解决跨域问题详解
jvm·数据库·python
m0_734949798 小时前
CSS 背景图片无法加载的常见原因与正确写法详解
jvm·数据库·python
2301_815279528 小时前
mysql如何使用yum安装mysql_配置官方yum源与自动安装
jvm·数据库·python
档案宝档案管理8 小时前
智慧档案管理系统是什么?档案宝功能深度解析
大数据·数据库·人工智能·档案管理
weixin_458580128 小时前
MySQL跨版本迁移数据格式不兼容_使用mysqldump全量导出导入
jvm·数据库·python
绩隐金8 小时前
SQL Server 性能优化实战(第七期):内存架构——缓冲池、计划缓存与内存配置
数据库
Greyson18 小时前
SQL触发器在导入大文件时如何跳过_使用禁用触发器语句导入
jvm·数据库·python
2401_887724508 小时前
Redis怎样统计独立访客UV_基于Set的SADD指令天然去重特性
jvm·数据库·python
MeAT ITEM8 小时前
maven导入spring框架
数据库·spring·maven
RATi GORI8 小时前
SQL中的DISTINCT、SQL DISTINCT详解、DISTINCT的用法、DISTINCT注意事项
java·数据库·sql