从整个数据库转储中恢复选择性表?

时间:2011-01-04 14:48:45

标签: mysql database-restore

我有一个用mysqldump创建的mysql转储,它保存我数据库中的所有表及其所有数据。但是我只想恢复两个表。 (让我们称呼他们为kittenskittens_votes

如何在不恢复整个数据库的情况下恢复这两个表?

5 个答案:

答案 0 :(得分:2)

嗯,你有三个主要选择。

  1. 您可以在文件中手动查找与备份表相关的SQL语句,并手动复制它们。这样做的好处很简单,但对于大型备份来说这是不切实际的。

  2. 将数据库还原到临时数据库。基本上,创建一个新数据库,将其还原到该数据库,然后将数据从那里复制到旧数据库。只有在进行单个数据库备份时(如果备份文件中没有CREATE DATABASE命令),这才能正常工作。

  3. 将数据库还原到新的数据库服务器,然后从那里进行复制。如果您采用完整服务器备份而不是单个数据库备份,则此方法很有效。

  4. 您选择哪一个取决于具体情况(包括您拥有的数据)......

答案 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

  • 将.sql文件(带有所需表格的文件)插入新数据库
  

$ 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,你们都是金色的!