目次
はじめに
このBlogを運営して約1年になりますが、実はWordpressのバックアップは一度も取ったことがないです。
この適当さがバレバレだね(^ _ ^;)
なので、今回はWordpressのバックアップshellを作りたいと思います。
実現したこと
・ソースコードのバックアップ
・データベースのバックアップ
・バックアップファイルの世代管理
・バックアップ失敗時はログファイルに出力する
バックアップシェルの作成
DBのバックアップ
mysqldumpを使って、DBのバックアップを実施する。
dump失敗時はログファイルにエラーログを吐く。
#DBのバックアップ
eval "mysqldump -u$DB_USER -h$DB_HOST -p$DB_PASSWORD $DB_NAME | gzip > $BACKUP_PATH/DB/DB_$DATE.sql.gz"
if [ $? -ne 0 ]
then
echo "$DATE:DB Backup error." >> $BACKUP_PATH/Backup.log
exit 1
fi
ファイルのバックアップ
WordPressのソースコードはtarを使ってやる。
あと、.gitをバックアップする必要がないからexcludeオプションをつける。
バックアップが失敗したら、ログファイルにエラーログを吐く。
#ファイルバック
eval tar czf $BACKUP_PATH/FILE/FILE_$DATE.tar.gz -C $WORDPRESS_PATH . --exclude ".git"
if [ $? -ne 0 ]
then
echo "$DATE:Wordpress File Backup error." >> $BACKUP_PATH/Backup.log
exit 1
fi
世代管理
ls -1t
でバックアップファイルを日付順で並んで、for文で回す。
あとは世代回数を超えたら、rm
で削除する。
# 関数: ファイルの削除を行う。
# $1: 削除対象のファイルパス(前方一致)
function deletefile(){
CNT=0
for file in `ls -1t ${1}*` # 更新日付が新しい順にファイル名のリストを作る
do
CNT=$((CNT+1))
if [ ${CNT} -le $NUMBER_OF_GENERATIONS ]
then
continue
fi
eval "rm ${file}"
done
return
}
参照サイト:http://knowledge.sakura.ad.jp/knowledge/4334/
完成版
完成版はこれになります。
githubにも置いてあります!
engineer-log/Wordpress_Backup_Tool
#!bin/sh
#DBユーザー
DB_USER="wordpress"
#DBパスワード
DB_PASSWORD="password"
#DB名
DB_NAME="wordpress"
#DBホスト
DB_HOST="localhost"
#wordpressのファイルパス
WORDPRESS_PATH="/var/www/wordpress/"
#バックアップ先
BACKUP_PATH="/Backup"
#バックアップ世代数
NUMBER_OF_GENERATIONS="15"
DATE=`date +%Y%m%d-%H%M%k`
#フォルダ存分確認(ない場合は作成する)
if [ ! -d $BACKUP_PATH/DB ]
then
mkdir -m 777 $BACKUP_PATH/DB
fi
if [ ! -d $BACKUP_PATH/FILE ]
then
mkdir -m 777 $BACKUP_PATH/FILE
fi
#DBのバックアップ
eval "mysqldump -u$DB_USER -h$DB_HOST -p$DB_PASSWORD $DB_NAME | gzip > $BACKUP_PATH/DB/DB_$DATE.sql.gz"
if [ $? -ne 0 ]
then
echo "$DATE:DB Backup error." >> $BACKUP_PATH/Backup.log
exit 1
fi
#ファイルバック
eval tar czf $BACKUP_PATH/FILE/FILE_$DATE.tar.gz -C $WORDPRESS_PATH . --exclude ".git"
if [ $? -ne 0 ]
then
echo "$DATE:Wordpress File Backup error." >> $BACKUP_PATH/Backup.log
exit 1
fi
# 関数: ファイルの削除を行う。
# $1: 削除対象のファイルパス(前方一致)
function deletefile(){
CNT=0
for file in `ls -1t ${1}*`
do
CNT=$((CNT+1))
if [ ${CNT} -le $NUMBER_OF_GENERATIONS ]
then
continue
fi
eval "rm ${file}"
done
return
}
#旧バックアップファイル削除
deletefile "$BACKUP_PATH/FILE/FILE_"
deletefile "$BACKUP_PATH/DB/DB_"
定期実行
定期実行はcrontabに任せましょうw
crontabの設定を変更する
crontab -e
1行を追加するだけ
自動時間は毎日の0時0分
0 0 * * * /bin/sh /Backup/wordpress_backup_tool.sh