Резервное копирование базы данных MySQL в S3

Внимание: статья находится в разработке.

Описание

В статье описаны основные этапы автоматического резервного копирования базы данных MySQL в S3.

Основные сведения

MySQL — популярная система управления базами данных с открытым исходным кодом, используемая в небольших и средних приложениях, а также в стеках WAMP, AppServ и LAMP. К серверу MySQL могут обращаться локальные и удалённые клиенты.

Если сайт или приложение хранит важные данные в MySQL, регулярно создавайте резервные копии, чтобы восстановить информацию после сбоя или другой нештатной ситуации.

В примере mysqldump выгружает базу данных, gzip сжимает файл, после чего архив отправляется в удалённое S3-хранилище. Запуск автоматизируется с помощью сценария и cron.

S3 удобно использовать для удалённого хранения копий MySQL в облачной инфраструктуре, поскольку IaaS-провайдеры часто предлагают отдельное S3-совместимое хранилище.

Процесс включает выгрузку каждой базы командой mysqldump, упаковку данных, создание сценария отправки в S3 и настройку задания cron.

Важно

Основные преимущества S3:
  • защита данных от сбоев, ошибок и других угроз;

  • поддержка версионирования;

  • передача по защищённому протоколу 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 по указанному расписанию. Периодически проверяйте журналы выполнения и тестируйте восстановление данных.