個人趣味レベルでWebサービスを一般公開する場合、自宅サーバの維持メンテを嫌って格安レンタルサーバーを借りることがよくあると思います。わずかな費用と引き替えに何となく24時間365日近く動き続けてくれるので楽なのですが、格安レンタルサーバーはデータの保証をしていないところが多いため、ユーザーが蓄積してくれたデータを守るためにはバックアップが必要不可欠です。
というわけで先ほど、次から述べるところの2番を作ってみました。ついでなので私のバックアップの一連の流れを紹介してみたりします。
1.レンタルサーバ上でDBダンプ取得(シェルスクリプトをcron実行)
下記スクリプトをcronで毎朝5時に実行し、MySQLのDBダンプをレンタルサーバ上の非公開ディレクトリに保存します。
#!/bin/sh /usr/local/mysql/bin/mysqldump --default-character-set=eucjpms -uユーザー名 --opt データベース名 -pパスワード > /virtual/アカウント名/mysqlbackup/mysql_`date +%w`.sql
ちなみに借りているレンタルサーバーはCORESERVER.JPです。XREA.COMの上位版ですね。cronやSSH接続が許可されているので重宝しています。
2.自宅のWindows PCでレンタルサーバ上のDBダンプファイルを取得(バッチファイルでftp.exeをWindowsタスクスケジューラで実行)
ここが今日作った部分です。すなわち、昨日まではレンタルサーバー上でDBダンプをとるだけにとどまっており、バックアップとしては全く体をなしていなかったわけですから恐ろしい話です。
下記バッチファイルを自宅サーバ(Windows Home Server)のWindowsタスクスケジューラに登録して、1.で取得したDBダンプファイルを毎週月曜朝4時にFTP取得します。
Windowsタスク登録用
CALL backup.bat backup.ftpcmd D:\Backup\mysqlbackup
実処理(FTP)用
@ECHO OFF REM REM DBダンプファイルをFTP取得 REM SET RETVAL=0 IF "%1" == "" GOTO invalidargs IF "%2" == "" GOTO invalidargs SET NEWDIRNAME=%DATE:/=% MKDIR %2\%NEWDIRNAME% >> backup.log 2>&1 IF ERRORLEVEL 2 GOTO mkdirfailed ftp -s:%1 >> backup.log 2>&1 IF ERRORLEVEL 1 GOTO ftpfailed MOVE *.sql %2\%NEWDIRNAME% >> backup.log 2>&1 IF ERRORLEVEL 2 GOTO movefailed MOVE *.log %2\%NEWDIRNAME% > NUL 2>&1 GOTO end :invalidargs SET RETVAL=1 ECHO 引数が不正です。 backup.bat FTPスクリプト バックアップ先 GOTO end :ftpfailed SET RETVAL=2 ECHO FTPに失敗しました。 GOTO end :mkdirfailed SET RETVAL=3 ECHO バックアップ先ディレクトリ作成に失敗しました。 GOTO end :movefailed SET RETVAL=4 ECHO ファイルの移動に失敗しました。 GOTO end :end EXIT /b %RETVAL%
今読み返してみると、FTPを先にやってからディレクトリ作った方がいい感じですね。面倒なのでこのまま放置ですが。
3.自宅のWindows PCのバックアップ時にまとめてバックアップディスクへ待避(BunBackupをWindowsタスクで実行)
個人のデータは作業用のPCのローカルディスクではなく、自宅サーバー(Windows Home Server)の共有フォルダに入れています。先ほどFTPで取得したDBダンプファイルもこの共有フォルダに入れています。このステップでDBダンプファイルを含む共有フォルダのファイルを毎週月曜朝5時にバックアップ専用のハードディスクへミラーリングします。
Linuxサーバー時代はcronでrsyncしてましたが、WindowsならBunBackupを使うのが手軽でよいと思っています。
おわりに
以上です。たまたまうちはWindows Home ServerでFTPとかしていましたが、別にWindows Home Serverの機能は何一つ使っていませんので、普通のWindows PCであれば何でもOKですよ。
ご参考になれば幸いです。