5

mysqldump を使用して、すべてのデータベースを自動的にテキスト ファイルにダンプし、このダンプをバックアップとして保存します。データベースをダンプする --all-databases オプションを使用していますが、必要のないシステム データベース (information_schema、phpmyadmin など) もダンプします。

コマンドラインで明示的に名前を付けずに (新しいデータベースを作成するたびにバックアップスクリプトを変更する必要がないように) mysqldump を使用してすべてのデータベースをダンプし、すべてのシステムデータベースを無視する方法はありますか?

4

3 に答える 3

3

バックアップしたくないデータベースを除く、同様のアプローチ:

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
于 2019-02-08T15:49:35.873 に答える
2

このような 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
于 2010-05-05T12:58:38.720 に答える
1

rootユーザーとして入力し、コマンドラインに入力します

for DB in $(mysql -Bse 'show databases' | grep -v information_schema); do \
   mysqldump $DB > "/$DB.sql"; \
done
于 2021-03-20T19:32:21.683 に答える