Есть ли способ сбросить все базы данных MySQL, кроме системных баз данных? - PullRequest
3 голосов
/ 05 мая 2010

Я использую mysqldump, чтобы автоматически выгружать все свои базы данных в текстовый файл и сохранять этот дамп в качестве резервной копии. Я использую опцию --all-database, которая выводит мои базы данных, но также и системные базы данных (information_schema, phpmyadmin и т. Д.), Которые мне не нужны.

Есть ли способ вывести все мои базы данных с помощью mysqldump, не называя их явно в командной строке (чтобы мне не приходилось изменять скрипт резервного копирования каждый раз, когда я создаю новую базу данных), но игнорировать все системные базы данных

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

Вы можете написать скрипт 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
0 голосов
/ 08 февраля 2019

Аналогичный подход, исключая базы данных, которые вы не хотите резервировать:

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
...