Резервное копирование базы данных MySQL в S3
Внимание: статья находится в разработке.
Описание
В статье описаны основные этапы автоматического резервного копирования базы данных MySQL в S3.
Основные сведения
MySQL — популярная система управления базами данных с открытым исходным кодом, используемая в небольших и средних приложениях, а также в стеках WAMP, AppServ и LAMP. К серверу MySQL могут обращаться локальные и удалённые клиенты.
Если сайт или приложение хранит важные данные в MySQL, регулярно создавайте резервные копии, чтобы восстановить информацию после сбоя или другой нештатной ситуации.
В примере mysqldump выгружает базу данных, gzip сжимает файл, после чего
архив отправляется в удалённое S3-хранилище. Запуск автоматизируется с помощью
сценария и cron.
S3 удобно использовать для удалённого хранения копий MySQL в облачной инфраструктуре, поскольку IaaS-провайдеры часто предлагают отдельное S3-совместимое хранилище.
Процесс включает выгрузку каждой базы командой mysqldump, упаковку данных,
создание сценария отправки в S3 и настройку задания cron.
Важно
защита данных от сбоев, ошибок и других угроз;
поддержка версионирования;
передача по защищённому протоколу HTTPS;
работа через межсетевые экраны как веб-трафик;
возобновление передачи после разрыва соединения;
многопоточная загрузка;
хранение данных в исходном формате;
меньшая стоимость по сравнению с SSD и отсутствие обслуживания;
множество кроссплатформенных клиентов и плагинов;
оплата только используемого объёма.
Настройка резервного копирования MySQL в S3
Шаг 1. Установите S3cmd
Скачайте актуальную версию с https://sourceforge.net/projects/s3tools/?source=typ_redirect.
sudo apt-get -y install python-setuptools
wget http://netix.dl.sourceforge.net/project/s3tools/s3cmd/1.6.0/s3cmd-1.6.0.tar.gz
tar xvfz s3cmd-1.6.0.tar.gz
cd s3cmd-1.6.0
sudo python setup.py install
Во время настройки укажите идентификаторы S3-хранилища:
Access Key;
Secret Key.
Внимание
Access Key и Secret Key чувствительны к регистру. Ошибка в значении приведёт к сообщению о недействительной подписи.
Дополнительные параметры при необходимости измените вручную в конфигурационном файле S3cmd.
Шаг 2. Создайте сценарий резервного копирования MySQL в S3
Следующий shell-сценарий получает параметры из переменных, выгружает базу
mysqldump во временный сжатый файл и отправляет его в S3:
# Save dbbackup.sh
#!/bin/bash
## Specify the name of the database that you want to backup
# Database credentials
USER="DB-USER"
PASSWORD="PASSWORD"
HOST="DB-host-name"
DB_NAME="Database-name"
#Backup_Directory_Locations
BACKUPROOT="/tmp/backups"
TSTAMP=$(date +"%d-%b-%Y-%H-%M-%S")
S3BUCKET="s3://s3bucket"
#LOG_ROOT="logs/dump.log"
#mysqldump -h <HOST> -u <USER> --database <DB_NAME> -p"password" > $BACKUPROOT/$DB_NAME-$TSTAMP.sql
#or
mysqldump -h$HOST -u$USER $DB_NAME -p$PASSWORD | gzip -9 > $BACKUPROOT/$DB_NAME-$TSTAMP.sql.gz
if [ $? -ne 0 ]
then
mkdir /tmp/$TSTAMP
s3cmd put -r /tmp/$TSTAMP $S3BUCKET/
s3cmd sync -r $BACKUPROOT/ $S3BUCKET/$TSTAMP/
rm -rf $BACKUPROOT/*
else
s3cmd sync -r $BACKUPROOT/ $S3BUCKET/$TSTAMP/
rm -rf $BACKUPROOT/*
fi
Шаг 3. Проверьте сценарий
# chmod +x dbbackup.sh
# Run the script to make sure it's all good
# bash dbbackup.sh
Шаг 4. Настройте запуск по расписанию
Если сценарий находится в /opt/scripts, добавьте в crontab еженедельное задание:
#vim /etc/crontab
#Add the following lines:
#Run the database backup script on every week at 12.00
0 0 * * 0 bash /opt/scripts/mysqlbackupS3.sh to >/dev/null 2>&1
Заключение
После настройки сценарий будет регулярно создавать резервную копию MySQL и отправлять её непосредственно в S3 по указанному расписанию. Периодически проверяйте журналы выполнения и тестируйте восстановление данных.