0

我有一个用 mysqldump 创建的 mysql 转储,其中包含我数据库中的所有表及其所有数据。但是我只想恢复两个表。(让我们打电话给他们kittenskittens_votes

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

4

5 回答 5

2

好吧,您有三个主要选择。

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

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

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

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

于 2011-01-04T14:59:08.013 回答
1

例如,您可以使用正则表达式解析CREATE TABLE kittens|kitten_votesAND INSERT INTO ...,并且只执行这些语句。据我所知,没有其他方法可以从转储中“部分恢复”。

于 2011-01-04T14:53:42.930 回答
1

打开 .sql 文件并复制所需表的插入语句。

于 2011-01-04T14:54:30.897 回答
0

创建一个只能访问这两个表的新用户。现在使用 -f(强制)选项恢复数据库,该选项将忽略失败的语句并仅执行它有权执行的那些语句。

于 2011-01-05T06:41:29.497 回答
0

您想要的是“单表还原”

http://hashmysql.org/wiki/Single_table_restore

上面概述了一些选项......但是对我有用的是:

  • 创建一个新的数据库

$ mysql -u root -p 创建数据库 temp_db

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

$ mysql -u root -p temp_db < ~/full/path/to/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,你就全是金子了!

于 2012-10-12T16:04:10.717 回答