跳过所有数据库并仅运行特定数据库

时间:2010-03-09 09:44:14

标签: mysql database linux mysqldump

我有一个由“mysqldump --all-databases”生成的sql文件。它里面有很多数据库。我想要做的是更新我的本地数据库,但只更新一个特定的数据库,而不是全部。我尝试使用“mysql -database = db_name< file.sql”,但它更新了所有数据库。有没有办法跳过除我想要的数据库之外的所有数据库。

3 个答案:

答案 0 :(得分:4)

您可以尝试:

mysql -D example_database -o < dump.sql

这将仅执行指定数据库的SQL命令,并将跳过所有其他数据库的命令。 -o ("one database") option critical 对此工作正常(它告诉mysql忽略与其他数据库相关的语句)。

dump.sql是执行mysqldump --all-databases

的结果

答案 1 :(得分:0)

它变脏了,如果被警告就停止阅读;)

它不漂亮,也许有更好的(正确的)方法来实现这个目标。但假设您正在使用的转储不是很大,您可以通过将完整转储导入临时DB并创建要导入的数据库的新转储来更快。 (正如我所说,并不漂亮)

此外,您应该确保能够以任何可以想象的方式恢复您所做的备份。这可能会让您在紧急需要的那天感到非常尴尬。

答案 2 :(得分:0)

一些想法:

  1. 您可以编辑转储文件(毕竟它只是一个文本文件),只提取与要恢复的数据库相关的项目。我认为每个数据库都是单独写入文件的,所以这是一个识别与你想要的相关的一个大块并删除它之前和之后的位的问题 - 例如,不像听起来那么多的杂务。查找create databaseuse语句(至少在我的版本中,我的选项),每个部分顶部的横幅评论“当前数据库:foo” 。使用vi或其他任何可以轻松执行大型操作的操作都非常容易。然后,您可以搜索结果,确保没有对您不想更新的数据库的交叉引用。

  2. 您可以备份不想更新的数据库,执行更新,然后还原它们。我的意思是,在你做这种事之前,你还有备份,对吧? ; - )

  3. 您可以恢复到空白的MySQL实例,然后获取所需的备份。布莱什。

  4. (#3上的变化)您可以对所有当前数据库进行重命名,导入文件,然后删除不需要的文件,并重命名原件。同样发誓。

  5. 我可能会选择#1(完全备份后)。祝你好运。

    修改不,我选择codaddict's -D databasename -o solution(完整备份后)。 很好