5 лет назад

Бэкап MySQL баз данных с сохранением в DropBox


Встала задача сохранять бэкапы мускула в DropBox'e.

Сказано – сделано!

Быстрым гуглением нашёл shell скрипт, позволяющий загружать(и другие операции, в том числе удалять) файлы на DropBox.
Ссылка на проект с гитхаба - https://github.com/andreafabrizi/Dropbox-Uploader

Скачиваем проект и заливаем на сервер.
Я выбрал папку /home/cron/ для содержимого bash скриптов.
Предварительно создаём эту папку.

mkdir /home/cron/
wget https://github.com/andreafabrizi/Dropbox-Uploader/archive/master.zip --output-document=/home/cron/master.zip
Разархивируем архив и перенесём нужный нам файл dropbox_uploader.sh в нашу папку /home/cron/.
cd /home/cron
unzip master.zip
mv Dropbox-Uploader-master/dropbox_uploader.sh dropbox_uploader.sh
rm master.zip
rm -rf Dropbox-Uploader-master
Далее даём права на исполнение
chmod +x dropbox_uploader.sh
И запускаем скрипт
./dropbox_uploader.sh

В ответ получаем:

This is the first time you run this script.
 Please open this URL from your Browser, and access using your account:

 -> href="https://www2.dropbox.com/developers/apps

 If you haven't already done, click "Create an App" and fill in the
 form with the following data:

  App name: MyUploader285109611
  Description: What do you want...
  Access level: App folder or Full Dropbox

 Now, click on the "Create" button.

 When your new App is successfully created, please type the
 App Key, App Secret and the Access level:

 # App key: 
Далее согласно инструкции открываем адрес https://www2.dropbox.com/developers/apps в любимом браузере.

Создание приложения для DropBox


И нажимаем создать приложение.


Форма создания приложения на DropBox

Заполняем данные приложения. Название приложения должно быть уникальным в DropBox'e.
В выборе доступа (Access) можно выбрать только доступ к папке с приложением или доступ ко всем папкам аккаунта.
Нажимаем создать приложение и переходим на страницу с данными для авторизации.

Получение ключей приложения на DropBox

Теперь возвращаемся к нашему терминалу и заполняем данные:
  • App key
  • App secret
  • Отвечаем на вопрос какой доступ (access) есть у приложения (a – только к папке приложения, f – полный доступ к аккаунту)
  • Подтверждаем ведённые данные (y – всё верно)

 When your new App is successfully created, please type the
 App Key, App Secret and the Access level:

 # App key: be54w2ut98459vg
 # App secret: 6r22w8rgeum7jfi
 # Access level you have chosen, App folder or Full Dropbox [a/f]: a

 > App key is be54w2ut98459vg, App secret is 6r22w8rgeum7jfi and Access level is App Folder, it's ok? [y/n]y

 > Token request... OK

 Please visit this URL from your Browser, and allow Dropbox Uploader
 to access your DropBox account:

 --> https://www2.dropbox.com/1/oauth/authorize?oauth_token=uo5s2mb8knggpup

Press enter when done...
После ввода данных происходит получение токена и ссылки по которой нужно активировать доступ приложения к аккаунту.
Переходим по полученной ссылке https://www2.dropbox.com/1/oauth/authorize?oauth_token=uo5s2mb8knggpup

Подтверждение доступа к приложению на DropBox

Жмём разрешить (Allow).
Всё, теперь можно пользоваться созданным приложением.
На мыло, при этом приходит письмо.

Email от DropBox

Переходим в терминал и нажимаем Enter.

> Access Token request... OK

 Setup completed!
OK. Настройка завершена.
Попробуйте протестировать, например, запросив инфу из аккаунта

# ./dropbox_uploader.sh info
Dropbox Uploader v0.11.2

 > Getting info... 

Name:	DevPad.RU
UID:	147******
Email:	email@test.com
Quota:	3072 Mb
Used:	1198 Mb
Free:	1873 Mb
Ура, работает!

Теперь напишем скрипт для бэкапа MySQL баз данных. Я напишу скрипт бэкапа сразу 3 баз данных, чтобы и вы могли использовать его с лёгкостью!

backup.sh
#!/usr/local/bin/bash
DATE=`date "+%Y_%m_%d"`                           # текущая дата
LOGIN="root"  					  # рутовый логин MySQL
PASSWORD="((:123456789:))"                        # пароль к MySQL
DROPBOX_UPLOADER="/home/cron/dropbox_uploader.sh" # путь к скрипту DropBox аплоадера 
DROPBOX_PATH="/"                                  # корневая папка в которую сохранять в DropBox'e
SQL_PATH="/home/sql/backup/"                      # папка, куда сохранять MySQL бэкапы на сервере
MYSQLDUMP="mysqldump"                             # путь к программе MySQLDump

databases=(news blog partners)                    # базы данных через пробел

for database in "${databases[@]}"
do
    echo "MySQL backup database: ${database}"
    $MYSQLDUMP -q -u$LOGIN -p$PASSWORD $database > ${SQL_PATH}${database}_${DATE}.sql
    gzip -9 -c ${SQL_PATH}${database}_${DATE}.sql > ${SQL_PATH}${database}_${DATE}.sql.gz
    $DROPBOX_UPLOADER upload ${SQL_PATH}${database}_${DATE}.sql.gz ${DROPBOX_PATH}${database}/${DATE}.sql.gz
    rm ${SQL_PATH}${database}_${DATE}.sql.gz
done

# удаляем все бэкапы старше 10 дней
find ${SQL_PATH} -type f -mtime +10 -exec rm -f {} \;
# архивируем бэкапы полученные более 1 дня назад
find ${SQL_PATH} -type f -mtime +1 -exec gzip -9 {} \; 2>/dev/null
Обратите внимание, что у вас доступ к bash, описанный в первой строке (#!/usr/local/bin/bash), может отличаться.
Узнать точный адрес можно командой
# which bash
/usr/local/bin/bash
Попробуем запустить скрипт.

# /home/cron/backup.sh
MySQL backup database: news
 > Uploading /home/sql/backup/news_2012_11_30.sql.gz to /news/2012_11_30.sql.gz... 
######################################################################## 100.0%
 > DONE
MySQL backup database: blog
 > Uploading /home/sql/backup/blog_2012_11_30.sql.gz to /blog/2012_11_30.sql.gz... 
######################################################################## 100.0%
 > DONE
MySQL backup database: partners
 > Uploading /home/sql/backup/partners_2012_11_30.sql.gz to /partners/2012_11_30.sql.gz... 
######################################################################## 100.0%
 > DONE
Ура! Заработало!

Теперь создадим задание в кроне на бэкап раз в сутки.
# crontab -e

MAILTO="email@test.com"
0      03      *       *       *     /usr/local/bin/bash /home/cron/backup.sh

Мы установили создание бэкапа в 3 ночи. Путь к bash может отличаться.
Желательно сразу протестировать работу крон задания, т.к. возможно придётся вносить правки и использовать абсолютные пути.

Ну и народная мудрость напоследок:

Есть три категории людей: те которые ещё не делают бекапы, те кто уже делает бекапы и те кто проверяет сделанные бекапы
P.S.: все ключи и данные вводимые в примерах выдуманные. Не тратьте время на их пробу.
Регистрация в DropBox
Поделиться ссылкой:

comments powered by Disqus