Резервное копирование БД MySQL в хранилище S3

Описание

Данная статья является общей и описывает основные шаги по

Базовая информация

MySQL является решением для малых и средних приложений. Входит в состав серверов WAMP, AppServ, LAMP. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты. Также MySQL одна из самых популярных систем управления базами данных с открытым исходным кодом для разработки интерактивных веб-сайтов.

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

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

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

Основным преимуществом использования резервного копирования S3 является защита от потери данных. Сначала нужно будет выполнить резервное копирование каждой базы данных с помощью команды «mysqldump», автоматизации задач резервного копирования с помощью «tar», настройки задания «cron» и создания сценария резервного копирования на S3.

Важно

Основные преимущества использования S3:
  • Данные доступны, когда они нужны, и защищены от сбоев, ошибок и угроз.
  • Хранилище S3 поддерживает возможности для контроля версий данных.
  • Данные передаются по защищенному протоколу https.
  • Имеет высокую «проходимость» в сети, может работать сквозь файрволлы так как идентифицируется как web-трафик.
  • Протокол S3 позволяет докачивать файлы в случае разрыва соединения.
  • Высокопроизводительный за счет мультипоточной загрузки данных.
  • Хранит данные в исходном формате.
  • Стоимость S3 намного дешевле, чем хранение на жестком диске SSD, и не требует обслуживания.
  • Большое количество доступных кроссплатформенных клиентов и плагинов.
  • С S3 вы платите только за хранилище, которое фактически используете.

Настройка резервного копирования MySQL в S3

Шаг 1. Установите S3cmd: Загрузите последнюю версию 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
В ходе настройки необходимо ввести два ключа:
  • Ключ доступа (Access key)
  • Секретный ключ (Secret key) - ваши идентификаторы в хранилище S3.

Внимание

«Access key» и «Secret key» чувствительны к регистру и должны быть введены
точно, иначе вы будете получать ошибки о недействительных подписях.

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

Шаг 2. Сценарий резервного копирования базы данных MySql в S3

Сценарий оболочки, используемый для резервного копирования вашей базы данных и загрузки ее на S3.

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

#Save dbbacku.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, чтобы запускать ее автоматически еженедельно. Для этого нужно отредактировать файл 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. Просто запланируйте и настройте скрипт на вашем сервере MySql, и все готово. Эта служба регулярно запускает процесс в соответствии с предварительно настроенным расписанием. Не стесняйтесь задавать любые вопросы, рад услышать от вас.