我有一个mysqldump备份我的mysql数据库,包括我们所有的表,这是大约440兆。我只想从mysqldump中恢复其中一个表的内容。这可能吗?从理论上讲,我可以只删除重建我想要的表的部分,但我甚至不知道如何有效地编辑这种大小的文本文档。


当前回答

一个简单的解决方案是仅为希望单独恢复的表创建一个转储。你可以使用mysqldump命令来这样做,语法如下:

mysqldump -u [user] -p[password] [database] [table] > [output_file_name].sql

然后像往常一样导入它,它只会导入转储的表。

其他回答

我尝试了一些选择,它们都非常慢。这将在几分钟内将一个360GB的转储拆分到它的表中:

如何将mysqldump的输出分割成更小的文件?

SQL块被“表my_table的表结构”和“转储表my_table的数据”阻塞。

您可以如下所示使用Windows命令行获取各个部分的行号。根据需要调整搜索字符串。

查找/n "for table ' " sql.txt

将返回以下内容:

---------- SQL.TXT

[4384]——my_table的表结构

[4500]——转储表my_table的数据

[4514]——表some_other_table的表结构

... 等。

这就得到了你需要的行号……现在,如果我知道如何使用它们……调查。

这能更容易做到吗?我是这样做的:

创建一个临时数据库(例如restore):

Mysqladmin -u root -p create restore

恢复临时数据库中的完整转储:

Mysql -u root -p——one-database restore < fulldump.sql

转储需要恢复的表:

Mysqldump恢复mytable

在另一个数据库中导入表:

Mysql -u root -p database < mytable.sql

我欣赏这里的一些独创性,但实际上根本没有理由使用sed来解决OP的问题。

注释“use——one-database”是正确答案,内置在MySQL/MariaDB中。不需要第三方黑客。

Mysql -u root -p databasename——one-database < localhost。SQL将只导入所需的数据库。

我还发现,在某些情况下,当使用它来导入一系列数据库时,它会在列表中为我创建下一个数据库(但不会在其中放入任何东西)。不知道为什么它这样做,但它使恢复更容易。

使用此命令,交互式地输入密码,它将导入所请求的数据库。

sed -n -e '/-- Table structure for table `my_table_name`/,/UNLOCK TABLES/p' database_file.sql > table_file.sql

这是一种比上面其他解决方案更好的解决方案,因为并非所有SQL转储都包含DROP TABLE语句。这将工作将所有类型的转储。