温馨提示×

Debian MySQL复制原理与实践

小樊
55
2025-09-17 01:59:49
栏目: 云计算

一、复制原理

Debian MySQL复制基于**主从复制(Master-Slave)**机制,核心组件包括:

  1. 二进制日志(Binlog)
    主服务器记录所有数据变更操作(如INSERT/UPDATE/DELETE),以事件形式存储,是复制的数据源。
  2. 中继日志(Relay Log)
    从服务器通过I/O线程接收主服务器的Binlog并写入本地中继日志,SQL线程解析并执行其中的事件,实现数据同步。
  3. 复制线程
    • I/O线程:从服务器主动连接主服务器,拉取Binlog。
    • SQL线程:从服务器执行中继日志中的SQL语句。

二、实践步骤(以单主单从为例)

1. 主服务器配置

  • 启用Binlog:修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,添加:
    [mysqld]
    server-id=1       # 主服务器唯一ID
    log-bin=/var/log/mysql/mysql-bin.log  # Binlog路径
    binlog-do-db=your_db  # 指定复制的数据库(可选)
    
    重启服务:sudo systemctl restart mysql
  • 创建复制用户
    CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
    FLUSH PRIVILEGES;
    
  • 获取Binlog位置
    执行 SHOW MASTER STATUS;,记录 File(如mysql-bin.000001)和 Position(如123)。

2. 从服务器配置

  • 配置中继日志:修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,添加:
    [mysqld]
    server-id=2       # 从服务器唯一ID(需与主服务器不同)
    relay-log=/var/log/mysql/mysql-relay-bin.log
    
    重启服务:sudo systemctl restart mysql
  • 连接主服务器
    执行SQL命令:
    CHANGE MASTER TO
    MASTER_HOST='主服务器IP',
    MASTER_USER='repl_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',  # 替换为之前记录的Binlog文件名
    MASTER_LOG_POS=123;  # 替换为之前记录的位置
    START SLAVE;  # 启动复制线程
    ```。  
    
    

3. 验证复制状态

在从服务器执行:

SHOW SLAVE STATUS\G

检查以下字段:

  • Slave_IO_RunningSlave_SQL_Running 均为 Yes,表示复制正常。
  • 若出现错误,可通过 Last_IO_ErrorLast_SQL_Error 定位问题。

三、关键注意事项

  1. 网络与权限
    • 确保主从服务器网络互通,防火墙开放MySQL端口(默认3306)。
    • 复制用户需仅授予 REPLICATION SLAVE 权限,避免安全隐患。
  2. 数据一致性
    • 复制默认异步,可能存在延迟,可通过优化网络或调整 innodb_flush_log_at_trx_commit 参数减少延迟。
    • 若需强一致性,可考虑使用 半同步复制(需MySQL 5.5+)。
  3. 版本兼容性
    主从服务器MySQL版本需一致或从服务器版本高于主服务器,避免语法或功能不兼容。

四、扩展场景

  • 一主多从:在从服务器配置中重复“配置中继日志”和“连接主服务器”步骤,实现多从库同步。
  • 主主复制:需额外配置双向同步,但需注意避免循环复制问题。

通过以上步骤,可在Debian系统上快速搭建MySQL主从复制,实现数据冗余和高可用性。

0