centos

centos mysql复制功能详解

小樊
56
2025-09-13 16:17:20
栏目: 云计算

CentOS下MySQL复制功能基于主从架构,通过二进制日志(Binlog)实现数据同步,支持异步、半同步等多种复制方式,以下是核心要点:

一、核心组件与原理

  1. 二进制日志(Binlog)

    • 主服务器记录所有写操作(增删改)的日志文件,从服务器通过读取该日志实现数据同步。
    • 关键参数:log-bin(启用Binlog)、binlog_format(格式,推荐ROW格式,记录完整行数据)。
  2. 复制线程

    • 主服务器Binlog Dump Thread,负责推送Binlog给从服务器。
    • 从服务器
      • I/O Thread:接收Binlog并写入本地中继日志(Relay Log)。
      • SQL Thread:解析中继日志并执行SQL语句,完成数据同步。

二、复制类型

  1. 异步复制(默认)

    • 主服务器不等待从服务器确认,可能存在短暂数据不一致,性能高。
  2. 半同步复制

    • 主服务器提交事务前,至少等待一个从服务器接收并写入中继日志,平衡性能与数据安全,需安装插件启用。
  3. GTID复制

    • 通过全局事务标识符(GTID)唯一标记事务,简化主从切换和故障恢复,需在配置中启用gtid_mode=ON

三、配置步骤(以单主单从为例)

  1. 主服务器配置

    • 修改/etc/my.cnf
      [mysqld]  
      server-id=1       # 主服务器唯一ID  
      log-bin=mysql-bin # 启用Binlog  
      binlog_format=ROW # 推荐行格式  
      
    • 重启MySQL:systemctl restart mysqld
    • 创建复制用户:
      CREATE USER 'repl'@'%' IDENTIFIED BY '密码';  
      GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';  
      FLUSH PRIVILEGES;  
      
    • 查看Binlog状态:SHOW MASTER STATUS;,记录FilePosition(后续从服务器配置需使用)。
  2. 从服务器配置

    • 修改/etc/my.cnf
      [mysqld]  
      server-id=2       # 从服务器唯一ID(需与主服务器不同)  
      relay-log=mysql-relay-bin # 启用中继日志  
      read_only=1       # 可选:设置为只读(生产环境建议)  
      
    • 重启MySQL:systemctl restart mysqld
    • 配置复制参数:
      CHANGE MASTER TO  
      MASTER_HOST='主服务器IP',  
      MASTER_USER='repl',  
      MASTER_PASSWORD='密码',  
      MASTER_LOG_FILE='mysql-bin.000001',  # 主服务器Binlog文件名  
      MASTER_LOG_POS=4;                  # 主服务器Binlog位置  
      START SLAVE;       # 启动复制  
      
    • 查看复制状态:SHOW SLAVE STATUS\G,确认Slave_IO_RunningSlave_SQL_Running均为Yes

四、关键注意事项

五、验证与维护

参考来源

0
看了该问题的人还看了