Меню Закрыть

Резервное копирование баз MySQL Ubuntu 18.04

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

Наконец я собрад наиболее приемлимый для себя вариант, позволяющий копировать одновременно несколько баз, с упаковкой в один архив.

Собственно код:

#!/bin/sh -e
 
BACKUPDIR='/mnt/backupstor/mysql'
BACKUPCOUNT=7
 
# Kodi SQL backup
NOW=$(date "+%Y-%m-%d %H:%M:%S"); echo $NOW 'Kodi database backup started'
mysqldump -i -uroot MyMusic72 > $BACKUPDIR/kodi-music.sql
mysqldump -i -uroot MyVideos116 > $BACKUPDIR/kodi-video.sql
NOW=$(date "+%Y-%m-%d %H:%M:%S"); echo $NOW 'Kodi database backup ended'
 
# Web SQL backup
NOW=$(date "+%Y-%m-%d %H:%M:%S"); echo $NOW 'Web database backup started'
mysqldump -i -uroot kosmuxa_ru > $BACKUPDIR/site.sql
mysqldump -i -uroot cloud_kosmuxa_ru > $BACKUPDIR/cloud.sql
NOW=$(date "+%Y-%m-%d %H:%M:%S"); echo $NOW 'Web database backup ended'
 
# Archiving dumps
NOW=$(date "+%Y-%m-%d %H:%M:%S"); echo $NOW 'Archiving dupms...'
gzip -c $BACKUPDIR/*.sql > $BACKUPDIR/backup-`date "+%Y-%m-%d"`.gz
 
COUNT=`ls -l $BACKUPDIR | grep .sql | wc | awk '{print $1}'`
if [ $COUNT -gt $BACKUPCOUNT ]; then
    NOW=$(date "+%Y-%m-%d %H:%M:%S"); echo $NOW 'Archives rotated'
    find $BACKUPDIR -type f -mtime +$BACKUPCOUNT -print0 | xargs -0 rm -f
fi
 
rm -f $BACKUPDIR/*.sql
exit 0

Скрипт реальный и действующий. Итак, по строкам:

  • первые две строчки - настройки нашего скрипта, в переменных задаем каталог куда буду сохраняться резервные копии и количество хранимых копий;
  • все строки с echo нужны для логгирования скрипта;
  • строки начинающиес с mysqldump - собственно процесс копирования базы данных в скрипт sql;
  • далее с помощью gzip сжимаем наши скрипты в один архив с датой в имени;
  • в условии проверяем, что мы достигли хранимого количества архивов и устаревшие удаляем;
  • и, напоследок, удаляем нежатые скрипты sql;

Вот и все думаю получился лаконичный и масштабируемый скрипт, осталось его поставить в cron от root.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *