シェルスクリプトでwordpressをgoogleにバックアップ

もしもに備えてwordpressを単純にバックアップしたい。
バックアップ先としてローカルのPCが考えられるが、自宅PCで起動しないといけないので却下。
クラウドの無料ストレージ時に定期的にバックアップしようと思う。
wordpressをバックアップするプラグインがいくつかあるが、細かい使いたい機能を使おうとすると、有料オプションになる…
ちょっと勉強もかねてシェルスクリプトで実装した。

概要

前提

  • OSはCentOS Linux release 7.5(x86_64)を使用
  • gdrive-linux-x64(2.1)を使用
  • DBとしてmariadbの5系を使用
  • googleアカウントを登録済み

仕様

WordPress のバックアップに記載されているように、サイト全体とDBのバックアップを取得し、googleの所定のフォルダにアップロードします。

  1. 一時的な作業ディレクトリを/tmpの下に作成する。
  2. サイトはcp, dbはmysqldumpでバックアップファイルを取得する。
  3. 取得したファイル群は、tar/gzipで圧縮してバックアップファイルを作成する。
  4. キーファイルが存在する場合は、バックアップファイルをAES256で暗号化する。
  5. バックアップファイルの名前は、backup_wp_yyyymmdd-HHMMSS.tar.gzとする。暗号化している場合は、backup_wp_yyyymmdd-HHMMSS.tar.gz.aesとする。
  6. 作成したバックアップファイルをgoogleドライブにアップロードする。
  7. バックアップファイルは10世代を残す。(アップロードした結果、11世代分になったら最古のバックアップファイルを削除する。)

なお、このシェルを実現するために、linuxからgoogleドライブにアップロードする方法を調査しています。

シェルスクリプト

配置方法

  1. 下記の3ファイルを任意のディレクトリに保存する。
    以降では/root/opetools/binに配置する前提で説明します。
  2. 同じディレクトリにgdriveを配置する。
  3. 下記を実行する。
  4. backup2gd_wp.shを下記のように編集します。
    aaaaaaaaaaにwordpressのディレクトリを指定します。(例: /var/www/test)
    bbbbbbbbbbにgoogleドライブのアップロード先フォルダIDを定義します。
  5. backup2gd_wp_db.confのccccccccccにDB接続ユーザ名、ddddddddddにパスワードを指定します。
  6. backup2gd_wp_aes.passのeeeeeeeeeeに暗号化のためのパスワードを指定します。(暗号化したくない場合、このファイルは削除してください。)

使い方

バックアップする場合、次のようにbackup2gd_wp.shを実行します。

初回実行時は意図しない設定でデータが消されないよう、スクリプト先頭を”#!/bin/sh -x”にして、デバッグ出力を行いながらパスが正しいかを確認することをお勧めします。この際、スクリプトの最後の方にある削除系コマンドは”#$gd_cmd delete $gd_del_file_id”, “#rm -rf $work_dir”としてコメントアウトした方が安全です。

スクリプトの実行結果を保存できるようlogディレクトリを作成します。
月曜日の朝1時に実行できるよう、次のようにcrontabを設定します。

なお、バックアップデータを展開したい場合、次の通りです。
somefileにはパスワードを格納したファイル、file.tar.gz.aesにはバックアップファイル、file.tar.gzには出力先となる任意にファイル名を指定してください。