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


当前回答

您可以使用vi编辑器。类型:

vi -o mysql.dump mytable.dump

打开全部转储mysql。Dump和一个新文件mytable.dump。 通过按/找到合适的insert into line,然后键入一个短语,例如:"insert into ' mytable ' ",然后使用yy复制这一行。按ctrl+w然后向下方向键切换到下一个文件,用pp粘贴复制的行。最后输入:wq保存新文件,用:q保存。

注意,如果您使用多个插入转储了数据,您可以使用Nyy一次复制(yank)所有数据,其中N是要复制的行数。

我用一个920 MB大小的文件做了这件事。

其他回答

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

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

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

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

我使用了uloBasEI的sed命令的修改版本。它包括前面的DROP命令,读取直到mysql完成转储数据到你的表(解锁)。为我工作(重新)导入wp_users到一堆Wordpress网站。

sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' mydump.sql > tabledump.sql

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

如何将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

您可以使用如下所示的终端线导入单个表。 这里导入单个用户表到特定的数据库。

mysql -u root -p -D my_database_name < var/www/html/myproject/tbl_user.sql