Бекап базы данных на амазон S3

В связи с наличием всякими плагинами для бекапов за 20 баксов напишу заметку как я реализовал через mysqldump у себя бекап базы данных на амазон S3. Используя скрипт от woxxy. По сути перевод гайда github.com/woxxy/MySQL-backup-to-Amazon-S3.
]1) Регистрируемся на амазоне. Подключаем s3, создаем в нем раздел привязываем свой Access Key

2) устанавливаем систему для работы unix систем с амазоном s3cmd

Для деба/убунты это выглядит так:
wget -O- -q http://s3tools.org/repo/deb-all/stable/s3tools.key | sudo apt-key add -
sudo wget -O/etc/apt/sources.list.d/s3tools.list http://s3tools.org/repo/deb-all/stable/s3tools.list
sudo apt-get update && sudo apt-get install s3cmd


3) конфигурируем свой s3cmd:

s3cmd --configure


Вам надо ввести:

Access Key: ключ
  Secret Key: секретный ключ
  Encryption password: пароль хеширования
  Use HTTPS protocol: True использовать HTTPS или HTTP если вы за прокси
  Настройки прокси если выбрали HTTP
  HTTP Proxy server name: 
  HTTP Proxy server port: 0


Создать корзину амазоне:
s3cmd mb s3://my-database-backups


Создаем файл mysqltos3.sh на диске например в
/home/youruser


Присваиваем ему 755 права:
chown 755 /home/youruser/mysqltos3.sh


Вставляем туда содержимое:

#!/bin/sh

# Updates etc at: https://github.com/woxxy/MySQL-backup-to-Amazon-S3
# Under a MIT license

# change these variables to what you need
MYSQLROOT=логин для рута
MYSQLPASS=пароль
S3BUCKET=ваша корзина
# when running via cron, the PATHs MIGHT be different. If you have a custom/manual MYSQL install, you should set this manually like MYSQLDUMPPATH=/usr/local/mysql/bin/
MYSQLDUMPPATH=

PERIOD=${1-day}

echo "Selected period: $PERIOD."

echo "Starting backing up the database to a file..."

# dump all databases
${MYSQLDUMPPATH}mysqldump --quick --user=${MYSQLROOT} --password=${MYSQLPASS} --all-databases > ~/all-databases.sql

echo "Done backing up the database to a file."
echo "Starting compression..."

tar czf ~/all-databases.tar.gz ~/all-databases.sql

echo "Done compressing the backup file."

# we want at least two backups, two months, two weeks, and two days
echo "Removing old backup (2 ${PERIOD}s ago)..."
s3cmd del --recursive s3://${S3BUCKET}/previous_${PERIOD}/
echo "Old backup removed."

echo "Moving the backup from past $PERIOD to another folder..."
s3cmd mv --recursive s3://${S3BUCKET}/${PERIOD}/ s3://${S3BUCKET}/previous_${PERIOD}/
echo "Past backup moved."

# upload all databases
echo "Uploading the new backup..."
s3cmd put -f ~/all-databases.tar.gz s3://${S3BUCKET}/${PERIOD}/
echo "New backup uploaded."

echo "Removing the cache files..."
# remove databases dump
rm ~/all-databases.sql
rm ~/all-databases.tar.gz
echo "Files removed."
echo "All done."


Запускаем и проверяем вручную:
#set a new daily backup, and store the previous day as "previous_day"
sh /home/youruser/mysqltos3.sh

#set a new weekly backup, and store previous week as "previous_week"
/home/youruser/mysqltos3.sh week

#set a new weekly backup, and store previous month as "previous_month"
/home/youruser/mysqltos3.sh month


И добавляем в крон.
crontab -e


# daily MySQL backup to S3 (not on first day of month or sundays)
0 3 2-31 * 1-6 sh /home/youruser/mysqltos3.sh day
# weekly MySQL backup to S3 (on sundays, but not the first day of the month)
0 3 2-31 * 0 sh /home/youruser/mysqltos3.sh week
# monthly MySQL backup to S3
0 3 1 * * sh /home/youruser/mysqltos3.sh month


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

Сам сайт я бекапить не стал ибо у меня там кроме конфига ничего не меняться не будет. А его я настрою и сохраню один раз. Весь мультимедиа контент и так планирую вынести на s3, так что смысла это делать нет. Но по идее можно этот скрипт допилить чтобы он сохранял или папку с сайтом или отдельные папки в нем.

Вот собственно и все.">

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.