我有一个mysqldump备份我的mysql数据库,包括我们所有的表,这是大约440兆。我只想从mysqldump中恢复其中一个表的内容。这可能吗?从理论上讲,我可以只删除重建我想要的表的部分,但我甚至不知道如何有效地编辑这种大小的文本文档。
当前回答
sed -n -e '/-- Table structure for table `my_table_name`/,/UNLOCK TABLES/p' database_file.sql > table_file.sql
这是一种比上面其他解决方案更好的解决方案,因为并非所有SQL转储都包含DROP TABLE语句。这将工作将所有类型的转储。
其他回答
一个简单的解决方案是仅为希望单独恢复的表创建一个转储。你可以使用mysqldump命令来这样做,语法如下:
mysqldump -u [user] -p[password] [database] [table] > [output_file_name].sql
然后像往常一样导入它,它只会导入转储的表。
不管怎样,任何这样做的进程都必须遍历转储的整个文本,并以某种方式解析它。我只要grep
INSERT INTO `the_table_i_want`
并将输出导入mysql。看一下之前转储中的第一个表,以确保您以正确的方式获取INSERT。
编辑:好的,这次格式正确。
你应该尝试@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
sed -n -e '/-- Table structure for table `my_table_name`/,/UNLOCK TABLES/p' database_file.sql > table_file.sql
这是一种比上面其他解决方案更好的解决方案,因为并非所有SQL转储都包含DROP TABLE语句。这将工作将所有类型的转储。
您可以使用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中获得数据库结构?
- MySQL删除表中的所有行,并将ID重置为零
- 在准备语句中使用“like”通配符
- MySQL中的表名是否区分大小写?
- 库未加载:libmysqlclient.16。在OS X 10.6上使用mysql2 gem运行'rails server'时出现dylib错误
- 如何知道MySQL表最近一次更新?
- 在MySQL中的一个查询中更新多个具有不同值的行
- 如果表存在则删除表并创建它,如果不存在则创建它
- MySQL OR与IN性能
- 将值从同一表中的一列复制到另一列
- 删除id与其他表不匹配的sql行
- MySQL CPU使用率高
- INT和VARCHAR主键之间有真正的性能差异吗?
- 拒绝访问;您需要(至少一个)SUPER特权来执行此操作
- 从存储引擎得到错误28