Всегда когда возникала необходимость делать резервные копии баз MySQL, приходилось заниматься долгой гуглежкой, из несколькоких предложеных решений собирать одно свое собственное.
Наконец я собрад наиболее приемлимый для себя вариант, позволяющий копировать одновременно несколько баз, с упаковкой в один архив.
Собственно код:
Bash
#!/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.