さくらインターネットのバックアップ
こちらのサーバは機能はすごく良いのですがなぜだか
バックアップだけはしてくれないんです。。。
wwwのデータが飛んでも泣きます[:あせり:]
DBデータが飛んだらさらに泣きます。。。復帰できないかも。。。[:あせり:]
そこで自動でバックアップをするためのスクリプトを作成してみました。
バックアップをとるのは、www以下全てとMySQLのデータです。
確認したクライアントはwindows XPです。
変更が必要な箇所はみどり色になっています。
バックアップ領域はサーバ上なのでそれなりの容量を取りますのでご注意ください。
私の場合約400MBのデータがあり、それのバックアップデータは160MBくらいです。
やり方は、、、
サーバにTelnetやSSHでログインします。
Telnetで行う場合は
コマンドプロンプトを立ち上げて
login:xxxxx[Enter] ←アカウント
Password:xxxxxx ←パスワード
%mkdir bak ← バックアップ用ディレクトリ作成
%cd bak ← ディレクトリ移動
%vi backup.sh ←シェルスクリプト作成
backup.sh
user=○○○ ←MySQLユーザ名
pw=△△△ ←MySQLパスワード
dbname=○○○ ←MySQLデータベース名(ユーザ名と同じ?)
dbno=□ ←データベースサーバ番号
#--config end--
PATH=/bin:/usr/bin:/usr/local/bin
d=`date +'%Y%m%d'`
rm -f bak-*
rm -f backup.log
echo "`date` data-backup start" >> backup.log
tar cjvfP ./bak-data-$d.tar.bz2 ~/www >> backup.log 2>&1
echo "`date` data-backup end" >> backup.log
echo "`date` mysql-backup start" >> backup.log
mysqldump -Q --host=mysql$dbno.db.sakura.ne.jp --user=$user --password=$pw $dbname > bak-mysql-$d.sql
gzip -9 bak-mysql-$d.sql
echo "`date` mysql-backup end" >> backup.log
保存後、Telnetにもどってくるので、
%ls ← ファイル確認
backup.log bak-data-yyyymmdd.tar.bz2
backup.sh bak-mysql-yyyymmdd.sql.gz
(この4ファイルがあればOK)
%crontab -e
00 05 * * * cd bak; sh backup.sh ←追加して保存(毎日5時に動作)
%exit
これでサーバにはデータが出来上がります。(日々上書きです。)
でもこのままではサーバに作るだけでサーバがお亡くなりになったときには
どうしようもないので、ローカルにデータを取ってくるような仕組みが必要です。
そこで、VBスクリプトを使って取得するスクリプトを作成します。
構成的には
get(フォルダ) | ftp.txt get_backup.vbs bak(フォルダ)になります。get_backup.vbsを起動すると、backup.shでサーバにできたファイルをFTPにてGETしてbakに格納します。
ftp.txt
○○○ ←FTPのアカウント
△△△ ←FTPのパスワード
prompt
cd bak
binary
mget bak*
quit
get_backup.vbs
Const Msg = 1
'---------------------------------------------------------------
'-------------start------------
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists("./bak/") Then
Else
Wscript.Echo "bakフォルダがありません。" & vbCrlf & "このファイルと同じ場所にbakフォルダを作ってください。"
Wscript.Quit -1
End If
If objFSO.FileExists("ftp.txt") Then
Else
Wscript.Echo "ftp.txtがありません。" & vbCrlf & "このままでは動きません。"
Wscript.Quit -1
End If
'date
ymd = Right("0000" & Year(Now), 4) & Right ("00" & Month(Now), 2) & Right("00" & Day(Now), 2)
yesymd = DateAdd("d", -1, Now())
ymd2 = Right("0000" & Year(yesymd), 4) & Right ("00" & Month(yesymd), 2) & Right("00" & Day(yesymd), 2)
'-------------delete old files------------
Set CurFolder = objFSO.GetFolder("./bak/")
For Each objFile In CurFolder.Files
If objFile.DateLastModified < DateAdd("d", -7, Now()) then
objFile.Delete True
Find = 1
End If
Next
Set CurFolder = Nothing
Set objFile = Nothing
if (Find and Msg) Then
DispMsg1 = "7日前より古いバックアップファイルを削除しました。" & vbCrlf
Else
DispMsg1 = ""
End if
'-------------file check-------------
If objFSO.FileExists("bak/bak-data-"+ymd+".tar.bz2") or objFSO.FileExists("bak/bak-mysql-"+ymd+".sql.gz") Then
If Msg Then
DispMsg2 = "本日のファイルが存在するので取得を行わず終了しました。" & vbCrlf
Wscript.Echo DispMsg1+DispMsg2
End If
Wscript.Quit -1
End if
'-------------ftp------------
Set WShell = WScript.CreateObject("WScript.Shell")
WShell.Run "ftp -s:ftp.txt", 0, true
Set WShell = Nothing
'-------------move file------------
If objFSO.FileExists("bak-data-"+ymd+".tar.bz2") or objFSO.FileExists("bak-data-"+ymd2+".tar.bz2") Then
objFSO.CopyFile "bak-data*", "./bak/"
objFSO.DeleteFile "bak-data*"
End If
If objFSO.FileExists("bak-mysql-"+ymd+".sql.gz") or objFSO.FileExists("bak-mysql-"+ymd2+".sql.gz") Then
objFSO.CopyFile "bak-mysql*", "./bak/"
objFSO.DeleteFile "bak-mysql*"
End If
Set objFSO = Nothing
If Msg Then
DispMsg3 = "バックアップ取得処理が終了しました。"
Wscript.Echo DispMsg1+DispMsg3
End If
WScript.Quit 0
こんな感じです。
これで日々、保存したい端末(通常立ち上げる端末)のスタートアップやタスクに
get_backup.vbsを入れておけば勝手に取ってきて保存します。
さらに、bakの中身は肥大化するので7日前より古いのは自動で削除します。
また、同日のファイルがbakの中にあればFTP取得処理を中止します。
一応今回の使用するファイルを↓においておきます。
sakurabackup.zip
ご使用は自己責任でお願いします。
TelnetやSSHやviの使い方はGoogle等で探ってください。
またファイルの中にも使用方法が書いてありますので、参照してください。
telnetやSSHを使用しないでもできそうなので、それはファイルの中を見て
やってみてください。
簡単には、backup.shの必要事項を変更してFTPでログインして、bakディレクトリ作成、backup.shを中にいれて、
さくらのコントロールパネルよりCRONの設定をします。
あと、たまにvbsが途中で強制終了されたりすると、FTPのコネクションがつかんだままに
なってしまい、PCを再起動しても直らない場合があります。
その場合は1日程度そっとしておいてあげてください。
たぶん直りますので。(少なくとも私は直りました^^;)
これでデータとDBデータのバックアップも取れて安心ですね。
MySQLのデータはたいしたことがないと思いますが、www以下のファイルは
量が多いとその分時間がかかります。
ローカルからFTPで取ってくるのもデータ量が多いとその分時間がかかります。
私の環境(約400MBのデータ)で
サーバのバックアップ5分
ローカルからのデータ取得2~3分です。(光です。圧縮後サイズで160MBくらい)
同じWindowsでもWSHのバージョンで動かない場合もあります。
自分用に作ったものなので、うまく動かなくても、、、文句は言わないでくださいね[:青ざめ:]
高機能な上に一日一回のバックアップではありますが、安心になります。
これで、またさくらインターネットが手放せなくなりました。
DBのスピードはもう少しがんばって欲しいですが、、、、
みなさんもバックアップは必ず取っておきましょうね^^