WEBコンテンツのバックアップ方法(Backup)

WEBサーバーのバックアップでいつもやっていること。

WEBサーバーのDocumentRoot以下をバックアップする

#!/usr/bin/bash

#--------
# config
#--------
user=sampleuser

#------------------------------------
# Backup and Rotate for DocumentRoot
#------------------------------------
cd /home/$user
tar -pczf $user-`date "+%Y%m%d_%H%M"`.tar.gz ./www/
mv /home/$user/$user-`date "+%Y%m%d_%H"`*.tar.gz /home/$user/backup/

# backup rotate
rm -f /home/$user/backup/$user-`date -d '30 days ago' "+%Y%m%d"`*.tar.gz
echo "delete file with 30days ago...";

#-------
# rsync
#-------
rsync -avz --delete -e "ssh -i /home/$user/.ssh/rsa_id.pem" /home/$user/backup/ root@12.34.56.78:/home/$user/backup/

みたいなこと。
DocumentRoot以下を丸々tarしておけば安心かと。バックアップローテートは面倒臭いので、30以前のものは消すという感じでdateコマンドでファイル名作成してやっちゃう。cronで適当な期間で動かしておけばそこそこ安心感高まります。いろんなやり方あるかと思うけど、Bashでいいんじゃないかと。

  1. tarする
  2. mvする
  3. ◯日前以前のファイルを消す
  4. rsyncでバックアップサーバーに転送する

です。

MySQLダンプファイルをバックアップする

MySQLのデータが残っていれば完璧というか、ここも肝なのでバックアップしないとあかんです。
# mysqldump
mysqldump -u $user -h 87.65.43.21 -pPASSWORD $user_db > /home/$user/backup/$user-`date "+%Y%m%d_%H%M"`.sql
同様にdateコマンドでフィアル名をつけて30日とかでローテートする。まとめるとこんな感じかな。
#!/usr/bin/bash

#--------
# config
#--------
user=sampleuser

#------------------------------------
# Backup and Rotate for DocumentRoot
#------------------------------------
cd /home/$user
tar -pczf $user-`date "+%Y%m%d_%H%M"`.tar.gz ./www/
mv /home/$user/$user-`date "+%Y%m%d_%H"`*.tar.gz /home/$user/backup/

# mysqldump
mysqldump -u $user -h 87.65.43.21 -pPASSWORD $user_db > /home/$user/backup/$user-`date "+%Y%m%d_%H%M"`.sql

# backup rotate
rm -f /home/$user/backup/$user-`date -d '30 days ago' "+%Y%m%d"`*.tar.gz
rm -f /home/$user/backup/$user-`date -d '30 days ago' "+%Y%m%d"`*.sql
echo "delete file with 30days ago...";

#-------
# rsync
#-------
rsync -avz --delete -e "ssh -i /home/$user/.ssh/rsa_id.pem" /home/$user/backup/ root@12.34.56.78:/home/$user/backup/