Автоматизация созданий копий баз данных

Как гласит народная мудрость, все администраторы делятся на тех, кто делает резервные копии данных и на тех, кто уже делает. Такая необходимость возникает часто и лучше этот процесс автоматизировать.

Небольшое вступление

Причины, по которым могут понадобиться копии, могут быть различными – сбой по питанию, ваша собственная ошибка, взлом сервера и т. д. И чаще всего этим вопросом начинают заниматься после того, как что-то случилось.

Подавляющее большинство серверов работают под Linux, а эта система предоставляет нам не только возможности сервера баз данных, но и хороший язык скриптов bash, а также планировщик задач crontab. Вот их и будем использовать.

Сразу замечание – писалось это для себя, главным был результат, а не демонстрация знания языка скриптов, поэтому некоторые моменты там не оптимизированы, в частности, можно при желании добавить настройку количества резервных копий для создания. Но это сделаете без меня. Ещё один момент – хранить пароль доступа в скрипте в открытом виде небезопасно, но для автоматизации процесса нам как раз нужно избавиться от постоянного ввода пароля. Поэтому размещайте скрипт в каталоге, недоступном для посторонних.

Договоримся, что резервные копии будут иметь имена вида «backup1.sql.gz», «backup2.sql.gz» и т. д., при этом самая свежая будет иметь номер 1. Соответственно, при создании новых копий старые придётся переименовывать. Да, программисты обычно нумеруют с нуля, но это число нам ещё понадобится.

Код для запуска

Для начала нам нужно создать копию, а старые переименовывать и удалять последнюю можно только после того, как мы убедимся, что копия создана, так как иначе можно остаться не только без данных, но и без копий. И именно для этой цели нам понадобится номер 0 – нулевой будет только что созданная копия, которую переименуем в первую сразу после проверки существования файла и переименования старых копий. Код простой (параметры измените на свои):

#!/bin/sh

DB_HOST="localhost"
DB_USER="root"
DB_PASS="password"
DB_NAME="database"
BACKUP_DIR="/var/backups"

cd ${BACKUP_DIR}

mysqldump -h ${DB_HOST} -u ${DB_USER} --password=${DB_PASS} ${DB_NAME} | gzip -9 > backup0.sql.gz

if [ -f "backup0.sql.gz" ]; then

        rm -f backup3.sql.gz
        if [ -f "backup2.sql.gz" ]; then
                mv -f backup2.sql.gz backup3.sql.gz
        fi
        if [ -f "backup1.sql.gz" ]; then
                mv -f backup1.sql.gz backup2.sql.gz
        fi

        mv -f backup0.sql.gz backup1.sql.gz
fi

После создания файла называем его так, как вам удобно (у меня это dbbackup.sh), после чего даём ему права на выполнение:

chmod +x dbbackup.sh

Также нужно заранее создать каталог, куда будут складываться резервные копии данных.

Для проверки работы этого скрипта переходим в место его размещения и запускаем:

./dbbackup.sh

После этого переходим в место хранения резервных копий и смотрим на результат.

Для автоматического запуска надо добавить задачу в планировщик, вызываем его:

crontab -e

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

0 3 * * 1,3,5 /path/to/script/dbbackup.sh

Это обеспечит запуск скрипта в понедельник, среду и пятницу в 3 часа ночи по времени сервера. Сохраняем список задач и выходим.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *