Bash-скрипт для инкрементального бекапа
Написал небольшой bash-скрипт для бекапа.
Возможности:
- создание бекапа всех директорий в /home/, упаковка каждой в отдельный архив
- создание бекапа баз данных mysql, каждая кладется в отдельный файл
- по понедельникам делается полный бекап файлов, в остальные дни инкрементальный
- бекап баз данных происходит каждый раз и полностью
- все бекапы красиво складываются по директориям
- после окончания работы директория с бекапами синхронизируются с другим хостом с помощью rsync
#/bin/bash #author: Denis Oleshkevich YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` DAYN=`date +%u` WEEK=`date +%W` BACKUP_SITES='/backup/sites/' BACKUP_MYSQL='/backup/mysql/' MYSQL_USER='root' MYSQL_PASS='password' BACKUP_SITES_DIR_TMP=$BACKUP_SITES$YEAR"_"$WEEK"/" BACKUP_SITES_FULL=$BACKUP_SITES_DIR_TMP"00_full/" BACKUP_SITES_INC=$BACKUP_SITES_DIR_TMP$MONTH"_"$DAY"/" echo "start backuping..." date echo "start backup sites" if [ $DAYN == "1" ]; then test -d "$BACKUP_SITES_FULL" || mkdir -p "$BACKUP_SITES_FULL" else test -d "$BACKUP_SITES_INC" || mkdir -p "$BACKUP_SITES_INC" fi for site in `ls /home/ -1` do echo $site; cd "/home/"$site if [ $DAYN == "1" ] then tar -czf $BACKUP_SITES_FULL$site".tgz" . else find ./ -mtime -1 -type f -print | tar -czf $BACKUP_SITES_INC$site".tgz" -T - fi done date echo "start mysql databases backup" MYSQL_DIR=$BACKUP_MYSQL$YEAR"_"$MONTH"/"$YEAR"_"$MONTH"_"$DAY"/"; test -d "$MYSQL_DIR" || mkdir -p "$MYSQL_DIR" echo $MYSQL_DIR for db in `echo "show databases;" | mysql -u$MYSQL_USER -p$MYSQL_PASS` do if [ $db != "Database" -a $db != "information_schema" -a $db != 'mysql' ]; then echo $db mysqldump -u$MYSQL_USER -p$MYSQL_PASS $db | gzip --best > $MYSQL_DIR$db".sql.gz" fi done date echo "start rsync" rsync -avz /backup/ sitesbackup@remotehost:~/backup date echo "finish!"