ash*_*osh 24 mysql mysqldump backup
我们的服务器中有 40 个数据库。
我们想使用 mysqldump 进行 36 个数据库备份。如何在 mysqldump 命令中忽略剩余的 4 个数据库?mysqldump 是否有任何选项可以忽略 MySQL 中的备份数据库?
我知道一般的 mysqldump 命令,但它非常冗长。我只想忽略 4 个数据库并且需要进行剩余的 dbs 备份。
Rol*_*DBA 17
回到 2011 年 12 月 16 日,我回答了问题How do you mysqldump specific table(s)?
我收集了所有不包括某组表名的表。
使用相同的原则,您可以从information_schema.schemata
想要 mysqldump的元数据表中收集所有数据库名称,创建一个查询以返回该列表,然后使用该数据库列表来制定 mysqldump 命令。
DATABASES_TO_EXCLUDE="db1 db2 db3"
EXCLUSION_LIST="'information_schema','mysql'"
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'"
done
SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
MYSQLDUMP_DATABASES="--databases"
for DB in `mysql -ANe"${SQLSTMT}"`
do
MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
done
MYSQLDUMP_OPTIONS="--routines --triggers"
mysqldump ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES} > MySQLDatabases.sql
Run Code Online (Sandbox Code Playgroud)
您需要做的就是将您不希望 mysqldump 的数据库放入 DATABASES_TO_EXCLUDE
试一试 !!!
小智 17
使用 grep 排除您不想要的数据库:
candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")
mysqldump --databases $candidates
Run Code Online (Sandbox Code Playgroud)
从查看/sf/ask/1354840931/看来,您似乎可以处理长行。否则你总是可以
candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")
for candidate in $candidates[*]; do
mysqldump $candidate
done
Run Code Online (Sandbox Code Playgroud)
小智 10
我认为这是不可能的,但是您可以尝试这些解决方案,您必须键入要转储的所有数据库的名称。
mysqldump -u root -password --databases db1 db2 db3 ... db36 > mydb_dump.sql
Run Code Online (Sandbox Code Playgroud)
如果解决方案有帮助,请告诉我。
小智 8
从 MySQL 5.7.8 开始,您可以使用mysqlpump
(与 不同mysqldump
),如下所示:
mysqlpump --user=user --password --exclude-databases=db1,db2,db3,db4\xc2\xa0--result-file=partial_backup.sql\n
Run Code Online (Sandbox Code Playgroud)\n\n只需替换db1,db2,db3,db4
为您要排除的四个数据库即可。
来源:MySQL 服务器博客
\n小智 5
即使这里有这么多优秀的答案,所以这篇文章只是为了增加一个选择。通过脚本中的以下 2 行,您可以将服务器所有数据库的备份忽略一些数据库。
DB_LIST=`mysql -Nse "SELECT GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql','information_schema','performance_schema','sys');"`
mysqldump -R -B $DB_LIST > BACKUPNAME.sql
Run Code Online (Sandbox Code Playgroud)