Debian Jessie: настройка бэкапа баз MySQL
Это заметка из цикла стетей моего небольшого HowTo по Debian Jessie.
Бэкапы и тормоза придумали трусы … это понятно. Непонятно только что делать когда железка померла или сайт похакали. Чтобы не попадать в такую непонятную и неприятную ситуацию — настроим автобэкап. Сразу скажу, что это только первый этап бэкапа, он делается на тот же хост где расположен mysql, следующим этапом будет настройка bacula — она заберет и файлы баз и директории с сайтами на удаленное хранилище … что обеспечит сохранность данных даже в случае поломки сервера.
У меня LVM, поэтому директорию для хранения бэкапов баз я решил расположить на отдельном LV.
Примерно прикиньте размер своих баз, учтите что храниться будет несколько бэкапов в заархивированном виде. В моем случае вполне хватит 2GB.
Создаем LV размером 2GB:
Logical volume "lv_backup" created
gw:~$
Форматируем новый LV в ext4:
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: b75fc3b1-4089-445b-8077-0840ad049348
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
gw:~$
Создаем директорию для бэкапов:
Для автомонтирования раздела при старте сервера прописываем в /etc/fstab
Вот такую строчку:
Монтируем новый раздел:
Создаем директорию на lv_backup для будущих бэкапов mysql баз:
Не забываем что это бэкапы баз, там есть много разной инфы, в том числе и приватной, поэтому не забываем урезать права на директорию. Доступ только тем что имеет sudo:
Создаем директорию для админских скриптов:
Создаем скрипт который будет бекапить базы:
С вот таким содержимым (не забываем сменить BASES_FOR_BACKUP и mysql_root_passwd_here на свои значения):
# Script for BackUP MySQL bases
# Wrote at night 12.07.2010
# By Black_13
DATE=`date +%F`
BACKUP_DIR="/backup/mysql"
BASES_FOR_BACKUP="wordpress drupal6 evedb bmwdb"
# <Clean Old Archives> #
find ${BACKUP_DIR} -ctime +15 -exec rm -f '{}' \;
cd ${BACKUP_DIR}
for DATABASE in ${BASES_FOR_BACKUP}
do
mysqldump --user='root' --password='mysql_root_passwd_here' ${DATABASE} > ${DATABASE}-${DATE}.sql
bzip2 -9 ${DATABASE}-${DATE}.sql
done
Также обратите внимание на команду find в скрипте:
Это очистка архивов старше 15-ти дней. Если вам нужно больше/меньше — просто исправьте данную циферку на нужную.
Даем скрипту права на выполнение:
Итак, на данный момент директория с бекапами пуста, проверим это:
total 0
gw:~$
Пробуем запустить скрипт (не делайте это если база в активном использовании, лучше это делать когда база в минимальной нагрузке):
В случае корректного выполнения никакого вывода скрипт не дает, только если есть ошибки. У меня отработал без ошибок, вот листинг директории /backup/mysql после выполнения скрипта:
total 1324
-rw-r--r-- 1 root root 1257639 Oct 14 10:37 wordpress-2015-10-14.sql.bz2
-rw-r--r-- 1 root root 92233 Oct 14 10:38 evedb-2015-10-14.sql.bz2
...
gw:~$
Теперь добавим скрипт бэкапа в root-овый crontab чтобы он выполнялся автоматически каждый день в 03:00 ночи:
Пишем вот следующее (не забывайте в конце оставлять пустую строку):
0 3 * * * /root/scripts/mysql_db_backup.sh
Завтра проверяйте содержимое директории /backup/mysql, там должны быть свежие бекапы …
Хай щастить!
Комментов пока нет