✅ MySQL 主从复制配置(基于 --master-data=2导出方式)

✅ MySQL 主从复制配置(基于 --master-data=2 导出方式)

一、准备条件

  • 主库(Master)和从库(Slave)网络互通
  • 两台服务器的 MySQL 均为 8.0.42
  • 使用 传统复制(非 GTID)
  • 已创建 repl 用户并赋予复制权限:
CREATE USER 'repl'@'%' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

二、在主库上导出数据(推荐)

1. 使用 mysqldump 导出主库数据库(如:bfm

mysqldump \
  -uroot -p'密码' \
  -h127.0.0.1 -P10004 \
  --single-transaction \
  --quick \
  --set-gtid-purged=OFF \
  --master-data=2 \
  bfm > /mnt/sdc/bfm_dump.sql

⚠️ 注意事项:

  • --master-data=2:在导出文件中插入 CHANGE MASTER TO 语句(注释形式),记录 binlog 的位置。

  • 警告提示

    WARNING: --master-data is deprecated and will be removed in a future version. Use --source-data instead.
    

    此警告 不影响使用,只是提示未来将被 --source-data 替代。


三、查看导出文件中的 binlog 起始位置

如果 SQL 文件可能非常大(例如 70~80G),不建议用 vim 打开,可以用以下方式快速查看:

✅ 方法 1:使用 grep 快速查找(推荐)

grep -E "CHANGE MASTER TO|MASTER_LOG_FILE" /mnt/sdc/bfm_dump.sql

输出示例:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=17330827;

✅ 方法 2:使用 less 工具分页查看

less /mnt/sdc/bfm_dump.sql

然后在界面中按 / 输入关键词搜索:

/CHANGE MASTER TO

四、在从库中清空并导入新数据库

1. 停止复制(第一次搭建这步跳过)

STOP SLAVE;

2. 删除旧数据库并重新创建(第一次搭建这步跳过)

DROP DATABASE bfm;
CREATE DATABASE bfm;

3. 导入主库导出的 SQL 文件

mysql \
  -uroot -p'密码' \
  -h127.0.0.1 -P10004 \
  -S /mnt/sdc/mysql/mysql.sock \
  bfm < /mnt/sdc/bfm_dump.sql

五、配置主从同步起点并启动复制

根据前面查到的 binlog 位置,执行如下命令:

CHANGE REPLICATION SOURCE TO
  MASTER_HOST='IP',
  MASTER_PORT=端口,
  MASTER_USER='repl',
  MASTER_PASSWORD='密码',
  MASTER_LOG_FILE='mysql-bin.000011',
  MASTER_LOG_POS=17330827;

START SLAVE;

六、检查复制状态

SHOW SLAVE STATUS\G

关键字段含义:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

✅ 表示主从复制正常运行。


七、备注:关于 --master-data 的弃用说明

  • --master-data=2 是当前常用的方式,用于在导出 SQL 中嵌入 binlog 位置信息。
  • MySQL 8.0.34+ 起,官方提示该参数将被弃用,建议使用:
--source-data=2

使用方式完全一致,功能也相同,只是参数名称更新以保持语义一致。



posted @ 2025-05-20 15:06  wangwenzhe  阅读(247)  评论(0)    收藏  举报