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

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

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Бэкап баз данных MySQL с сохранением в Dropbox аккаунт.
Shell скрипт позволяет загружать, удалять и выполнять другие операции на Dropbox.

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

1
2
mkdir /home/scripts/
wget https://github.com/RomanBogachev/Dropbox-Uploader/archive/master.zip --output-document=/home/scripts/master.zip

Распакуем архив и перенесём нужный нам файл dropbox_uploader.sh в нашу папку /home/scripts/

1
2
3
4
5
cd /home/scripts
unzip master.zip
mv Dropbox-Uploader-master/dropbox_uploader.sh dropbox_uploader.sh
rm master.zip
rm -rf Dropbox-Uploader-master

Далее даём права на исполнение

1
chmod +x dropbox_uploader.sh

И запускаем скрипт

1
./dropbox_uploader.sh

Вывод будет следующим и будет содержать в себе инструкцию по установке и настройке скрипта

1
2
3
4
5
6
7
8
9
10
11
12
13
14
This is the first time you run this script.

1) Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps
2) Click on "Create App", then select "Dropbox API app"
3) Select "Files and datastores"
4) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder
5) Enter the "App Name" that you prefer (e.g. MyUploader534303020128)

Now, click on the "Create App" button.

When your new App is successfully created, please type the
App Key, App Secret and the Permission type shown in the confirmation page:

# App key:

Переходим по указанному адресу, как сказано в инструкции https://www.dropbox.com/developers/apps

dropbox mysql

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

dropbox mysql

Теперь возвращаемся к нашему терминалу и заполняем данные:

  • App key
  • App secret
  • Отвечаем на вопрос какой доступ есть у приложения (a – только к папке приложения, f – полный доступ к аккаунту)
  • Подтверждаем ведённые данные (y – всё верно)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
When your new App is successfully created, please type the
App Key, App Secret and the Permission type shown in the confirmation page:

# App key: 6a50dfsoytmisen
# App secret: s98jtaxdbemyx98
# Permission type, App folder or Full Dropbox [a/f]: a

> App key is 6a50dfsoytmisen, App secret is s98jtaxdbemyx98 and Access level is App Folder. Looks ok? [y/n]: y

> Token request... OK

Please open the following URL in your browser, and allow Dropbox Uploader
to access your DropBox folder:

--> https://www.dropbox.com/1/oauth/authorize?oauth_token=1IYwxjTbCQtc2GYO

Press enter when done...

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

image

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

1
2
3
> Access Token request... OK

Setup completed!

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

db_backup.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh
DATE=`date "+%Y_%m_%d_%H-%M-%S"` # текущая дата
LOGIN="root" # рутовый логин MySQL
PASSWORD="((:123456789:))" # пароль к MySQL
DROPBOX_UPLOADER="/home/scripts/dropbox_uploader.sh" # путь к скрипту DropBox аплоадера
DROPBOX_PATH="/" # корневая папка в которую сохранять в Dropbox'e
SQL_PATH="/home/database_backup/" # папка, куда сохранять MySQL бэкапы на сервере
MYSQLDUMP="mysqldump" # путь к программе MySQLDump

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

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, может отличаться.
Узнать точный адрес можно командой

1
2
# which bash
/usr/local/bin/bash

Попробуем запустить скрипт

1
2
3
4
5
6
7
8
9
10
11
12
13
# /home/scripts/db_backup.sh
MySQL backup database: news
> Uploading /home/database_backup/news_2014_11_06.sql.gz to /news/2014_11_06.sql.gz...
######################################################################## 100.0%
> DONE
MySQL backup database: blog
> Uploading /home/database_backup/blog_2014_11_06.sql.gz to /blog/2014_11_06.sql.gz...
######################################################################## 100.0%
> DONE
MySQL backup database: partners
> Uploading /home/database_backup/hosting_2014_11_06.sql.gz to /partners/2014_11_06.sql.gz...
######################################################################## 100.0%
> DONE

Создаем задание в cron

crontab -e

1
2
MAILTO=email@test.com
0 03 * * * /usr/local/bin/bash /home/scripts/db_backup.sh

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

Бэкап файлов сервера в Dropbox

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
TMP_DIR="/tmp/"
DATE=$(date +"%d-%m-%Y_%H%M")
BKP_FILE="$TMP_DIR/MyBkp_$DATE.tar"
BKP_DIRS="/home/user /var/www /etc"
DROPBOX_UPLOADER=/path/to/dropbox_uploader.sh
tar cf "$BKP_FILE" $BKP_DIRS
gzip "$BKP_FILE"
$DROPBOX_UPLOADER -f /root/.dropbox_uploader upload "$BKP_FILE.gz" /
rm -fr "$BKP_FILE.gz"
On this page