日々のWEBサイトの運用や更新作業の中で、ちょっとした作業ミスで
サーバー上のデータを消失してしまう事があると思います。
ローカルで保持しているファイルならまだしも、CMSでアップロードされたファイルや
DBのデータなどを削除してしまったら目も当てられません。
cronの設定なども crontab -e と叩くつもりが、
crontab -r と叩いてしまい、途方に暮れたこともあるのではないでしょうか?
サイトの復旧に必要なデータのコピーを、最低4日分程度を保持しておくのが賢明です。
3連休の直前にデータを消失して連休明けに気づく、なんて事もあるかもしれないので..。
backup.sh
#!/bin/sh
backup_dir='/****/backup'
web_dir='/****/html'
TODAY=`/bin/date +%y%m%d`
#DBのダンプ
##構造
mysqldump -u **** -p**** --compact --no-data --default-character-set=binary --all-database > ${backup_dir}/db_struct.sql
##データ
mysqldump -u **** -p**** --complete-insert --extended-insert --add-locks=FALSE --no-create-info --default-character-set=binary --all-database > ${backup_dir}/db_data.sql
#最新データをlatestに圧縮保存
## DB
tar -zPcvf ${backup_dir}/latest/db_struct.tgz ${backup_dir}/db_struct.sql
tar -zPcvf ${backup_dir}/latest/db_data.tgz ${backup_dir}/db_data.sql
## WEB
tar -zPcvf ${backup_dir}/latest/web.tgz ${web_dir}
## cron
tar -zPcvf ${backup_dir}/latest/cron.tgz /var/spool/cron
#dailyに日次コピー
cp -f ${backup_dir}/latest/db_struct.tgz ${backup_dir}/daily/${TODAY}.db_struct.tgz
cp -f ${backup_dir}/latest/db_data.tgz ${backup_dir}/daily/${TODAY}.db_data.tgz
cp -f ${backup_dir}/latest/web.tgz ${backup_dir}/daily/${TODAY}.web.tgz
cp -f ${backup_dir}/latest/cron.tgz ${backup_dir}/daily/${TODAY}.cron.tgz
#古いバックアップの削除
find ${backup_dir}/daily/*.tgz -mtime +4 -exec rm -f {} \;
exit 0