シェルでWordPressのバックアップツールを作りましょう

はじめに

この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
– PR –
– PR –