我有一个mysqldump备份我的mysql数据库,包括我们所有的表,这是大约440兆。我只想从mysqldump中恢复其中一个表的内容。这可能吗?从理论上讲,我可以只删除重建我想要的表的部分,但我甚至不知道如何有效地编辑这种大小的文本文档。
当前回答
一个简单的解决方案是仅为希望单独恢复的表创建一个转储。你可以使用mysqldump命令来这样做,语法如下:
mysqldump -u [user] -p[password] [database] [table] > [output_file_name].sql
然后像往常一样导入它,它只会导入转储的表。
其他回答
不管怎样,任何这样做的进程都必须遍历转储的整个文本,并以某种方式解析它。我只要grep
INSERT INTO `the_table_i_want`
并将输出导入mysql。看一下之前转储中的第一个表,以确保您以正确的方式获取INSERT。
编辑:好的,这次格式正确。
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.
前面提到的“sed”解决方案很好,但不是100%安全
你可以使用INSERT命令,其中的数据包含: ... 创建表(无论)……mytable… 或者甚至是精确的字符串"CREATE TABLE ' mytable ';" 如果您正在存储DML命令,例如!
(如果表很大,你不需要手动检查)
我会验证所使用的转储版本的确切语法,并有一个更严格的模式搜索:
避免”。*”并使用“^”来确保我们从行开头开始。 我更喜欢抓住最初的DROP
总而言之,这对我来说更好:
sed -n -e '/^DROP TABLE IF EXISTS \`mytable\`;/,/^UNLOCK TABLES;/p' mysql.dump > mytable.dump
这能更容易做到吗?我是这样做的:
创建一个临时数据库(例如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
sed -n -e '/-- Table structure for table `my_table_name`/,/UNLOCK TABLES/p' database_file.sql > table_file.sql
这是一种比上面其他解决方案更好的解决方案,因为并非所有SQL转储都包含DROP TABLE语句。这将工作将所有类型的转储。
推荐文章
- 如何通过查询在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