【问题标题】:mysqldump dump only database with certain prefixmysqldump 仅转储具有特定前缀的数据库
【发布时间】:2014-10-16 15:50:18
【问题描述】:

我有大约 100 个不同的数据库,我想用 mysqldump 转储以前缀“asd_”开头的数据库

我试过了,但它不起作用:

mysqldump -u[user] -p[pwd] -h [server.url] asd_* --single-transaction > backup.sql

我也试过了:

mysqldump -u[user] -p[pwd] -h [server.url] "SHOW DATABASES LIKE 'asd_%'" --single-transaction > backup.sql

但也不行。

感谢您的帮助。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    mysqldump 本身不支持表或数据库的通配符。

    您必须单独生成数据库列表,然后在 mysqldump 命令中使用它。您可以将这一步组合在一个子命令中,如下所示:

    mysqldump ...options... --databases `mysql -B -N -e "SHOW DATABASES LIKE 'asd\_%'"`
    

    请注意,我必须反斜杠 _ 字符,因为它是 LIKE 的元字符。

    我还必须使用--databases 选项,否则第二个和后续数据库名称将被解释为第一个数据库中的表名。那是因为mysqldump的用法是以下之一:

    Usage: mysqldump [OPTIONS] database [tables]
    OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
    OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
    

    【讨论】:

      【解决方案2】:

      如果您需要比SHOW DATABASES LIKE ... 提供的单个LIKE 条件更复杂的逻辑,另一种方法是直接选择表名:

      mysqldump --databases $(mysql -Bse "SELECT SCHEMA_NAME from information_schema.SCHEMATA WHERE SCHEMA_NAME LIKE 'prefix1\_%' OR SCHEMA_NAME LIKE 'prefix2\_%'") > dbs.sql
      

      【讨论】:

        猜你喜欢
        • 2011-07-13
        • 2013-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多