好,咱们直接说正事。你换了新电脑,或者公司给你配了台新机器,结果发现MySQL数据库还躺在旧电脑里,那一刻的心情我太懂了。网上教程一搜一大堆,但要么是让你敲一堆看不懂的命令,要么就是讲了上篇没下篇,你卡在半路,数据库没迁过去,旧电脑还得继续扛着用。今天这篇不整那些虚的,就按咱们平时搬家的思路,把MySQL从一台电脑完完整整搬到另一台电脑,保证你读完就能动手干。

先说最笨也最靠谱的办法:直接拷贝数据目录。这招适合MySQL版本一致、操作系统也一致的情况。你要是从Windows迁到Windows,或者从Linux迁到Linux,直接用U盘或者移动硬盘把整个数据文件夹拷走就行。具体位置一般在MySQL安装目录下的文件夹,Windows上常见的是,Linux上通常是。拷贝之前,一定记得先停掉MySQL服务,不然文件正在写入,拷出来就是坏的。拷完之后,把文件夹原样放到新电脑的对应位置,改好配置文件里的路径,启动服务就能看到数据了。这个方法简单粗暴,但有个坑——如果你新电脑的MySQL版本比旧的高,或者低了一个大版本,直接拷目录可能报错,因为系统表结构变了。
那版本不一致怎么办?这时候就得用官方推荐的逻辑备份工具。这玩意儿相当于给数据库拍个快照,把建表语句和数据记录全写成一个SQL文件,拿到哪台机器上都能重新执行。命令也简单,在命令行里敲,然后输入密码,就会生成一个文本文件。要是你数据库特别大,比如几十个G,你可以只备份某个表,或者排除掉日志表,命令加个参数就行。生成的文件别用记事本打开看,除非你想看几万行INSERT语句看到眼花。把这个SQL文件拷到新电脑上,先建好同名的空数据库,然后执行,数据就灌进去了。这招跨版本、跨操作系统都行,唯一的缺点是慢,大库可能要跑几个小时。
不过,有个尴尬的地方,它默认把数据一条条INSERT,如果你有几百张表、每张表几百万行,恢复的时候那叫一个煎熬。这时候你可以换个思路,用把每张表的数据导成CSV文件,然后在目标库用快速导入。这招适合那种结构复杂但数据量特别大的库,因为CSV文件比SQL脚本体积小得多,导入速度能快好几倍。但前提是你得把表结构先在新库里建好,而且要注意字符集问题,CSV文件里的中文要是乱码,导入进去就全毁了。所以导出的时候指定,导入的时候也指定同样的字符集,基本就没问题。
说完命令行的路子,咱们聊聊图形化工具。我知道很多人一看到黑乎乎的终端窗口就头疼,那咱们用Navicat或者MySQL Workbench。拿Navicat举例,你连接旧库,右键点击数据库,选“转储SQL文件”,它会生成一个完整的SQL脚本。然后在新的电脑上装好Navicat,连接新库,打开这个SQL文件直接运行,数据就过去了。这跟的原理一样,但好处是全程鼠标操作,不用记命令。不过要注意,Navicat生成的SQL文件有时候带有额外的注释和设置项,在新版本MySQL上运行可能会报语法错误,遇到这种情况,你直接把文件里的注释行删掉再跑,基本能解决。另外,如果你是MySQL Workbench的忠实用户,它也有“Data Export”和“Data Import”功能,操作逻辑差不多,就是界面稍微有点繁琐。
还有一类特殊情况,你可能只是想把某个数据库从一台服务器迁到另一台,但两台电脑不在同一个局域网,中间隔着公网。这时候最省事的方法是用命令行工具的管道功能,直接远程传输。比如在旧电脑上执行,这样数据直接从旧库流到新库,中间不落地,省得你又是拷贝又是传输。但前提是两台机器都装了SSH服务,而且新电脑的MySQL要允许远程连接。这种方式适合数据量中等、网络带宽够用的场景,要是数据量太大,网络一卡,传输就断了,你还得重来。
上面说的都是常规操作,但有个坑我得多提一嘴:字符集。很多人迁完库发现中文全变成了问号,或者显示成乱码,十有八九是字符集没对齐。旧库创建的时候用的可能是,新库默认是,那你导出的SQL文件里如果没明确指定字符集,恢复的时候就会按照新库的默认字符集去解析,结果就是乱码。解决办法很简单,导出的时候在命令后面加,导入的时候也加同样的参数。另外,检查一下表结构里有没有字段用了或者,这些字段在旧库里的字符集可能跟新库不一样,最好在导出前统一改掉。
还有一招适合懒人:直接用Docker。如果你新电脑上装了Docker,那就简单了。在旧电脑上把MySQL容器停掉,然后把整个数据卷(volume)打包拷贝过去,在新电脑上创建同样配置的容器,挂载上这个数据卷,启动就完事了。这招的好处是环境完全一致,不会出现版本差异、路径不对的问题。但前提是你旧电脑上本来就用Docker装的MySQL,要是直接装的系统服务,那还得先转成Docker容器,反而多了一步。
写到这里,我猜你已经发现了,MySQL迁移这事儿,没有一招通吃的方法,关键得看你的场景:版本一致就拷贝目录,版本不一致就用,数据量大就导出CSV,不会敲命令就用图形化工具,跨公网迁移就用SSH管道,环境复杂就上Docker。但不管选哪条路,记住几个铁律:迁移前一定要停服务或者锁表,防止数据写入不一致;迁移后一定要验证数据完整性,随便查几条记录,看看表数量对不对;最重要的一点,旧电脑别急着格式化,等新库跑稳了再清理。毕竟数据这东西,丢了就真没了,别跟自己的劳动成果过不去。换电脑是场搬家,数据库迁移就是搬家里的重头戏,你把这篇看完了,剩下的就是动手,别怕,照着做,准能成。


