Как гласит народная мудрость, все администраторы делятся на тех, кто делает резервные копии данных и на тех, кто уже делает. Такая необходимость возникает часто и лучше этот процесс автоматизировать.
Небольшое вступление
Причины, по которым могут понадобиться копии, могут быть различными – сбой по питанию, ваша собственная ошибка, взлом сервера и т. д. И чаще всего этим вопросом начинают заниматься после того, как что-то случилось.
Подавляющее большинство серверов работают под 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 часа ночи по времени сервера. Сохраняем список задач и выходим.
И главное, не забудьте периодически сохранять резервные копии в другом месте.
Комментарии: