Скрипт для резервного копирования сразу нескольких баз данных MySQL, на Яндекс Диск через протокол WebDAV.
Я уже рассказывал как сделать резервные копии MySQL с перемещением на Яндекс диск. Скрипт рабочий и можно им пользоваться.
А вот что делать, если сайтов много? Слишком заморочено для каждого сайта писать отдельный скрипт, добавлять его в CRON, вычислять время для задания, чтобы оно не пересекалось с другим процессом. Так что, когда количество сайтов превысило тот размер, когда я стал путаться, что и когда бекапится, пришлось сделать новый скрипт.
О том, как настроить WebDav имеется статья и повторяться не буду. В следующих шагах подразумевается, что ВебДав установлен и настроен.
В новом скрипте мы соединим функции создания MySQL и перемещения на Яндекс Диск. Копии будут хранится на нашем сервере и дублироваться на Яндекс Диск.
Создание папки для резервного копирования
Подключаемся к сайту по SSH.
Подключаем Яндекс Диск:
Создаём там папки:
cd /mnt/yandex/ploshadka.net && sudo mkdir mysql
Отключаемся:
Создание скрипта для резервного копирования
Создаём файл:
Комментарии в скрипте приведены на английском языке, но должно быть всё понятно. Если вдруг чего не ясно, спрашивайте в комментариях.
Содержимое файла:
#
# 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:
При желании скрипт можно запускать и вручную:
Осталось добавить скрипт в планировщик задания. Читайте отдельно, как добавить задание в CRON.