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

7

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

12

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]

0

如果您需要比单个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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接