当BlogはさくらVPS上のCentos7にインストールしたWordPressで運用しています。Blog記事も増えてきたところなので、自動バックアップの仕組みを取り入れようと思います。
目次
1.バックアップポリシー
以下のように決定しました。
- バックアップファイルは暗号化して保存
- バックアップファイルは世代管理をする
- バックアップファイルはVPSから自宅サーバ環境に安全にコピーする
- バックアップファイルはクライアントPCから簡単にアクセスできる
2.バックアップ構想
上記ポリシーを視覚化しました。
[さくらVPS]
「Blog環境(WordPress)」… Backup対象
↓
BACKUP_blog_1.zip … 暗号化ZIP圧縮コンテンツファイル(7世代管理)
BACKUP_blogdb_1.zip … 暗号化ZIP圧縮DBSQLファイル(7世代管理)
:
→ SCP→ … 自宅SVよりSCPで取得
↑ ↓
↑ ↓
↑ ↓
[自宅SV(CentOS7]
「Samba公開Dir」 … 公開ディレクトリはPCからアクセス可
↓
BACKUP_blog_1.zip
BACKUP_blogdb_1.zip
3.VPSバックアップ方針
WordPressのバックアップはプラグインなどは使わないマニュアルバックアップ方式です。 自動化のためにCRONでシェルスクリプトを起動します。シェルスクリプトは以下のように
3ファイルに分割します。パスワードなどのセキュアな情報は起動元ファイルで管理します。
(1)スクリプトの構成
NO | スクリプト名 | 説明 |
---|---|---|
1 | AllBackup.sh | CRON登録用スクリプトファイル。サブスクリプトを引数を付加してCallする。 |
2 | DBBackup.sh | WordPressのDBをバックアップするスクリプト |
3 | FileBackup.sh | WordPressのwp-Contentディレクトリをバックアップするスクリプト |
(2)Cron登録用スクリプト
・AllBackup.sh
1 2 3 |
PATH=/usr/local/sbin:/usr/bin:/bin sh ./DBBackup.sh blogdb dbusr_hoge db_hogehogepass zipencryptpasswd sh ./FileBackup.sh wpblog '/var/www/html/wordpress' zipencryptpasswd |
説明:DBBackup.sh
NO | 引数 | 説明 |
---|---|---|
1 | blogdb | Backup対象のMysql(Mariadb)DB名 |
2 | dbusr_hoge | WordPressのDBログインユーザー名 |
3 | db_hogehogepass | DBログインユーザーのパスワード |
4 | zipencryptpasswd | バックアップZIP圧縮ファイルのパスワード |
説明:FileBackup.sh
NO | 引数 | 説明 |
---|---|---|
1 | wpblog | Blogのユニーク略称。バックアップファイルの一部に使用 |
2 | /var/www/html/wordpress | バックアップ対象Blogのパス |
3 | zipencryptpasswd | バックアップZIP圧縮ファイルのパスワード |
(3)DBバックアップ用スクリプト
・DBBackup.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
PATH=/usr/local/sbin:/usr/bin:/bin # バックアップ先ディレクトリ BACKDIR=/backup/DB # DB名 dbname=$1 # Wordpressユーザー WPUSR=$2 # MySQLパスワード WPPASS=$3 # Backup SQL FILENAME SQLFILENM=BACKUP_${dbname}_`date +%w`.sql # LOG ディレクトリ LOGDIR=/var/log # LOGファイル LOG=$LOGDIR/backup_${dbname}_sql_`date +%w`.log # ZIP PASS PASSWD=$4 # ZIP FILE NAME BACKUPFL=BACKUP_${dbname}_`date +%w`.zip # 1Wサイクリックログ削除 rm -f $LOG echo `date +%Y%m%d%H%M%S` backup start >>$LOG # Mysql Dump MYSQL_PWD=${WPPASS} mysqldump -u $WPUSR $dbname > $BACKDIR/$SQLFILENM cd $BACKDIR # ZIP COMPRESS zip -P $PASSWD $BACKDIR/$BACKUPFL $SQLFILENM >>/dev/null 2>>$LOG rm -f $SQLFILENM echo `date +%Y%m%d%H%M%S` mysqldump done >>$LOG echo `date +%Y%m%d%H%M%S` backup complete >>$LOG |
5,7,9,17行目で引数を変数にセットしています。11,15,19行目で各ファイル名に月曜~日曜日に割り当てられている数を付加しています。これでファイル名を7世代で管理できます。24行目でmysqldumpコマンドでDBをsqlファイルに出力しています。出力されたSQLファイルを27行目でZIPファイルに圧縮しています。28行目で不要となったSQLファイルを削除しています。
(4)Fileバックアップ用スクリプト
・FileBackup.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
PATH=/usr/local/sbin:/usr/bin:/bin BACKDIR=/backup/$1 CDDIR=$2 PASSWD=$3 TGTDIR=wp-content/ LOGDIR=/var/log LOG=$LOGDIR/backup_$1_`date +%w`.log BACKUPFL=BACKUP_$1_`date +%w`.zip # 1Wサイクリックログ削除 rm -f $LOG echo `date +%Y%m%d%H%M%S` backup start >>$LOG echo `date +%Y%m%d%H%M%S` FILE Archive start >>$LOG cd $CDDIR zip -P $PASSWD -r $BACKDIR/$BACKUPFL $TGTDIR >>/dev/null 2>>$LOG echo `date +%Y%m%d%H%M%S` FILE Archive complete >>$LOG |
同様に2,3,4行目で引数を変数にセットしています。14行目でフォルダをZIP圧縮しています。
4.自宅サーバVPSファイル取得方針
自宅SVのCentOS7よりVPSサーバへSCPの公開鍵認証接続をしバックアップファイルをコピーします。コピー先は、CentOSのsamba公開ディレクトリとします。
(1)専用ユーザ―作成
SCPコピーでだけ使用するユーザーを作成します。
1 2 3 |
# user add backupusr # passwd backupusr New password:XXXXXXXXXX |
(2)鍵ペアの生成
当Blogのこちらの記事を参考にTera Termで鍵ペア(公開鍵/秘密鍵)を生成します。この時パスフレーズは無(空白)にします。
(3)公開鍵の格納
作成した鍵ペアのうち公開鍵をVPSサーバにアップロードします。保存先は先程作成したユーザ―(backupusr)の.sshディレクトリです。アップロード後にファイル名をauthorized_keysに変更します。公開鍵の権限を変更しておきます。
1 |
# chmod 600 ~/.ssh/authorized_keys |
(4)秘密鍵の格納
作成した鍵ペアのうち秘密鍵を自宅サーバにアップロードします。保存先はrootディレクトリの直下に.keyディレクトリを作成し保存します。秘密鍵の権限を変更しておきます。
1 |
# chmod 600 ~/.key/id_rsa.key |
(5)SCPスクリプト
・blog_backup.sh
1 2 3 4 5 6 7 |
PATH=/usr/local/sbin:/usr/bin:/bin BACKDIR1=/backup/DB BACKDIR2=/backup/wpblog BACKUPFL1=BACKUP_blogdb_`date +%w`.zip BACKUPFL2=BACKUP_wpblog_`date +%w`.zip scp -C -p -i /root/.key/id_rsa.key -P 10022 backupusr@1XX.12X.1XX.xx:$BACKDIR1/$BACKUPFL1 /var/samba/BlogBackup/ scp -C -p -i /root/.key/id_rsa.key -P 10022 backupusr@1XX.12X.1XX.XX:$BACKDIR2/$BACKUPFL2 /var/samba/BlogBackup/ |
2,3,4行目でバックアップフォルダとファイルを準備しています。6,7行でSCPファイルコピーをしています。-C:通信を圧縮、-p:コピー元の更新時間とモードを維持、-i:秘密キーを指定、-P:ポート番号を指定です。
以降は、 <接続ユーザー名@接続先IP:コピーファイルパス > <コピー先ローカルパス>になります。
5.Cronへの登録
(1)VPS側の登録
以下のように、/etc/cron.d/にbackupファイルを作成し起動時間と起動するスクリプトを定義します。下記では毎日5時に /root/AllBackup.shが起動されます。
1 2 |
# vi /etc/cron.d/backup 00 05 * * * root /root/AllBackup.sh |
(2)自宅サーバ側の登録
同様に、/etc/cron.d/にblgbackupファイルを作成し起動時間と起動するスクリプトを定義します。下記では毎日5時30分に/root/blog_backup.shが起動されます。
1 2 |
# vi /etc/cron.d/blgbackup 30 05 * * * root /root/blog_backup.sh |
(3)バックアップ全体構成イメージ
上記構想をイメージ図に起こしました。テキストベースのイメージ図よりも分かり易くなりましたよね(?)。
(4)バックアップ結果確認
バックアップ結果は以下の通りローカルPCからエクスプローラで確認できます。現在のところうまくいっているようです。
6.参考にさせて頂いたサイト
ありがとうございます。