我有一个用mysqldump创建的mysql转储,它保存我数据库中的所有表及其所有数据。但是我只想恢复两个表。 (让我们称呼他们为kittens
和kittens_votes
)
如何在不恢复整个数据库的情况下恢复这两个表?
答案 0 :(得分:2)
嗯,你有三个主要选择。
您可以在文件中手动查找与备份表相关的SQL语句,并手动复制它们。这样做的好处很简单,但对于大型备份来说这是不切实际的。
将数据库还原到临时数据库。基本上,创建一个新数据库,将其还原到该数据库,然后将数据从那里复制到旧数据库。只有在进行单个数据库备份时(如果备份文件中没有CREATE DATABASE
命令),这才能正常工作。
将数据库还原到新的数据库服务器,然后从那里进行复制。如果您采用完整服务器备份而不是单个数据库备份,则此方法很有效。
您选择哪一个取决于具体情况(包括您拥有的数据)......
答案 1 :(得分:1)
例如,您可以使用regexp解析CREATE TABLE kittens|kitten_votes
AND INSERT INTO ...
,并仅执行这些语句。据我所知,没有其他方法可以从转储中“部分恢复”。
答案 2 :(得分:1)
打开.sql文件并复制所需表的插入语句。
答案 3 :(得分:0)
创建一个只能访问这两个表的新用户。现在使用-f(强制)选项恢复数据库,该选项将忽略失败的语句并仅执行它有权使用的那些语句。
答案 4 :(得分:0)
您想要的是“单表还原”
http://hashmysql.org/wiki/Single_table_restore
上面列出了一些选项...然而,对我有用的是:
$ mysql -u root -p CREATE DATABASE temp_db
$ mysql -u root -p temp_db< 〜/全/路径/到/ your_database_file.sql
$ mysqldump -u root -p temp_db awesome_single_table> 〜/ awesome_single_table.sql
$ mysql -u root -p original_database< 〜/ awesome_single_table.sql
然后删除temp_db,你们都是金色的!