主从数据迁移需先备份主库并记录binlog位置,通过mysqldump导出数据,传输至从库后导入,再配置CHANGE MASTER TO指向主库binlog坐标,最后启动复制并验证状态正常。
MySQL 主从数据迁移通常是在搭建主从复制(Replication)时的关键步骤。目标是将主库的当前数据状态完整同步到从库,确保后续的 binlog 增量复制能正常进行。以下是标准操作流程。
1. 备份主库数据
使用 mysqldump 工具备份主库所有数据,并记录 binlog 位置:
命令示例:
mysqldump -u root -p --all-databases --master-data=2 --single-transaction --routines --triggers --events > backup.sql
说明:
- –all-databases:导出所有数据库。
- –master-data=2:在 dump 文件中写入 CHANGE MASTER TO 所需的 binlog 文件名和位置(注释形式),用于从库定位复制起点。
- –single-transaction:保证一致性,适用于 InnoDB,避免锁表。
- –routines –triggers –events:包含存储过程、触发器、事件调度。
2. 将备份文件传输到从库
使用 scp 或 rsync 等工具把 backup.sql 发送到从库服务器:
scp backup.sql user@slave_ip:/path/to/
3. 在从库导入数据
登录从库 MySQL,执行导入:
mysql -u root -p < backup.sql
导入过程会重建所有数据库和表结构及数据,保持与主库一致。
4. 配置从库连接主库
进入从库 MySQL 命令行,执行 CHANGE MASTER TO 命令。
先从 backup.sql 中提取 binlog 信息:
head -n50 backup.sql | grep "CHANGE MASTER TO"
输出类似:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1234;
根据该信息配置从库:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='repl_password',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=1234;
5. 启动复制
执行启动命令:
START SLAVE;
查看复制状态:
SHOW SLAVE STATUSG
重点关注:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Last_Error: 应为空
注意事项
主库需开启 binlog 并设置唯一 server-id:
server-id = 1
log-bin = mysql-bin
从库配置:
server-id = 2
(不能与主库相同)
确保主库有用于复制的用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
基本上就这些,只要备份时获取了正确的 binlog 位置,从库导入后就能顺利衔接主库的增量更新。