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


当前回答

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

创建一个临时数据库(例如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

其他回答

备份 mysqldump-A.gz - | gzip > 恢复单表 $ mysql -e "truncate TABLE_NAME $ zgrep ^"INSERT INTO \ ' TABLE_NAME" mysqldump-A.gz | mysql DB_NAME

一种可能的处理方法是恢复到临时数据库,并从临时数据库中转储该表。然后使用新的脚本。

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

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

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

将返回以下内容:

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

[4384]——my_table的表结构

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

[4514]——表some_other_table的表结构

... 等。

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

大多数现代文本编辑器应该能够处理这样大小的文本文件,如果您的系统能够胜任的话。

不管怎样,有一次我不得不很快地做这件事,而我没有时间去找任何工具。我设置了一个新的MySQL实例,导入了整个备份,然后输出了我想要的表。

然后我将该表导入主数据库。

这很乏味,但相当容易。祝你好运。

您可以尝试使用sed,以便只提取所需的表。

假设你的表名为mytable,文件名为mysql。Dump是包含你的巨大转储的文件:

$ sed -n -e '/CREATE TABLE.*`mytable`/,/Table structure for table/p' mysql.dump > mytable.dump

这将复制到文件mytable中。dump位于CREATE TABLE mytable和对应下一个表的下一个CREATE TABLE之间的内容。

然后可以调整文件mytable。其中包含表mytable的结构和数据(一个INSERT列表)。