好,咱们直接聊正事儿。很多朋友一听到“迁移数据库”四个字,第一反应就是头大:会不会丢数据?会不会搞崩系统?要不要写一堆SQL脚本?其实真没那么吓人。如果你用的是 Navicat,这个活基本就是点几下鼠标的事儿。我见过不少开发者和运维,一开始都手写导出导入命令,折腾半天还容易出岔子,后来用了 Navicat 的数据传输工具,五分钟搞定。今天就把这套流程拆成三步,你跟着走一遍,下次再遇到数据库迁移,心里就有底了。

第一步,你得先搞清楚自己手里是什么数据库,要迁到哪儿去。Navicat 之所以牛,就在于它几乎支持所有主流数据库:MySQL、PostgreSQL、SQL Server、Oracle、MariaDB、SQLite 等等。你只需要在左侧的连接列表里,把源数据库和目标数据库都连上。举个例子,假设你原来有个 MySQL 数据库叫 “olddb”,想把它完整复制到一台新服务器上的 MySQL,或者甚至想从 MySQL 迁移到 PostgreSQL,Navicat 都能干。连接时注意填写 IP 地址、端口、用户名和密码,测试连接成功就行。这一步没啥技术含量,但容易犯的错是端口号写错,或者防火墙没开——我见过有人折腾一上午,最后发现是目标服务器的 3306 端口没放行。
连接搞定之后,真正的重头戏来了。把鼠标移到源数据库连接上,右键点击,找到 “数据传输” 选项,别点错了,不是 “转储 SQL 文件” 也不是 “同步”。点进去后,界面很直观:左边选源,右边选目标。源就是你想复制数据的那个数据库,目标就是你要迁过去的新数据库。这里有个细节:如果目标数据库里还没建好同名的库,Navicat 会在传输过程中自动帮你创建,你只需要在目标连接里选一个空白库或新建一个库就行。选好后,会弹出一堆选项,比如 “表”“视图”“函数”“事件”“触发器”等等。默认是全选的,但如果只想复制某些表,可以手动勾选。我建议第一次迁移时,先把所有对象都勾上,省得漏掉存储过程或触发器,回头排查半天。
接下来就是配置传输选项。很多人直接默认下一步,但其实有几个坑需要注意。比如 “记录选项” 里有个 “每次传输的记录数”,默认是 1000。如果你的表里有几百万行数据,这个值可以调大一些,比如 5000 或者 100,传输速度会快很多。还有 “高级” 选项卡里的 “启用事务”,建议勾上,这样万一传输过程中断了,数据不会写一半,保证了原子性。更关键的是 “完整记录” 选项——如果目标数据库已经有数据,选择 “更新” 模式,它会比对主键进行更新,而不是直接覆盖;如果选 “追加”,它会在现有数据后面追加新行,可能导致重复数据。所以要先想清楚:是全新迁移还是增量同步?如果是第一次迁移,目标库是空的,用 “追加” 或者 “删除并复制” 都行。另外,别忘了勾选 “包含字符集设置”,尤其是不同数据库之间迁移时,字符集不匹配会导致乱码,那可就头疼了。
配置完这些,点 “开始” 按钮,Navicat 就开始干活了。你会看到一个进度条,左边是当前正在处理的表名,右边是已传输的行数和总行数。过程快慢取决于数据量大小和网络带宽。我试过一次迁移一个 50 GB 的 MySQL 库到远程服务器,用了大概 40 分钟,中间没出任何问题。但如果数据量特别大,比如几百 GB,建议挑业务低峰期操作,或者分批迁移。Navicat 还支持断点续传——如果传输过程中网络断了,你可以重新启动数据传输,它会自动跳过已经传完的表,只传未完成的。这个功能很实用,尤其是跨机房迁移,网络波动是常事。传完后,它会生成日志报告,列出成功和失败的表,失败的表会有错误原因。别慌,大部分失败是因为字段类型冲突或外键约束,比如目标库的某个字段长度不够,或者主键重复。这时根据错误信息回去调整一下源表或目标表结构,重新跑一次就行。
传输完成后,别忘了做两件事。第一,检查数据完整性。随便抽几张表,对比一下源和目标的行数、最大值、最小值。Navicat 里有个 “信息” 功能,点一下就能看到每张表的行数,很方便。第二,检查对象完整性。比如存储过程、触发器、视图这些,有没有成功复制过去。尤其是视图,依赖的表结构如果不一致,可能会失败。建议在目标数据库里随便执行几个视图的 SELECT 语句,看看能不能跑通。另外,自增主键的起始值也要留意——如果源表的主键最大是 1000,目标表的自增可能从 1 开始,下次插入时就会冲突。解决方案是在传输前,把目标表的自增起始值手动改成比源表最大值大 1,或者在传输时勾选 “保留自增起始值” 选项。
还有一个容易被忽略的点:外键约束。如果数据库里表与表之间有多层外键关联,直接传输可能会因为顺序问题报错。比如 A 表引用了 B 表的主键,但 B 表还没传过去,A 表就会报外键冲突。Navicat 的 “数据传输” 工具默认会按依赖顺序处理,但有时仍会出现意外。保险的做法是,在传输前把目标库的外键检查临时关闭,等全部传完再开启。MySQL 里可以用 和 来控制。Navicat 的 “高级” 选项里也有 “禁用外键检查” 勾选框,记得选上,这样能避免大部分外键报错。
如果需要定期做数据同步,比如每周把生产库的数据复制到测试库,手动点鼠标还是有点烦。Navicat 提供了 “计划任务” 功能,可以设定定时自动执行数据传输。你可以在 “工具” 菜单里找到 “计划”,新建一个任务,指定源和目标,设置执行频率,比如每天凌晨两点跑一次。这样就能实现自动化迁移,省心不少。不过要注意,计划任务运行时如果电脑关机或网络断了,任务会失败。一般建议在服务器上装 Navicat,或者使用 Navicat 的命令行工具配合系统定时任务来执行。
说一句,Navicat 虽然强大,但它不是万能的。极少数情况下,比如数据库版本差异太大,或者某些特殊的数据类型(如 MySQL 的 JSON 字段迁到 SQL Server)可能会出现兼容性问题。这时需要手动调整字段类型,或用 SQL 脚本处理。但 90% 的日常迁移场景,Navicat 的数据传输工具都能搞定。只要记住三点:连接配置别写错端口,传输选项选对记录模式,传输完记得检查完整性和对象。下次再有人问 “Navicat 怎么把数据库复制到另一个数据库”,你就可以直接把这篇文章甩给他,或者简短说明:右键点数据传输,选好源和目标,点开始,完事。就这么简单。


