サーバのバックアップについて考えた。
この516.jpも会社のWebサイトもWordPressを使っており、
DBのバックアップはプラグインを使って定期的に残している。
ただ、サーバ上のファイルのバックアップはとれていないので、
もしサーバ上のファイルが消失してしまった場合には、
DBのバックアップだけでは完全に復旧する事はできない。
主にwp-contentディレクトリ以下であるが、
画像ファイル等も追加されていくので定期的なバックアップが必要である。
そのような訳で、WordPressに限らずではあるが、
サーバ上のファイルのバックアップについて調べたついでにメモを残す。
定期的な処理の自動化といえば、
Linux/UNIX系であればシェルスクリプトで書いた処理をcronで自動実行、
Windowsであればバッチファイルをタスクスケジューラで自動化であろう。
私が借りているさくらのサーバはUNIX系OSなので、
まずシェルスクリプトについて調べた。
こういった場合のバックアップや同期のためには
rsync(アールシンク)コマンドというのが有効であるのを知った。
管理者必見! ネットワーク・コマンド集 – rsyncコマンド:ITpro
早速、rsyncを実行するシェルスクリプトを書いて
試してみたが、なぜかうまくいかない。
共用サーバだから何かしら制限がかかっているのか良く分からないが、
仕方がないので別の方法を考えた。
で、単純にバックアップをとりたいディレクトリを
コピーする下記のようなシェルスクリプトにする事にした。
#!/bin/sh # 前々回のバックアップを削除してから、前回のコピーをリネーム cd /home/user/www rm -rf backtest_old/ mv backuptest/ backuptest_old/ # 最新版のコピーを作成 cd /home/user/www cp -r backup backuptest
際限なくバックアップを残しても容量を使ってしまうばかりなので
前々回より前の古いバックアップは削除して、
最新のコピーとそのもう1バージョン前だけ残す事にした。
具体的にはバックアップをとりたいディレクトリ名を「backuptest」
でバックアップ先のディレクトリ名を「backup」とした場合に、
backuptestをbackuptest_oldにリネーム、
次回定期実行時に最新版のコピーをとる際には、
「backuptest」が最新のバックアップで、
「backuptest_old」が1バージョン前のバックアップとなる。
で上記のシェルスクリプトを「backup.sh」とか適当なファイル名にして
そのbackup.shを定期的に実行するようcronの設定をすれば良い。
これでサーバ上でのファイルのバックアップはとれているので
何かしらの手違いなどでファイルが消失しても復元可能であるが、
もし障害が起きてサーバ全体が消えてしまうとどうしようもない。
ある程度の規模のサーバでそのような障害が起きる可能性は低いが、
以前、ファーストサーバのデータ消失でもあったように、
あまり過信はよくないので念のため備えあれば憂いなしである。
となると、使用中のサーバ以外にもバックアップを残す必要があるが
私の場合は、WindowsクライアントからFTPダウンロードする事にした。
まず、FTPを実行するバッチファイルの準備が必要なので
こちらのサイトを参考に作成してみた。
■backup.bat
ftp -s:ftpcmd.txt
■ftpcmd.txt
open host_mei user_mei pass cd www/dir_mei get index.html C:\Users\***\Desktop\index.html bye
上記のバッチファイルを利用すれば、
サーバ上のwww/dir_mei/index.htmlを
デスクトップにダウンロード可能である。
しかしftpのgetコマンドでは
ディレクト丸ごとダウンロードはできないようである。
なので、サーバ上でディレクトリをzipに固めてから
zipファイルを指定してダウンロードする必要があると思う。
で、そのバッチファイルをタスクスケジューラで定期的に実行すれば
ローカルマシンにバックアップを残す事ができるという訳だ。
いつも起動しているWindowsマシンがないとう事であれば、
別のサーバを借りてSSH接続とCRONでバックアップというのもいいだろう。
これに限らずだが、バックアップというのはとても重要なので
「うちは大丈夫」と思い込まずしっかり対策をとっていきたいと思う。
(後日追記)
PHPでディレクトリごとzip