我使用 mysqldump 命令将所有数据库自动转储到文本文件,并将这个转储备份保存下来。我使用 --all-databases 选项来转储我的数据库,但它也会转储系统数据库(information_schema、phpmyadmin 等),而我并不需要它们。
有没有一种方法可以使用 mysqldump 命令转储所有数据库,而无需在命令行中显式命名它们(这样我就不必每次创建新数据库时修改备份脚本),但同时忽略所有系统数据库呢?
类似的方法,排除您不想备份的数据库:
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
以 root 用户身份登录,并在命令行中输入以下命令:
for DB in $(mysql -Bse 'show databases' | grep -v information_schema); do \
mysqldump $DB > "/$DB.sql"; \
done
#!/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