サーバー側で自動バックアップ
ここでは、
を前提に話を進めます。
まずは、以下のようにサーバー側でバックアップ作業を行います。
- データベース(mysql)を1つのファイルにする
- php,htmlなどのファイル群を1つのファイルにする
実際のシェルスクリプトは、以下のようなイメージになります。
ここでは、ファイル名を /home/user/exmaple_backup として作成し、以降、解説します。
実例(シェルの場合)
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
31
32
33
34
35
36
37
38
39
|
DBUSER=db_user_name
DBNAME=db_name
DBPASS=db_password
DBHOST=localhost
MYSQLPATH=/usr/bin
ZIPPATH=/bin
BACKUPPATH=/home/user/backup
BACKUPWEB=/home/user/www
OUTPU_DB=$BACKUPPATH/db_`date +%Y_%m_%d`.sql
OUTPU_WEB=$BACKUPPATH/web_`date +%Y_%m_%d`.tar.gz
$MYSQLPATH/mysqldump --default-character-set=utf8 --host="$DBHOST" --user="$DBUSER" --password="$DBPASS" "$DBNAME" > "$OUTPU_DB"
$ZIPPATH/gzip "$OUTPU_DB"
$ZIPPATH/tar cfz $OUTPU_WEB $BACKUPWEB
|
[以下は環境に合わせて設定が必要な箇所]
4行目:db_user_nameを環境に合わせてデータベースのユーザ名を指定します。
6行目:db_nameを環境に合わせてデータベース名を指定します。
8行目:db_passwordを環境に合わせてデータベースのパスワードを指定します。
10行目:localhostを環境に合わせてデータベースのホスト名を指定します。
12行目:/usr/bin をmysql環境に合わせてパス名を指定します。
14行目:/bin をgzip,tar環境に合わせてパス名を指定します。
17行目:バックアップを出力するディレクトリを指定します。
19行目:バックアップを実施したいウェブ関連のファイルがあるディレクトリを指定します。
[以下は特に設定は不要、解説のみ]
31行目:データベース(mysql)のバックアップを実施してます。
35行目:データベース(mysql)のバックアップファイルを圧縮してます。
38行目:ウェブ関連ファイルのバックアップを実施してます。
設定を終えたら、ファイル(/home/user/exmaple_backup)に実行権を与えます。
$ chmod +x exmaple_backup
|
mysqldumpのパスを確認しておきましょう。パスが設定されていれば、以下のように
whichコマンドで確認できます。
$ which mysqldump
/usr/bin/mysqldump
$ which gzip
/bin/gzip
$ which tar
/bin/tar
$ which zip
/usr/bin/zip
|
SSHシェルが使えないレンタルサーバーであれば、サポートに確認すれば良いでしょう。
次にcronによる自動化を行います。
先に作成したシェルスクリプトファイル (/home/user/exmaple_backup) をクーロン(cron)を使って自動で毎日実行するように設定します。
通常、格安レンタルサーバーでは、クーロン(cron)設定用に画面が用意されていると思いますので、その場合は、その設定画面に従って設定すると良いでしょう。
( 必要な情報は、何時、何を、実行するかだけです。 )
以下は、crontabを直接設定できる自宅サーバーやroot権限を持つサーバーを借りている方向けの編集イメージです。
$ vi /etc/crontab
...
0 1 * * * root /home/user/exmaple_backup
|
こんな感じで、exmaple_backupを毎日1時0分に実行するように指定できます。
[crontabのフォーマット]
分 時 日 月 週 ユーザ 実行イメージ
※順番に注意しましょう。
ここまで設定できればOK。後は、実際に実行して、うまく動作するかどうか確認しておわりです。
クライアント側でバックアップを自動ダウンロード(Linux編)
今度は、先にサーバー側で自動的に作成したバックアップファイルを、クライアント側で自動でダウンロードしてみます。
ダウンロードには、lftp を使います。
lftpは、
UNIXおよびUnix系システム向けのコマンド行ファイル転送プログラム(FTPクライアント)の1つで、
FTPだけでなく、URLに必要なプロトコルを指定することでFTPS、HTTP、HTTPS、HFTP、FISH、SFTPも使える優れものです。
つまり、一つのコマンドでFTPもSFTPもFTPSもHTTPでも何でも扱うことができるわけです。
シェルスクリプトによる自動ダウンロードを行います。
実際のシェルスクリプトは、以下のようなイメージになります。
ここでは、ファイル名を /home/user/exmaple_download として作成し、以降、解説します。
実例(シェルの場合)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
FTPUSER=ftp_user_name
FTPPASS=ftp_password
FTPPORT=22
FTPPROT=sftp
FTPHOST=backup.exmaple.com
LFTPPATH=/usr/bin
BACKUPPATH=/home/user/backup
DOWNLOADPATH=/home/user/download
OUTPU_DB=db_`date +%Y_%m_%d`.sql.gz
OUTPU_WEB=web_`date +%Y_%m_%d`.tar.gz
TEMP_BATCH=/tmp/ftp_`date +%Y_%m_%d`.batch
echo open $FTPPROT://$FTPUSER:$FTPPASS@$FTPHOST:$FTPPORT> $TEMP_BATCH
if test $FTPPROT = "ftp" ; then
echo bin>> $TEMP_BATCH
fi
echo cd $BACKUPPATH>> $TEMP_BATCH
echo lcd $DOWNLOADPATH>> $TEMP_BATCH
echo get $OUTPU_DB>> $TEMP_BATCH
echo get $OUTPU_WEB>> $TEMP_BATCH
echo bye>> $TEMP_BATCH
$LFTPPATH/lftp -f "$TEMP_BATCH"
rm -f $TEMP_BATCH
|
[以下は環境に合わせて設定が必要な箇所]
4行目:ftp_user_nameを環境に合わせてFTP/SFTPのユーザ名を指定します。
6行目:ftp_passwordを環境に合わせてFTP/SFTPのパスワードを指定します。
8行目:22を環境に合わせてFTP/SFTPのポート番号を指定します。(デフォルトは、ftp21,sftp=22 を使用します)
10行目:sftpを環境に合わせてファイル転送に用いるプロトコル名を指定します。
12行目:backup.exmaple.comを環境に合わせてバックアップファイルをダウンロードするサーバ名(or IPアドレス)を指定します。
14行目:/usr/bin を環境に合わせてlftpのインストールパスを指定します。
17行目:バックアップファイルの保存先ディレクトリを指定します。(サーバー側)
19行目:バックアップファイルをダウンロードするディレクトリを指定します。(クライアント側)
[以下は特に設定は不要、解説のみ]
33-45行目:一時的なlftpのスクリプトファイルを作成しています。
48行目:lftpを実行してバックアップファイルをダウンロードしています。
51行目:一時的なlftpのスクリプトファイルを削除しています。
設定を終えたら、ファイルに実行権を与えます。
$ chmod +x exmaple_download
|
スタートアップ、クーロン(cron)で完全自動化を行います。
先に作成したシェルスクリプトファイル (/home/user/exmaple_download) をスタートアップに登録し、システムの起動時に自動で最新のバックアップファイルをダウンロードするようにする とか、
クーロン(cron)を使って毎日決まった時間に最新のバックアップファイルをダウンロードするようにすることもできます。
後者は、先のバックアップの自動化と同じ手順なので、ここでは前者のスタートアップに登録することで、自動化を図ってみます。
Windowsであれば、メニューのスタートアップへショートカットファイルを置けばOKですね。
Lunixでは、ファイルの編集を行うことで実現します。
Redhat系(CentOSなど)なら、/etc/rc.d/rc.local
debian系なら、/etc/rc.local
へ、/home/user/exmaple_download と追記するだけです。
$ vi /etc/rc.d/rc.local
...
/home/user/exmaple_download
|
上記は、Redhat系(CentOSなど)の場合です。
これだけです。
クライアント側でバックアップを自動ダウンロード(Windows編)
今度は、先にサーバー側で自動的に作成したバックアップファイルを、クライアント側で自動でダウンロードしてみます。
ダウンロードには、WinSCP を使います。
WinSCP は、先のLinux編で使用したlftpとほぼ同じようにスクリプトでダウンロードすることができます。
もし、WinSCPをインストールされていない場合は、以下のサイトからインストーラ付の実行ファイルをダウンロードし、インストーラの指示に従いインストールしましょう。
ダウンロード先 : http://winscp.net/eng/download.php
WinSCPは、
WinSCPは、MS-Windows上で動く オープンソースでグラフィカルなFTP、FTPS、SFTPクライアントプログラムです。
旧来のSCPプロトコルもサポートします。
このプログラムの主な機能は、ローカルコンピューターとリモートコンピュータ間で安全にファイルをコピーすることです。
これに加え、WinSCPはスクリプトと基本的なファイルマネージャー機能を提供します。
シェルスクリプトによる自動ダウンロードを行います。
実際のシェルスクリプトは、以下のようなイメージになります。
ここでは、ファイル名を C:\Documents and Settings\user\My Documents\exmaple_download.bat として作成し、以降、解説します。
実例(シェルの場合)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| @echo off
rem FTP/SFTPのユーザ名を指定します。
set FTPUSER=ftp_user_name
rem FTP/SFTPのパスワードを指定します。
set FTPPASS=ftp_password
rem FTP/SFTPのポート番号を指定します。
set FTPPORT=22
rem FTP/SFTP プロトコル名を指定します。(ftp or sftp)
set FTPPROT=ftp
rem FTP/SFTPのホスト名を指定します。
set FTPHOST=backup.exmaple.com
rem windows では、WinSCP のインストールパスを指定します。
set LFTPPATH="C:\Program Files\WinSCP"
rem FTP/SFTPサーバーのバックアップファイルの出力パスを指定します。
set BACKUPPATH=/home/user/backup
rem ローカルのバックアップダウンロードパスを指定します。
set DOWNLOADPATH="C:\Temp\Backup"
rem ダウンロードするバックアップファイル名を指定します。
rem 以下の例では、
rem db_2012_06_11.sql.gz
rem web_2012_06_11.tar.gz
rem のようなファイル名になります。
rem 自動的に日時をファイル名にしています。
set OUTPU_DB=db_%date:~-10,4%_%date:~-5,2%_%date:~-2,2%.sql.gz
set OUTPU_WEB=web_%date:~-10,4%_%date:~-5,2%_%date:~-2,2%.tar.gz
rem WinSCPスクリプト用テンポラリファイルを作成する
rem %TMP% 環境変数が設定されていないなら、フルパスを直設定しましょう。
set TEMP_BATCH=%TMP%\ftp_%date:~-10,4%_%date:~-5,2%_%date:~-2,2%.batch
echo option confirm off> %TEMP_BATCH%
echo open %FTPPROT%://%FTPUSER%:%FTPPASS%@%FTPHOST%:%FTPPORT%>> %TEMP_BATCH%
if "%FTPPROT%" == "ftp" echo bin>> %TEMP_BATCH%
echo cd %BACKUPPATH%>> %TEMP_BATCH%
echo lcd %DOWNLOADPATH%>> %TEMP_BATCH%
echo get %OUTPU_DB%>> %TEMP_BATCH%
echo get %OUTPU_WEB%>> %TEMP_BATCH%
echo bye>> %TEMP_BATCH%
rem WinSCPを実行してダウンロードする
%LFTPPATH%\WinSCP.com /script="%TEMP_BATCH%"
rem WinSCP用のスクリプトファイルを削除する
del %TEMP_BATCH%
|
[以下は環境に合わせて設定が必要な箇所]
4行目:ftp_user_nameを環境に合わせてFTP/SFTPのユーザ名を指定します。
6行目:ftp_passwordを環境に合わせてFTP/SFTPのパスワードを指定します。
8行目:22を環境に合わせてFTP/SFTPのポート番号を指定します。(デフォルトは、ftp21,sftp=22 を使用します)
10行目:sftpを環境に合わせてファイル転送に用いるプロトコル名を指定します。
12行目:backup.exmaple.comを環境に合わせてバックアップファイルをダウンロードするサーバ名(or IPアドレス)を指定します。
14行目:/usr/bin を環境に合わせてlftpのインストールパスを指定します。
17行目:バックアップファイルの保存先ディレクトリを指定します。(サーバー側)
19行目:バックアップファイルをダウンロードするディレクトリを指定します。(クライアント側)
[以下は特に設定は不要、解説のみ]
33-46行目:一時的なWinSCPのスクリプトファイルを作成しています。
48行目:WinSCPを実行してバックアップファイルをダウンロードしています。
51行目:一時的なWinSCPのスクリプトファイルを削除しています。
初めてsftpで接続した際は、以下のようなメッセージが表示されます。
サーバを探索中・・・
サーバに接続しています・・・
認証しています・・・
サーバのホスト鍵がキャッシュに見つかりませんでした。サーバがあなたが思っているも
のと同一である保証はありません。
サーバのrsa2鍵は以下の通りです:
ssh-rsa xxxx xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
このホストを信用するのなら、はいを押します。ホスト鍵をキャッシュに追加せずに接続
するには、いいえを押します。接続を中断するにはキャンセルを押します。
接続を継続し、ホスト鍵をキャッシュに追加しますか?
はい((Y)), いいえ((N)), ・L)ャンセル, 鍵のコピー((C)):
|
つまり、信用できるサイトかどうか確認しています。ここで
Y を選択しておくと、以降、このメッセージで止まることはありません。
まず、上記のバッチを編集したら、一度、接続して試すことをおすすめします。
また、もし、ダウンロードするファイル名と同じファイルが存在しても
option confirm offを設定することで、無条件に上書きされることに注意してください。
スタートアップ、タスクスケジュールで完全自動化を行います。
先に作成したバッチファイル (C:\Documents and Settings\user\My Documents\exmaple_download.bat) をスタートアップに登録し、システムの起動時に自動で最新のバックアップファイルをダウンロードするようにする とか、
タスクスケジュールを使って毎日決まった時間に最新のバックアップファイルをダウンロードするようにすることもできます。
前者は、スタートアップにバッチファイルへのショートカットを置けば良いだけです。
ここでは、後者のタスクスケジュールを使って自動化を図ってみましょう。
以下の解説では、Windows XP を使用しています。他のWindowsでは多少画面の構成などに違いがありますので、ご注意ください。
- コントロールパネルの [ タスク ] を起動します。
- [ スケジュールされたタスクの追加 ] をクリックします。
- [ 次へ ] をクリックします。
ここで、[ 参照 ]ボタンをクリックし、先に編集したバッチファイル(C:\Documents and Settings\user\My Documents\exmaple_download.bat)を選択します。
- タスク実行の単位を指定(ここでは、日単位)し、[ 次へ ] をクリックします。
ここで、以下の項目を設定します。
開始時刻 : 通常、Windowsを立ち上げているであろう時間を指定しておきましょう。
タスクの実行 :実行する間隔を指定します。ここでは毎日としておきます。
開始日 : いつから?日付を指定します。
- [ 次へ ] をクリックします。
ここで、以下の項目を設定します。
ユーザ名 : 実行するユーザ名を指定します。
パスワード :実行するユーザのパスワードを指定します。
- [ 次へ ] をクリックします。
ここで、問題なければ、[ 完了 ]ボタンをクリックして完了です。
一応、lftp のWindows版もあります。
http://redpark.posterous.com/lftp-for-windows の
Download Link: lftp423win.7z (Dec 2011) で同じようなことができます。
ただ、ちょっとbash.exe 経緯で実行する必要があるので、ワンクッション手間が必要になります。
そのため、ここでは、WinSCP を使いました。ほとんど
lftp と同じように使用できますから、バッチファイルもほとんど使いまわしです。
スケジュールは、各人の都合に合わせて行うとして、バックアップは、やっぱりやっておくべきですよね。まずは、お試しあれ。
口コミ・評判
口コミ・評判を投稿 :