Резервное копирование нескольких баз данных на Яндекс Диск

Admin Bash, VPS

Скрипт для резервного копирования сразу нескольких баз данных MySQL, на Яндекс Диск через протокол WebDAV.

Я уже рассказывал как сделать резервные копии MySQL с перемещением на Яндекс диск. Скрипт рабочий и можно им пользоваться.

А вот что делать, если сайтов много? Слишком заморочено для каждого сайта писать отдельный скрипт, добавлять его в CRON, вычислять время для задания, чтобы оно не пересекалось с другим процессом. Так что, когда количество сайтов превысило тот размер, когда я стал путаться, что и когда бекапится, пришлось сделать новый скрипт.

О том, как настроить WebDav имеется статья и повторяться не буду. В следующих шагах подразумевается, что ВебДав установлен и настроен.

В новом скрипте мы соединим функции создания MySQL и перемещения на Яндекс Диск. Копии будут хранится на нашем сервере и дублироваться на Яндекс Диск.

Создание папки для резервного копирования

Подключаемся к сайту по SSH.

Подключаем Яндекс Диск:

mount -t davfs https://webdav.yandex.ru /mnt/yandex/

Создаём там папки:

cd /mnt/yandex && sudo mkdir ploshadka.net
cd /mnt/yandex/ploshadka.net && sudo mkdir mysql

Отключаемся:

umount /mnt/yandex

Создание скрипта для резервного копирования

Создаём файл:

nano /home/scripts/bdbackup.sh

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

Содержимое файла:

#!/bin/sh
#
# Backup MySQL and copy to Yandex.Disk

##################
# Create backups
##################

# Host
HOST="localhost";

# MySQL user
USER="root";

# MySQL password
PASSWORD="";

# Databases to backup, seperate by space
DATABASES="db_name1 db_name_2";

# Backup storage folder
PATH="/home/admin/backup-MySQL";

# Backup function
backup ()
{
  # Date/Time format
  DATE=`/bin/date "+%Y-%m-%d_%H-%M"`;

    # Format the filename
    DUMP="$DATABASE-$DATE";

    # MySQL dump
    MYSQLDUMP="/usr/bin/mysqldump";

    # Create the MySQL dump and echo the result
    echo "$PATH/$DUMP.sql";
    $MYSQLDUMP --host $HOST --add-drop-table --user $USER --password=$PASSWORD $DATABASE >> "$PATH/$DUMP.sql";

    # Creating the compression
    cd $PATH;
    /usr/bin/gzip $DATABASE-$DATE.sql;

    # Remove the mysql dump (but still keep the compressed copy)
    /bin/rm -f $DUMP.sql;

    # Task complete
    cd;
}

# Function which backs up database one by one
for DATABASE in $DATABASES
do
    echo $DATABASE;
    backup;
done

##################
# Copy to Yandex
##################

# Mount Yandex.Disk
/bin/mount -t davfs https://webdav.yandex.ru /mnt/yandex/;

# Copy to Yandex.Disk
/bin/cp -r $PATH/* /mnt/yandex/backups/mysql;

##################
# Clean
##################

# Delete backup files older than 1 days on our server
/bin/find $PATH -type f -mtime +1 -exec /bin/rm {} \;

# Delete backup files older than 120 days on Yandex server
/bin/find $PATH -type f -mtime +120 -exec /bin/rm {} \;

# Unmount Yandex.Disk
/bin/umount /mnt/yandex;

exit;

Теперь на наш скрипт применяем специальные права, чтобы тот мог использоваться в CRON:

cd /home/scripts/  && chmod +x bdbackup.sh

При желании скрипт можно запускать и вручную:

sh /home/scripts/bdbackup.sh

Осталось добавить скрипт в планировщик задания. Читайте отдельно, как добавить задание в CRON.

English Query (запросы по теме на английском языке)

How to Create Several Mysql Backup

MySQL Multiple Databases Backup

How to Back Up MySQL Databases From SH cript

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Резервное копирование нескольких баз данных на Яндекс Диск"