我有大约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
但两项都不起作用。
感谢您的帮助。
答案 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