第 10 章 · 第三节
备份文件里全是 SQL 语句
那份文件里全是 CREATE 和 INSERT,挨个跑一遍就还原了。

那份文件里全是 CREATE 和 INSERT,挨个跑一遍就还原了。

命令写成了 mysqldump,它只往外导,那个小于号根本不看。

还原要写 mysql,不是 mysqldump。课件截图里那句就报了 1049。
报 1049 是因为目标库还没建。不带建库语句的备份,要先 CREATE DATABASE。
已经连着服务器时,不用退出去,一句 source 就能跑那个文件。

| 在哪儿 | 怎么写 |
|---|---|
| 命令行 | mysql < 文件 |
| mysql> 里 | source 文件 |
source 之前要先 USE 一个库,不然它不知道往哪儿灌。
Workbench 里选导出时那个文件夹,点 Start Import。

备份和还原在界面上是挨着的两项,一个 Export 一个 Import。
Import 之前要不要先把目标库建出来?
换新服务器、升级版本、换数据库产品,这三种情况都要迁移。

同一种数据库之间搬最省事,换产品最麻烦,因为 SQL 方言不一样。
停掉服务,把数据目录整个拷到新机器的同一个位置。

拷目录之前必须先停 MySQL 服务,不停会拷到一半的文件。
| 做法 | 要不要停服务 |
|---|---|
| 拷数据目录 | 要停 |
| mysqldump | 不用停 |
为什么拷文件之前一定要停服务?
四步走,中间要留意两个版本默认字符集的差别。

高版本兼容低版本,所以从低版本往高版本搬是顺水,反过来是逆水。
跨版本一律用 mysqldump 导出再导入,别直接拷数据目录。
各家的 SQL 方言不一样,字段类型也对不上,只能一点点转。

字段类型也对不上,MySQL 的 DATE 和 TIME 在 Oracle 里只有一个 DATE。
这种迁移要靠 MyODBC 这类工具,或者自己写脚本转,没有一键完成的办法。