Debian Jessie: настройка бэкапа баз MySQL

Это заметка из цикла стетей моего небольшого HowTo по Debian Jessie.

Бэкапы и тормоза придумали трусы … это понятно. Непонятно только что делать когда железка померла или сайт похакали. Чтобы не попадать в такую непонятную и неприятную ситуацию — настроим автобэкап. Сразу скажу, что это только первый этап бэкапа, он делается на тот же хост где расположен mysql, следующим этапом будет настройка bacula — она заберет и файлы баз и директории с сайтами на удаленное хранилище … что обеспечит сохранность данных даже в случае поломки сервера.

У меня LVM, поэтому директорию для хранения бэкапов баз я решил расположить на отдельном LV.
Примерно прикиньте размер своих баз, учтите что храниться будет несколько бэкапов в заархивированном виде. В моем случае вполне хватит 2GB.
Создаем LV размером 2GB:

gw:~$ sudo lvcreate -L 2g -n lv_backup vgraid1
  Logical volume "lv_backup" created
gw:~$

Форматируем новый LV в ext4:

gw:~$ sudo mkfs.ext4 -L BACKUP /dev/mapper/vgraid1-lv_backup
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:~$

Создаем директорию для бэкапов:

gw:~$ sudo mkdir /backup

Для автомонтирования раздела при старте сервера прописываем в /etc/fstab

gw:~$ sudo vim /etc/fstab

Вот такую строчку:

/dev/mapper/vgraid1-lv_backup /backup ext4 noatime,nodiratime,nodev,nosuid,noexec 1 2

Монтируем новый раздел:

gw:~$ sudo mount -a

Создаем директорию на lv_backup для будущих бэкапов mysql баз:

gw:~$ sudo mkdir /backup/mysql

Не забываем что это бэкапы баз, там есть много разной инфы, в том числе и приватной, поэтому не забываем урезать права на директорию. Доступ только тем что имеет sudo:

gw:~$ sudo chmod 0700 /backup/mysql

Создаем директорию для админских скриптов:

gw:~$ sudo mkdir /root/scripts

Создаем скрипт который будет бекапить базы:

gw:~$ sudo vim /root/scripts/mysql_db_backup.sh

С вот таким содержимым (не забываем сменить BASES_FOR_BACKUP и mysql_root_passwd_here на свои значения):

#!/bin/bash
# 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 в скрипте:

find ${BACKUP_DIR} -ctime +15 -exec rm -f  '{}' \;

Это очистка архивов старше 15-ти дней. Если вам нужно больше/меньше — просто исправьте данную циферку на нужную.

Даем скрипту права на выполнение:

gw:~$ sudo chmod +x /root/scripts/mysql_db_backup.sh

Итак, на данный момент директория с бекапами пуста, проверим это:

gw:~$ sudo ls -l /backup/mysql/
total 0
gw:~$

Пробуем запустить скрипт (не делайте это если база в активном использовании, лучше это делать когда база в минимальной нагрузке):

gw:~$ sudo /root/scripts/mysql_db_backup.sh

В случае корректного выполнения никакого вывода скрипт не дает, только если есть ошибки. У меня отработал без ошибок, вот листинг директории /backup/mysql после выполнения скрипта:

gw:~$ sudo ls -l /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 ночи:

gw:~$ sudo crontab -e

Пишем вот следующее (не забывайте в конце оставлять пустую строку):

# m h  dom mon dow   command
0       3       *       *       *       /root/scripts/mysql_db_backup.sh

Завтра проверяйте содержимое директории /backup/mysql, там должны быть свежие бекапы …

Хай щастить!

  • Трэкбэки отключены
  • Комментов (0)
  1. Комментов пока нет

Why ask?