代码之家  ›  专栏  ›  技术社区  ›  Ergec

跳过所有数据库,只运行特定的数据库

  •  1
  • Ergec  · 技术社区  · 16 年前

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

    3 回复  |  直到 16 年前
        1
  •  4
  •   T.J. Crowder    16 年前

    你可以尝试做:

    mysql -D example_database -o < dump.sql
    

    这只会执行 SQL 用于指定数据库的命令,并将跳过用于所有其他数据库的命令。这个 -o ("one database") option 批评的 按预期工作 mysql 忽略与其他数据库相关的语句)。

    dump.sql 是执行的结果 mysqldump --all-databases

        2
  •  0
  •   sfussenegger    16 年前

    它越来越脏,如果停止阅读或被警告;)

    它不漂亮,也许有更好的(正确的)方法来实现这一点。但是,假设您正在处理的转储不是很大,那么将完整转储导入临时dbs并创建要导入的数据库的新转储可能会更快。(就像我说的,不漂亮)

    另外,您应该确保能够恢复所做的备份(以任何可以想象的方式)。这可能会 真正地 在你急需它们的那一天很尴尬。

        3
  •  0
  •   Community Mohan Dere    8 年前

    有几个想法:

    1. 您可以编辑转储文件(毕竟它只是一个文本文件),只提取与要还原的数据库相关的项。我认为每个数据库都是单独写入文件的,所以这是一个确定与所需数据库相关的一个大块并在其前后删除位的问题——例如,不像听起来那么麻烦。寻找 create database use 语句(至少在我的版本中,还有我的选项)横幅注释“current database: foo “在每个部分的顶部)。这样做很容易 vi 或者任何能让你轻松完成大型操作的东西。然后,可以搜索结果,确保不存在对不希望更新的dbs的交叉引用。

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

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

    4. (3上的变体)您可以对所有当前数据库进行重命名,导入文件,然后删除不需要的数据库,然后重新命名原始数据库。还有漂白剂。

    我可能会选择1(在完全备份之后)。祝你好运。

    编辑 不,我同意 codaddict's -D databasename -o solution (完全备份后)。 好一个