Инкрементальный backup баз mySQL
На днях на одном из моих рабочих серверов возникла острая нехватка свободного места на винте. Пришлось в срочном порядке фантазировать. После пары часов активной мозговой деятельности решил принципиально переделать систему резервного копирования БД mysql. Решил сделать инкрементальный бэкап с diff’ом. Ниже скрипт, который в воскресенье делает полный бэкап баз, а в остальные дни инкрементальный с воскресним.
#!/bin/sh
# В воскресенье – полный бэкап баз mysql (список баз
# в переменной databases), по другим дням делается
# diff с бэкапом от воскресенья
# Сохраняются файлы
# по вскр. – имябазы.full.mysql.bz2
# по другим дням – имябазы.день.mysql.diff.bz2
# — General, 07/2006 –
mysqldump=”/usr/local/bin/mysqldump”
mysqlparam=”-u root -ppassword”
bzip2=”/usr/bin/bzip2″
bunzip2=”/usr/bin/bunzip2″
diff=”/usr/bin/diff -bBu”
databases=” dbmail trafd pureftpd “
dstdir=”/usr/home/backup/db” # куда сохранять архивы
day=`date +%w` # номер дня недели
if [ ${day} -eq "0" ]; then
# do full backup
for FLS in ${databases}
do
${mysqldump} ${mysqlparam} ${FLS}| ${bzip2} -c -9 > \ ${dstdir}/${FLS}.full.mysql.bz2
done
else
# do diff with last backup
for FLS in ${databases}
do
${mysqldump} ${mysqlparam} ${FLS} > ${dstdir}/${FLS}.${day}.mysql
${bunzip2} ${dstdir}/${FLS}.full.mysql.bz2
${diff} ${dstdir}/${FLS}.full.mysql ${dstdir}/${FLS}.${day}.mysql|${bzip2} -c -9 \ > ${dstdir}/${FLS}.${day}.mysql.diff.bz2
${bzip2} ${dstdir}/${FLS}.full.mysql
/bin/rm -f ${dstdir}/${FLS}.${day}.mysql
done
fi
Кому надо – пользуйтесь наздоровье.
Вот сейчас написал и подумал: а неплохо было-бы сделать diff не с бэкапом за воскресенье, а с бэкапом за предыдущий день.
нашел тут