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


当前回答

前面提到的“sed”解决方案很好,但不是100%安全

你可以使用INSERT命令,其中的数据包含: ... 创建表(无论)……mytable… 或者甚至是精确的字符串"CREATE TABLE ' mytable ';" 如果您正在存储DML命令,例如!

(如果表很大,你不需要手动检查)

我会验证所使用的转储版本的确切语法,并有一个更严格的模式搜索:

避免”。*”并使用“^”来确保我们从行开头开始。 我更喜欢抓住最初的DROP

总而言之,这对我来说更好:

sed -n -e '/^DROP TABLE IF EXISTS \`mytable\`;/,/^UNLOCK TABLES;/p' mysql.dump > mytable.dump

其他回答

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

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

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

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

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

您可以使用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大小的文件做了这件事。

前面提到的“sed”解决方案很好,但不是100%安全

你可以使用INSERT命令,其中的数据包含: ... 创建表(无论)……mytable… 或者甚至是精确的字符串"CREATE TABLE ' mytable ';" 如果您正在存储DML命令,例如!

(如果表很大,你不需要手动检查)

我会验证所使用的转储版本的确切语法,并有一个更严格的模式搜索:

避免”。*”并使用“^”来确保我们从行开头开始。 我更喜欢抓住最初的DROP

总而言之,这对我来说更好:

sed -n -e '/^DROP TABLE IF EXISTS \`mytable\`;/,/^UNLOCK TABLES;/p' mysql.dump > mytable.dump