MySQL数据库迁移:导入导出与主从同步方案对比

2026-07-21 阅读 2 数据迁移备份

数据库迁移搞砸了是什么后果?轻则丢几条订单数据,重则整个站点的用户信息错乱。MySQL迁移没有万能方案,几十兆的小库和几十G的大库,处理思路完全不同。

方案一:mysqldump导入导出

这是最直接的方案,适合500MB以下的中小型数据库。核心就两条命令:

导出:mysqldump -u root -p --single-transaction --routines --triggers --default-character-set=utf8mb4 dbname > dbname.sql

导入:mysql -u root -p dbname < dbname.sql

几个容易踩的点:字符集必须指定utf8mb4,不然emoji会变成问号;--single-transaction保证InnoDB表一致性快照,不会锁表;如果库里有视图或存储过程,不加--routines导出后你会发现少了东西。

导入报错最常见的是外键约束冲突。解决办法是在SQL文件开头加 SET FOREIGN_KEY_CHECKS=0;,结尾加 SET FOREIGN_KEY_CHECKS=1;,让导入顺序不受外键限制。

方案二:主从同步迁移

数据库超过2GB,或者业务不能停机,就该上主从同步了。原理很简单:旧服务器当主库,新服务器当从库,先把数据通过binlog同步过去,再切换读写指向。

操作步骤:第一步,主库开启binlog并创建同步账号:GRANT REPLICATION SLAVE ON *.* TO 'repl'@'新服务器IP' IDENTIFIED BY '密码'; 第二步,锁表后记录master状态:FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;,记下File和Position。第三步,用mysqldump导出当前数据传到从库导入。第四步,从库配置change master指向主库的File和Position,启动slave线程。

同步跑起来后用 SHOW SLAVE STATUS\G 检查,重点看Slave_IO_Running和Slave_SQL_Running是不是都是Yes。两个都Yes才算同步正常。

怎么选?看数据量和停机窗口

能停机半小时以上的小库,用dump导入导出就行,简单可靠。7×24小时运行且数据量大的业务,主从同步是唯一选择。预算充足的话还可以考虑用Percona XtraBackup做物理备份迁移,速度比mysqldump快一个数量级,但操作门槛也更高。

电话咨询 微信咨询 在线咨询 返回顶部
xycx202108

微信扫码咨询

×