wp-cliとawscliでDBのバックアップをS3に保存する

2020年2月11日

現在このブログはVPSのサーバ内でWordPress + MariaDBを構築して運用しているのですが、自動でバックアップを取ってくれるわけでもないので、サーバが死ぬとデータの復元ができません。(RDSはちょっと高いのでなし)

そこでDBのダンプファイルをS3に保存することにしました。

準備

今回必要なのはwp-cli、awscli、S3、awscliとS3をつなぐためのIAMユーザになります。

wp-cliのインストール

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info

aws-cliのインストール

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
sudo python get-pip.py
sudo pip install awscli

#PATHを通す
echo export PATH=~/.local/bin:$PATH >> ~/.bash_profile
source .bash_profile

aws --version

S3の設定

DBを保存するためのS3を作成します。
バケット名は全世界でユニークである必要があるため「wordpress」とか「wordpress-db」だとはじかれます。
コンソールからポチポチして作りましょう。

ちなみにDBのダンプファイルがたまりすぎるのが嫌だったため、「ライフサイクルポリシー」を設定しました。
参考 : http://blog.serverworks.co.jp/tech/2019/07/09/post-71647/

IAMユーザの作成

AWSのコンソールからIAMユーザを作成します。このユーザにS3へのアクセス権限を付与しておきます。
このときのアクセスキーとシークレットキーは控えておきましょう。

キーを入手したら下記コマンドでawsの設定を行います。

aws configure

シェルスクリプトを書く

こんな感じのスクリプトを書きました。

backup-db.sh

/usr/local/bin/wp db export --path=/{wordpressのpath/}
{awsコマンドのpath} aws s3 cp ./ s3://{S3のBucketの名前} --recursive --exclude "*" --include "wordpress*"
rm -rf wordpress-*

crontabは深夜2時に設定しておきます。

crontab -e 

0 2 */1 * * sh -x /{シェルスクリプトのパス}/backup-db.sh > /{シェルスクリプトのパス}/backup-db.log 2>&1