菜鸟科技网

MySQL数据库复制命令有哪些?

MySQL 数据库复制是构建高可用、可扩展数据库架构的核心技术,通过将主数据库(Master)的数据变更实时或异步同步到从数据库(Slave),实现数据冗余、读写分离和负载均衡,以下是 MySQL 复制相关的核心命令及操作流程,涵盖主从配置、监控和维护等关键环节。

MySQL数据库复制命令有哪些?-图1
(图片来源网络,侵删)

主从复制基础配置命令

主服务器(Master)配置

首先需在主服务器启用二进制日志(binlog),这是复制的核心数据源,编辑 MySQL 配置文件(my.cnfmy.ini),添加以下参数:

[mysqld]
server-id = 1          # 唯一标识,主从服务器不能相同
log-bin = mysql-bin    # 启用二进制日志,指定日志前缀
binlog-format = ROW    # 推荐使用 ROW 模式,记录行级变更,避免主从数据不一致
expire_logs_days = 7   # 二进制日志保留天数,避免日志占满磁盘

配置完成后,重启 MySQL 服务,并执行以下命令创建复制专用用户(需授予 REPLICATION SLAVE 权限):

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

查看主服务器当前二进制日志文件名和位置(后续从服务器需连接至此):

SHOW MASTER STATUS;

返回结果示例: | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | |------------------|----------|--------------|------------------| | mysql-bin.000003 | 107 | | |

MySQL数据库复制命令有哪些?-图2
(图片来源网络,侵删)

从服务器(Slave)配置

从服务器需配置唯一 server-id,并确保禁用二进制日志(若仅需作为从节点):

[mysqld]
server-id = 2          # 与主服务器不同
relay-log = relay-bin  # 中继日志文件,用于存储主服务器同步的 SQL 语句
read-only = 1         # 设置为只读(可选,避免误写操作)

重启 MySQL 后,执行 CHANGE REPLICATION 命令连接主服务器:

CHANGE REPLICATION SOURCE TO
    SOURCE_HOST = '主服务器IP',
    SOURCE_USER = 'repl_user',
    SOURCE_PASSWORD = 'password',
    SOURCE_LOG_FILE = 'mysql-bin.000003',  -- 从 SHOW MASTER STATUS 获取
    SOURCE_LOG_POS = 107;                  -- 从 SHOW MASTER STATUS 获取

启动复制线程:

START REPLICA;

复制状态监控与管理命令

查看复制状态

  • 检查主从连接状态

    MySQL数据库复制命令有哪些?-图3
    (图片来源网络,侵删)
    SHOW REPLICA STATUS\G;

    关键字段说明:

    • Source_Log_File:当前读取的主服务器二进制日志文件
    • Exec_Log_Pos:从服务器中继日志执行位置
    • Replica_IO_Running:I/O 线程状态(需为 Yes)
    • Replica_SQL_Running:SQL 线程状态(需为 Yes)
    • Seconds_Behind_Master:主从延迟(0 表示无延迟)
  • 查看主服务器二进制日志状态

    SHOW MASTER LOGS;

    返回所有二进制日志文件列表,可用于清理旧日志或手动同步。

复制线程管理

  • 暂停复制
    STOP REPLICA;  -- 停止所有线程(I/O 和 SQL)
    STOP REPLICA IO_THREAD;  -- 仅暂停 I/O 线程
    STOP REPLICA SQL_THREAD;  -- 仅暂停 SQL 线程
  • 恢复复制
    START REPLICA;
  • 重置复制(危险操作,会清除复制状态):
    STOP REPLICA;
    RESET REPLICA ALL;  -- 清除 `CHANGE REPLICATION SOURCE TO` 配置
    RESET MASTER;       -- 主服务器:清除所有二进制日志

复制故障处理命令

主从数据不一致修复

若因网络或误操作导致主从数据不一致,可通过以下步骤修复:

  1. 锁定主服务器,禁止写入:
    FLUSH TABLES WITH READ LOCK;
  2. 记录主服务器当前二进制日志位置
    SHOW MASTER STATUS;
  3. 备份数据并传输到从服务器
    # 主服务器导出数据
    mysqldump -u root -p --all-databases --master-data=2 > backup.sql
    # 从服务器导入数据
    mysql -u root -p < backup.sql
  4. 从服务器重新指向主服务器
    STOP REPLICA;
    CHANGE REPLICATION SOURCE TO SOURCE_LOG_POS='新位置';
    START REPLICA;
  5. 主服务器解锁
    UNLOCK TABLES;

跳过错误事件

若从服务器 SQL 线程执行失败(如主从数据冲突),可跳过错误继续同步:

STOP REPLICA;
SET GLOBAL sql_slave_skip_counter = 1;  -- 跳过 1 个错误事件
START REPLICA;

相关问答FAQs

Q1:如何判断 MySQL 主从复制是否延迟?
A:可通过以下方式监控延迟:

  1. 执行 SHOW REPLICA STATUS\G; 查看 Seconds_Behind_Master 字段,值为 0 表示无延迟,数值越大延迟越高。
  2. 在主服务器上插入时间戳标记,然后在从服务器查询该时间戳的执行状态,对比时间差。
  3. 使用 pt-heartbeat(Percona 工具)持续监控延迟,该工具通过专用表记录时间戳,更精准。

Q2:主从复制中,主服务器宕机后如何快速切换为新的主服务器?
A:需执行主从切换操作(以原从服务器 2 为新主为例):

  1. 原主服务器恢复后配置为从服务器
    • 原主服务器停止复制,导出数据并导入新主服务器(确保数据一致)。
    • 执行 CHANGE REPLICATION SOURCE TO 指向新主服务器,启动复制。
  2. 其他从服务器(如从服务器 3)切换到新主服务器
    • 停止复制,执行 CHANGE REPLICATION SOURCE TO 更新新主服务器信息,启动复制。
  3. 验证同步状态:通过 SHOW REPLICA STATUS 确认所有从服务器与新主服务器同步正常。
    注:切换前需确保新主服务器数据最新,可通过 pt-table-checksum 工具校验数据一致性。
分享:
扫描分享到社交APP
上一篇
下一篇