エックスサーバーのWordPressサイトをDropboxに自動バックアップする手順。
こんにちは!
サイト管理人のYosukeです。
WordPress(以下略:WP)サイトを運用する上で、
「実ファイル」と「データベース」のバックアップが欠かせませんよね。
バックアップの重要性について異論はないと思います。
ちなみに、エックスサーバーのデータベースは、
サーバーパネルの MySQL設定 からバックアップを取る事が出来ます。
非常に便利ですが、例えば毎日バックアップを取りたいとかになってくると、これでは面倒。
WPサイトのバックアップといえば、
BackWPup プラグインを利用する方法が最もお手軽でメジャーだと思います。
今回はmysqldump
とrsync
コマンド+cron
+Dropboxを組合せ、
「バックアップタスクをスケジュール化」
する手順で進行していきたいと思います。
目次
作業の流れと概要、下準備
概要は、エックスサーバーのWPデータをLinuxに同期/コピーし、Dropboxへ。
Dropboxの裏ワザ的利用ですが、削除しても30日間は履歴に残る(いつでも復元可能)事、
削除したデータは使用容量にカウントされない事を利用します。
例えば、Dropboxの総容量が2GBとして、バックアップのデータサイズが1GBだったとします。
Dropbox上の前日のバックアップを削除して、最新のバックアップ1GBを保存します。
これを1ヶ月繰り返したとしても、30日前のデータまでは履歴が残っており復元する事ができます。
つまり、Dropboxの総容量が2GBであっても、実際には30GB程のバックアップが
Dropbox上に保存されている事を実現出来るわけです。
作業を進める前に済ましておく事
- 常時稼働中のLinuxPCを準備する (今回linuxBeanを使います)
- エックスサーバーをSSH接続出来るようにしておく (鍵認証のみパスワードは設定しない)
- Dropboxをインストールしておく (容量が少ないアカウントは辛い)
注意点!
- rsyncが使えないサーバーはこの方法が利用出来ません。(サーバー/クライアント共にrsync環境が必要)
- SSH接続が出来ないサーバーも同様。
- Dropbox(GUI)が使えないLinuxはDropboxバックアップが利用出来ません。(Raspberry Piとか)
データベースdumpファイルを作成する
まずは、エックスサーバー側の作業です。SSH接続しておきます。
dumpファイルの作成は以下の仕様。
- エックスサーバーでmysqlコマンドを使う
- 任意のディレクトリに保存する
- データベースを圧縮して保存する
- ファイル名の冒頭には処理を実行した日付を付ける
MySQL各種項目の例 (作成日:2016/1/1 の場合の例)
- MySQLユーザ名 :yosuke_wp
- MySQLパスワード :gamalog
- MySQLホスト名 :mysql777a.xserver.jp
- データベース名 :yosuke_gamalog
- ユーザー名 :yosuke
- 保存先ディレクトリ:/home/yosuke/backups/archives/
- 保存データベース名:dbdump_yosuke_gamalog_160101.sql.gz
(※赤文字は参考例です。)
記入例 (MySQL各種項目の例の場合)
$ mysqldump -uyosuke_wp -pgamalog -hmysql777a.xserver.jp yosuke_gamalog | gzip > /home/yosuke/backups/archives/dbdump_yosuke_gamalog_`date +%y%m%d`.sql.gz
上記のように、オプションコマンド(-u,-p,-hなど)の後には空欄を作らず文字詰めして下さい。
これを自分の環境に置き換えて、コマンドを作成し実行して下さい。
入力項目に間違いが無ければ、dumpファイルが作成されるはずです。
スクリプトをCronジョブに登録する
これまでの流れ、やりたい事のコマンドをシェルスクリプトにすると
#!/bin/bash #DBDumpファイルの作成 #バックアップ用ディレクトリの準備 mkdir -p /home/yosuke/backups/archives #昨日のDBdumpは邪魔なので削除 rm -rf /home/yosuke/backups/archives/* #DBdump mysqldump -uyosuke_wp -pgamalog -hmysql777a.xserver.jp yosuke_gamalog | gzip > /home/yosuke/backups/archives/dbdump_yosuke_gamalog_`date +%y%m%d`.sql.gz
これを、dbdump.shとして、/home/yosuke/bin に保存しました。
シェルスクリプトの設置はこれで完了です。
次に、このスクリプトをCronジョブに登録します。
エックスサーバーの [サーバーパネル設定] > [Cron設定] > [Cronの追加] で設定します。
このように記入することで、毎日2時にスクリプトが実行される事になりました。
エックスサーバー側のCronジョブ設定および、作業はこれで完了です。
エックスサーバーのデータをLinux側に保存
次に、LinuxPC側の作業です。
「実ファイル」の同期はrsync
、「データベース」はscp
コマンドでLinux側にコピーします。
まずは、rsync
で実ファイルの同期から。
実ファイルの同期先を、エックスサーバーに合わせ、
/home/yosuke/e-creators.info/publichtml/gama
として、以下に保存用ディレクトリを作成します。
$ mkdir -p /home/yosuke/e-creators.info/publichtml/gama
次に、rsync
で同期します。(Linux側からssh
接続出来る前提 公開鍵の例:~/.ssh/authorized_keys)
$ rsync -aq --delete -e 'ssh -p 10022 -i /home/yosuke/.ssh/authorized_keys' yosuke@sv777.xserver.jp:~/e-creators.info/public_html/gama/ /home/yosuke/e-creators.info/public_html/gama
公開鍵、サーバーディレクトリ、Linuxディレクトリの名称は適宜、環境に合わせて編集して下さい。
完了までには、WPサイトのデータ量に左右されます。
rsync
コマンドの使い方やオプションの意味は下記のサイトが参考になりますので、
使い慣れていない場合はしっかり読んでおきましょう。
要注意!
rsync
を使う場合は特に、同期元と同期先の順序を間違わないよう十分に注意して下さい。
(逆にすると全部消滅して大泣きする羽目になります)
Dropboxフォルダにデータを保存
Dropboxフォルダを下記に設定したとします。
/home/yosuke/Dropbox
WPサイトのバックアップ先を下記にしたいとします。
/home/yosuke/Dropbox/backup/ホームページ/sv777/archive
さらに、保存先ディレクトリやファイル名に「年月日」をつけたいとします。
/home/yosuke/Dropbox/backup/ホームページ/sv777/archive/`date +%y%m`/www_gama_e-creatorsinfo`date +%y%m%d`.tar.gz
これで、やりたい事と必要となるコマンドが明確になりました。
上記の仕様とした場合、下記のようにしてコマンドを実行します。(date
コマンドを付与)
$ mkdir -p /home/yosuke/Dropbox/backup/ホームページ/sv777/archive/`date +%y%m` $ tar -zcf /home/yosuke/Dropbox/backup/ホームページ/sv777/archive/`date +%y%m`/www_gama_e-creatorsinfo`date +%y%m%d`.tar.gz -C / home/yosuke/e-creators.info/public_html/gama $ scp -p -P 10022 -i /home/yosuke/.ssh/authorized_keys saal@sv777.xserver.jp:~/backups/archives/* /home/yosuke/Dropbox/backup/ホームページ/sv777/archive/`date +%y%m`/
これにより、例えば、2016年01月01日に実行した場合、
/home/yosuke/Dropbox/backup/ホームページ/sv777/archive/1601
というディレクトリに、
- dbdump_yosuke_gamalog_160101.sql.gz
- www_gama_e-creatorsinfo_160101.tar.gz
というファイルが出来上がっているはずです。
(サイズによっては時間がかかります)
こうやって保存したファイルが、Dropboxから自動的にアップロードされていれば完璧です。
最終:シェルスクリプトの内容と、Cronジョブへの登録
上記を踏まえ、シェルスクリプトにすると下記のようになりました。
#!/bin/bash #ローカル側バックアップシェル #ローカル側保存先 mkdir -p /home/yosuke/e-creators.info/public_html/gama #WEBサイトのデータをリモート側とローカル側で同期 rsync -aq --delete -e 'ssh -p 10022 -i /home/yosuke/.ssh/authorized_keys' yosuke@sv777.xserver.jp:~/e-creators.info/public_html/gama/ /home/yosuke/e-creators.info/public_html/gama #Dropboxの前日のバックアップデータを削除 rm -rf /home/yosuke/Dropbox/backup/ホームページ/sv777/archive/* mkdir -p /home/yosuke/Dropbox/backup/ホームページ/sv777/archive/`date +%y%m` #エックスサーバー側でDUMP済みの「データベース」をDropboxディレクトリにコピー scp -p -P 10022 -i /home/yosuke/.ssh/authorized_keys saal@sv777.xserver.jp:~/backups/archives/* /home/yosuke/Dropbox/backup/ホームページ/sv777/archive/`date +%y%m`/ #WEBサイトの「実ファイル」を丸ごと圧縮してDropboxディレクトリに保存 tar -zcf /home/yosuke/Dropbox/backup/ホームページ/sv777/archive/`date +%y%m`/www_gama_e-creatorsinfo`date +%y%m%d`.tar.gz -C / home/yosuke/e-creators.info/public_html/gama
これを、dailybk.sh
として、/root/bin
に保存しました。
dailybk.sh
をCronジョブに追加します。
$ vi /etc/crontab
30 1 * * * root /bin/sh /root/bin/dailybk.sh
エディタは何でも(nanoでもLeafpadでも)良いですが、上記の一行を追記します。
毎日1時30分に、dailybk.sh
を実行しますよ~という内容です。
以上で全ての設定が完了です。
最後に
長丁場になりましたが、いかがでしたでしょうか。
途中にMySQLのユーザ名やパスワードなど出ていますが、参考例ですので(当然ですが)実際には違います。
お使いの環境に合わせて編集して下さいね。
あとは、LinuxPCを起動しっぱなしにしておけば、毎日自動でバックアップを取り、
前日のバックアップを削除しながらDropboxにアップロードしてくれるようになります。
プラグイン(BackWPup)で問題が起きていない場合に、あえてこれを採用する必要はないと思いますが、
LinuxPCに何か仕事をさせたい とか、プラグインバックアップじゃ不安だ とか、
サーバーにあまり負荷を掛けたくない(制限を掛けられてしまった)とかの、状況によっては、
dbdump
やrsync
を使うオーソドックスな方法が無難でよろしい という事になるかもしれませんね。
今回は実際に利用中のエックスサーバーを例にとってみましたが、他のホスティング先への応用も
簡単だと思いますので、興味のある方は是非実践してみて下さいね。
このページをご覧になり参考になった方が一人でもいれば幸いです。