mysqldump仅转储具有特定前缀的数据库

时间:2014-10-16 15:50:19

标签: mysql sql database

我有大约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

但两项都不起作用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

单独的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]

答案 1 :(得分:-1)

如果您需要的逻辑比LIKE提供的单个SHOW DATABASES LIKE ...条件更复杂,则可以选择直接选择表名:

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