November 14, 2013

Запилил тут скрипт для бекапа

Как я уже говорил недавно я запилил в блокноте кучку схем по резервному копированию своих и рабочих проектов.

И вот в процессе реализации одной из них родился небольшой bash-скрипт который дампит все доступные БД (отдельный пользователь с read-only правами на все БД) и кладет в архив вместе с перечисленными каталогами исключая лишнее описанное в файле exclude, затем сортирует по ежедневным, еженедельным, ежемесячным резервным копиям и удаляет лишнее.

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

Под катом текст скрипта, а для любителей github ссылка на gist:

https://gist.github.com/rhamdeew/7438663

#!/bin/bash
USER="backuper" #MySQL user
PASSWORD="password" #MySQL password
DBTMP="/tmp/mysqldump/" #temporary dir for mysqldump
EXCLUDE_FILE="exclude.txt" #exclude files and dirs
TARGETDIR="/var/www/ /var/data/ /var/gitrepos/ /opt/nginx/ /etc/apache2/" #dirs to backup
BACKUPDIR="/var/backups/local/" #backup storage
DAYSOLD="3" #remove old backups
DAYSOLD_W="7" #remove old backups weekly
DAYSOLD_M="31" #remove old backups monthly
NAME="backup-full-" #name prefix of archive
DAYOFMONTH=$(date +%d)
DAYOFWEEK=$(date +%u)
rm -rf $DBTMP/*
mkdir -p $DBTMP
mkdir -p $BACKUPDIR/monthly/
mkdir $BACKUPDIR/weekly/
databases=`mysql --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
for db in $databases; do
if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] && [[ "$db" != "performance_schema" ]] ; then
echo "Dumping database: $db"
mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $DBTMP/`date +%Y-%m-%d`.$db.sql
fi
done

if [ $DAYOFMONTH -eq "1" ] ; then	#if new month begin
tar -zcf $BACKUPDIR/monthly/$NAME`date +%Y-%m-%d`.tar.gz -X $EXCLUDE_FILE $TARGETDIR $DBTMP
elif [ $DAYOFWEEK -eq "1" ] ; then	#else if new week begin
tar -zcf $BACKUPDIR/weekly/$NAME`date +%Y-%m-%d`.tar.gz -X $EXCLUDE_FILE $TARGETDIR $DBTMP
else
tar -zcf $BACKUPDIR/$NAME`date +%Y-%m-%d`.tar.gz -X $EXCLUDE_FILE $TARGETDIR $DBTMP
fi

find $BACKUPDIR -maxdepth 1 -type f -mtime +$DAYSOLD -name $NAME`date +%Y-%m`* -print0 | xargs -0 rm -f #rm daily
find $BACKUPDIR/weekly/ -maxdepth 1 -type f -mtime +$DAYSOLD_W -name $NAME`date +%Y-%m`* -print0 | xargs -0 rm -f #rm weekly
find $BACKUPDIR/monthly/ -maxdepth 1 -type f -mtime +$DAYSOLD_M -name $NAME`date +%Y-%m`* -print0 | xargs -0 rm -f #rm monthly

/usr/bin/lftp -f /root/backup.x #optional sync with remote server

chown -R user:user $BACKUPDIR #optional chown

Надеюсь что кому-нить пригодится. Удачи!

Другие проекты:

telegram-catalog.top

rhamdeew © 2020