среда, 10 сентября 2008 г.

Создание бекапов баз данных и таблиц в MySQL.

Данный способ предназначен для создания бекапов нужных нам баз данных MySQL с сохранением данных о каждой таблице в отдельном файле.
Посмотрим код:

=========================================================
#!/bin/bash
DBS="some_db, some_db1, ..."
DUMP_OPTS="--add-drop-table --add-locks --disable-keys "
DB_USER="db_user"
DB_PASS="db_pass"

DATE=`date +%Y%m%d`
STAMP=`date +%Y%m%d%H%M`

[ ! -d $DATE ] && mkdir $DATE

for db in $DBS ; do
for i in `mysqlshow -u$DB_USER -p$DB_PASS $db | grep -v Tables | grep -v '-' | grep -v Database: | awk '{print $2}'`; do
echo Dumping table $db.$i
mysqldump $DUMP_OPTS -u$DB_USER -p$DB_PASS $db $i > $DATE/$db.$i.sql
done

echo Compressing data for $db database
tar -czpf $DATE/$db.backup.$STAMP.tar.gz $DATE/$db.*.sql
rm $DATE/$db.*.sql
done
============================================================

Рассмотрим переменные, которые можно изменить по своему вкусу.

DBS="some_db, some_db1, ..." #Перечислим базы данных, которые необходимо забекапить
DUMP_OPTS="--add-drop-table --add-locks --disable-keys " #Дополнительные опции для mysqldump
DB_USER="db_user" #Имя пользователя
DB_PASS="db_pass" #пароль


После выполнения скрипта, будет создана папка с текущей датой, в которую будет помещен архив с дампом базы, каждая таблица будет находиться в отдельном файле.
Очень удобно для восстановления не всей базы, а отдельных таблиц в MySQL.

Поместив скрипт в /etc/cron.daily можно выполнять ежедневный бекап баз данных MySql

Комментариев нет: