Резервное копирование mysql

Резервное копирование mysqlИтак, нет в мире важнее предмета чем информация. И очень тяжело бывает восстановить ее в случае потери. А так как большое количество информации хранится в базах данных, сейчас расскажу о том, как их можно бэкапить!

1. Предисловие
Так как опасностей которые предостерегают информацию очень много (ошибка человека, выход из строя накопителя…), я давно обзавелся дополнительным жестким диском, который я использую только для бэкапов. Для бэкапов баз данных я решил использовать такую схему:
1) Примонтирование бэкапного жесткого диска
2) Получение списка баз данных mysql
3) Циклический дамп баз данных во временную директорию
4) Архивирование директории с дампами баз
5) Удаление временной директории
6) Отмонтирование бэкапного раздела

2. Скрипт

#!/bin/bash
#выводим текущюю дату и время
date
#указываем бэкапный раздел
DEVICE=/dev/sdc1
#указываем точку монтирования бэкапного раздела
MOUNTPOINT=/mnt/backup
#указываем название временной директории
date=`date +"%Y%m%d"`
DIR=$MOUNTPOINT/dbs_$date
#монтируем бэкапный раздел
echo «Mounting backup device»
mount $DEVICE $MOUNTPOINT
echo «Dumping MySQL databases»
mkdir $DIR
#получаем список баз данных
for i in `mysql -uroot -ppassword -e «show databases» | grep -v information_schema | grep -v Database`
do
#дампим каждую базу в файл во временной директории
mysqldump -uroot -ppassword $i > $DIR/$i.sql
done
#архивируем директорию с дампами
echo «Gzipping databases dumps»
tar czvf $DIR.tar.gz $DIR
#удаляем временную директорию
echo «Removing tmp db dumps»
rm -r $DIR
#отмонтируем бэкапный раздел
echo «Backup finished!»
umount $MOUNTPOINT
date

3. Восстановление
В результате работы скрипта на бэкапном разделе мы будем иметь файлы с видом dbs_20081203.tar.gz. Чтобы восстановить базы надо разархивировать их дампы:

tar zxvf dbs_20081203.tar.gz

и заинсертить эти дампы в базу

mysql -uroot -ppassword db_name < dbs_20081203/db_name.sql

4. Автоматизация
Ну и какой же это бэкап если его надо делать руками =). Добавляем этот скрипт на автоматическое выполнение каждый понедельник в 01:01 в /etc/crontab:

1 1 * * 1 root /bin/bash /root/backuper.sh

Запись навигация

Top