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

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

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

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

命令:

导出数据库:

mysqldump -u root -p dbname > db.sql

导入数据库:

mysqldump -u root -p dbname < db.sql

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

可能是什么问题?

答案1

您没有说明如何将转储导入本地 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。如果您感觉特别谨慎,请将新导入的数据中每个表中的行数与服务器副本进行比较。

相关内容