跳转至

主从复制

MySQL 主从复制(Master-Slave Replication)是一种数据复制技术,用于将一个 MySQL 数据库服务器(主服务器)的数据复制到一个或多个 MySQL 数据库服务器(从服务器)。主从复制的主要用途包括:

  1. 数据备份:从服务器可以作为主服务器的备份,防止数据丢失。
  2. 负载均衡:通过将读操作分散到多个从服务器,减轻主服务器的负载。
  3. 高可用性:当主服务器出现故障时,可以快速切换到从服务器,保证服务的连续性。
  4. 数据分析:可以在从服务器上执行数据分析操作,而不影响主服务器的性能。

主从复制的工作原理

  1. 主服务器(Master)
  2. 记录所有更改数据库的操作(如 INSERTUPDATEDELETE)到二进制日志(Binary Log)。
  3. 主服务器上的每个事务都会生成一个唯一的标识符(GTID,Global Transaction Identifier)。

  4. 从服务器(Slave)

  5. 从服务器连接到主服务器,并请求二进制日志的内容。
  6. 从服务器读取主服务器的二进制日志,并将其中的操作重放到自己的数据库中。
  7. 从服务器会记录自己已经处理到的二进制日志位置,以便在断开连接后能够继续从上次的位置开始复制。

配置主从复制的步骤

1. 配置主服务器

  1. 修改主服务器的配置文件(通常是 my.cnfmy.ini):
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    binlog-format=ROW
    
  2. server-id:主服务器的唯一标识符,每个服务器的 ID 必须不同。
  3. log-bin:启用二进制日志。
  4. binlog-format:设置二进制日志的格式,推荐使用 ROW 格式。

  5. 重启 MySQL 服务

    sudo systemctl restart mysql
    

  6. 创建用于复制的用户

    CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    FLUSH PRIVILEGES;
    

  7. 获取主服务器的二进制日志位置

    SHOW MASTER STATUS;
    
    记录下 FilePosition 的值,后续在从服务器配置时会用到。

2. 配置从服务器

  1. 修改从服务器的配置文件
    [mysqld]
    server-id=2
    
  2. server-id:从服务器的唯一标识符,必须与主服务器不同。

  3. 重启 MySQL 服务

    sudo systemctl restart mysql
    

  4. 配置从服务器连接到主服务器

    CHANGE MASTER TO
    MASTER_HOST='master_ip_address',
    MASTER_USER='repl',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=4;
    

  5. MASTER_HOST:主服务器的 IP 地址。
  6. MASTER_USERMASTER_PASSWORD:用于复制的用户名和密码。
  7. MASTER_LOG_FILEMASTER_LOG_POS:主服务器的二进制日志文件和位置。

  8. 启动从服务器复制进程

    START SLAVE;
    

  9. 检查从服务器状态

    SHOW SLAVE STATUS\G;
    
    查看 Slave_IO_RunningSlave_SQL_Running 是否为 Yes,确保复制进程正常运行。

常见问题及解决方法

  1. 复制延迟
  2. 可能原因:从服务器性能不足、网络延迟、主服务器负载过高等。
  3. 解决方法:优化查询、增加从服务器性能、减少主服务器负载等。

  4. 复制错误

  5. 可能原因:主从服务器数据不一致、二进制日志损坏等。
  6. 解决方法:检查错误日志,手动修复数据不一致问题,或重新初始化从服务器。

  7. 主从服务器时间不同步

  8. 可能原因:服务器时间不同步。
  9. 解决方法:使用 NTP 服务同步服务器时间。

总结

MySQL 主从复制是一种强大的数据复制技术,能够提高数据库的可用性、可靠性和性能。通过合理配置和维护,可以确保主从复制的稳定运行,从而为业务提供更好的支持。