wp-cliとawscliでDBのバックアップをS3に保存する
現在このブログは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