有没有办法转储除系统数据库以外的所有mysql数据库?

时间:2010-05-05 12:39:08

标签: mysql backup dump

我使用mysqldump自动将所有数据库转储到文本文件,并将此转储保存为备份。我使用--all-databases选项转储我的数据库,但它也转储我不需要的系统数据库(information_schema,phpmyadmin等)。

有没有办法使用mysqldump转储我的所有数据库而不在命令行上显式命名它们(这样我每次创建新数据库时都不必修改备份脚本),但忽略所有系统数据库?

3 个答案:

答案 0 :(得分:3)

您可以像这样编写一个bash脚本。它在转储之前检查数据库的名称。

#!/bin/sh
DATABASES="$(/lighttpd/local/bin/mysql --user=user --password=pass -Bse 'show databases')"

for db in ${DATABASES[@]}
do
if [ $db == "information_schema" ]
then
continue
fi
echo ${db}-$(date +%m-%d-%y).sql.bz2 is being saved in /backup/mysql
mysqldump --user=user --password=pass $db --single-transaction -R | bzip2 -c > ${db}-$(date +%m-%d-%y).sql.bz2
done

答案 1 :(得分:1)

root 用户身份输入并输入命令行

for DB in $(mysql -Bse 'show databases' | grep -v information_schema); do \
   mysqldump $DB > "/$DB.sql"; \
done

答案 2 :(得分:0)

一种类似的方法,不包括您不想备份的数据库:

user=''
pass=''
# Use a | as a separator
exclude_dbs='information_schema|mysql|performance_schema'

mysqldump -u "$user" -p"$pass" --databases $(mysql -u $user -p$pass -rs -e 'SHOW DATABASES;' | tail -n+1 | grep -v -E '^('$exclude_dbs')$' | tr '\n' ' ') > databases.sql