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


当前回答

Get a decent text editor like Notepad++ or Vim (if you're already proficient with it). Search for the table name and you should be able to highlight just the CREATE, ALTER, and INSERT commands for that table. It may be easier to navigate with your keyboard rather than a mouse. And I would make sure you're on a machine with plenty or RAM so that it will not have a problem loading the entire file at once. Once you've highlighted and copied the rows you need, it would be a good idea to back up just the copied part into it's own backup file and then import it into MySQL.

其他回答

你应该尝试@bryn命令,但使用'分隔符,否则你也会提取有前缀或后缀的表,这是我通常做的:

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

同样出于测试的目的,你可能想要在导入之前更改表名:

sed -n -e 's/`mytable`/`mytable_restored`/g' mytable.sql > mytable_restored.sql

要导入,可以使用mysql命令:

mysql -u root -p'password' mydatabase < mytable_restore.sql

不管怎样,任何这样做的进程都必须遍历转储的整个文本,并以某种方式解析它。我只要grep

INSERT INTO `the_table_i_want`

并将输出导入mysql。看一下之前转储中的第一个表,以确保您以正确的方式获取INSERT。

编辑:好的,这次格式正确。

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

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

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

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