Назад | Перейти на главную страницу

Дамп базы данных MYSQL в отдельные файлы

У кого-нибудь есть один лайнер (командная строка), который будет сбрасывать все базы данных в отдельные файлы дампа, например.

forumdb.dump
wikidb.dump
etc.

Не думаю, что есть хороший однострочный текст, но вот фрагмент скрипта. Возможно, вы сможете адаптировать это к своему использованию. Если вы хотите жестко запрограммировать свой список баз данных, вы, вероятно, можете сделать его однострочным. Но мне нужно было что-то, что могло бы обрабатывать добавление и удаление базы данных.

OPTIONS="--verbose --lock-tables --flush-logs"

BACKUPDATE=`date +"%y%m%d%H"`

DBSQL="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA where SCHEMA_NAME!='information_schema' \
       AND SCHEMA_NAME!='performance_schema' order by SCHEMA_NAME"

# retrieve list of databases
DBS=`/usr/bin/mysql --defaults-extra-file=/etc/mysql/credentials.cnf --batch \
                                  --skip-column-names --execute "$DBSQL"`
# cleat it up a bit
DBS=`echo $DBS | tr -d '\n' | sed -e "s/ \+/ /g"`

# backup each database into a separate file
for DB in $DBS; do
  /usr/bin/mysqldump --defaults-extra-file=/etc/mysql/credentials.cnf ${OPTIONS} $DB > /backup_${DB}_${BACKUPDATE}
done

Почему бы и нет, хотя лайнер еще длинный :)

mkdir mysql-all-dumps ; for x in `mysql -u root -pXXXXXXXX -e "SHOW DATABASES;" | tr -d "| " | grep -vE '(Database|information_schema)'` ; do mysqldump -v -u root -pXXXXXXXXX $x > mysql-all-dumps/$x.sql ; done

Убедитесь, что вы заменили XXXX правильным паролем root mysql, а параметр verbose в mysqldump также является необязательным.

могу сделать это

cd mysql_data_dir ; for d in $(ls -d */ | xargs basename) ; do mysqldump $d > /path/to/dumps/$d.dump; done

В основном перечислите все каталоги в каталоге данных, а затем просто сбросьте их. Я сделал это в крайнем случае, если бы у меня не было заданий для резервного копирования отдельных файлов.