如何恢复使用 mysqldump 进行的转储?

dha*_*jai -1 mysql

我使用mysqldump命令从 Linode VPS 进行了备份,但是当我尝试将该转储恢复到我的本地主机时,它显示转储已成功导入,但实际上没有任何内容导入到数据库中。

我怀疑这是服务器问题 - 我的 Linode 服务器没有生成正确的转储文件,尽管在编辑器中打开它时看起来不错。我怀疑这是服务器问题的原因是,在之前的尝试中,无法下载数据库,下载总是在接近完成时中断。

命令:

导出数据库:

mysqldump -u root -p dbname > db.sql

导入数据库:

mysqldump -u root -p dbname < db.sql

我什至使用 md5sum 检查了下载文件的完整性,它很好。

可能是什么问题?

Ben*_*row 7

您没有说明如何将转储导入本地 MySQL 服务器,但应在命令行上完成超过几 MB 的任何操作,而不是像 phpMyAdmin 这样的工具。phpMyAdmin 之类的东西非常适合快速查询和编辑,但由于它在 Web 服务器上运行,因此上传的大小会有一些限制,这可能无法更改,因此您可以使用 phpMyAdmin 导入 100MB 的数据库。

根据个人经验,phpMyAdmin 也可能对导入转储很挑剔,并报告它们成功了,而实际上它们要么只导入了一半,要么根本没有导入。


如果我是你,我会试着把你的问题分解成更小的块,然后把它建立起来,看看它是否在某个地方倒下。在下面的所有命令中,显然替换-u ben -p"password"为适合您的任何命令。我在 Windows 上运行它,但对于 Linux,它应该没有太大(如果有)不同。既然你有一个 VPS,我也假设你有 root 权限。

首先,确保所有的表实际上都是使用正确的结构创建的。使用mysqldump --no-data db_name -u ben -p"password" > structure.sql做一个“结构只有”转储。使用服务器上的文本编辑器打开它并检查所有表是否已转储。

接下来,使用mysqldump db_name -u ben -p"password" > full-dump.sql. 再次使用服务器上的文本编辑器验证文件的最后一行是数据库最后一个表中的最后一行。

然后使用您喜欢的方法将文件传输到您的计算机。如果您认为这是数据损坏或截断的地方,请获取服务器上文件的校验和,并将其与下载时进行比较。

使用 将转储导入本地 MySQL 服务器mysql -u ben -p"password" db_name < full-dump.sql。如果您感到特别偏执,请将新导入数据的每个表中的行数与服务器副本进行比较。