我有一个用 mysqldump 创建的 mysql 转储,其中包含我数据库中的所有表及其所有数据。但是我只想恢复两个表。(让我们打电话给他们kittens
和kittens_votes
)
如何在不恢复整个数据库的情况下恢复这两个表?
我有一个用 mysqldump 创建的 mysql 转储,其中包含我数据库中的所有表及其所有数据。但是我只想恢复两个表。(让我们打电话给他们kittens
和kittens_votes
)
如何在不恢复整个数据库的情况下恢复这两个表?
好吧,您有三个主要选择。
您可以在与备份表相关的文件中手动查找 SQL 语句并手动复制它们。这具有简单的优点,但对于大型备份来说这是不切实际的。
将数据库还原到临时数据库。基本上,创建一个新数据库,将其还原到该数据库,然后将数据从那里复制到旧数据库。仅当您进行单个数据库备份时(如果CREATE DATABASE
备份文件中没有命令),这才会有效。
将数据库还原到新的数据库服务器,然后从那里复制。如果您采用完整服务器备份而不是单个数据库备份,则此方法效果很好。
您选择哪一个将取决于具体情况(包括您拥有多少数据)...
例如,您可以使用正则表达式解析CREATE TABLE kittens|kitten_votes
AND INSERT INTO ...
,并且只执行这些语句。据我所知,没有其他方法可以从转储中“部分恢复”。
打开 .sql 文件并复制所需表的插入语句。
创建一个只能访问这两个表的新用户。现在使用 -f(强制)选项恢复数据库,该选项将忽略失败的语句并仅执行它有权执行的那些语句。
您想要的是“单表还原”
http://hashmysql.org/wiki/Single_table_restore
上面概述了一些选项......但是对我有用的是:
$ mysql -u root -p 创建数据库 temp_db
$ 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,你就全是金子了!