[WSH] XAMPPのMySQLデータをバックアップするスクリプト
XAMPPのMySQLデータを、WSHスクリプトでバックアップする。
指定したデータベースを mysqldump.exe でダンプし、7z.exeで圧縮して、指定フォルダに YYYY-MM-DD.zip ファイルを作成する。
'mysqldumpコマンドのパス
Const PATH_MYSQLDUMP = """C:\xampp\mysql\bin\mysqldump.exe"""
'ユーザ名、パスワード
Const DB_USER = "root"
Const DB_PASS = "password"
'バックアップファイルを作成するフォルダ
Const PATH_BACKUP_DIR = "C:\mysql_backup"
'圧縮コマンド
' %ARCHFILE% ... 圧縮ファイル名が入る部分
' %SRCDIR% ... 圧縮するフォルダ名が入る部分
Const ARCH_COMMAND = """C:\app\7z.exe"" a ""%ARCHFILE%"" ""%SRCDIR%"""
'圧縮ファイルの拡張子
Const ARCH_EXT = ".zip"
'バックアップするデータベース名(セミコロン区切り)
Const BACKUP_DB = "mydb1;mydb2"
'------------------------------
Function dispMess( strMess, intLevel )
If intLevel <= DISP_MESS_LEVEL Then
WScript.Echo strMess
End If
End Function
'------------------------------
Const ML_FATAL = 1
Const ML_ERR = 3
Const ML_WARN = 5
Const ML_INFO = 7
Const ML_TEST = 9
Const ML_ALL = 7
DISP_MESS_LEVEL = ML_ALL
'コマンドライン引数
If WScript.Arguments.Count >= 1 Then
If IsNumeric( WScript.Arguments.Item(0) ) = True Then
If WScript.Arguments.Item(0) >= 0 Then
DISP_MESS_LEVEL = CInt( WScript.Arguments.Item(0) )
End If
End If
End If
'メッセージ
Call dispMess( "表示レベル: "& DISP_MESS_LEVEL, ML_TEST )
'------------------------------
On Error Resume Next
'ファイルシステムオブジェクト
Set objFs = CreateObject("Scripting.FileSystemObject")
'日付文字列
strDate = Replace( Cstr( date() ), "/", "-" )
'ダンプ先フォルダ
strDumpDir = PATH_BACKUP_DIR & "\" & strDate
'フォルダあり?
If objFs.FolderExists( strDumpDir ) = True _
Or objFs.FileExists( strDumpDir & ARCH_EXT ) = True Then
i = 2
Do
strTmp = strDumpDir & "-" & i
i = i + 1
Loop While objFs.FolderExists( strTmp ) = True _
Or objFs.FileExists( strTmp & ARCH_EXT ) = True
'確定
strDumpDir = strTmp
End If
'メッセージ
Call dispMess( "ダンプ先フォルダ: "& strDumpDir, ML_TEST )
'フォルダ作成
Call objFs.CreateFolder( strDumpDir )
If Err.Number <> 0 Then
Call dispMess( "フォルダ作成に失敗しました。("& strDumpDir &")", ML_FATAL )
WScript.Quit
End If
'------------------------------
'ダンプ
'------------------------------
'データベース名の配列
arrDbName = Split( BACKUP_DB, ";" )
'シェルオブジェクト
Set objShell = CreateObject("WScript.Shell")
intDumpErrCount = 0
'メッセージ
Call dispMess( vbCrLf &"ダンプを開始します。", ML_INFO )
For i = 0 To UBound( arrDbName )
'ダンプ先ファイル名
strDumpFile = strDumpDir &"\"& arrDbName(i) &".sql"
'メッセージ
Call dispMess( arrDbName(i), ML_INFO )
'実行するコマンド
strCmd = "cmd /c "& PATH_MYSQLDUMP & _
" -u "& DB_USER &" -p"& DB_PASS &" "& arrDbName(i) & _
" > "& strDumpFile
'実行
intRes = objShell.Run( strCmd, 0, True )
'結果
If intRes <> 0 Then
Call dispMess( "エラー: ダンプ失敗: "& arrDbName(i), ML_ERR )
intDumpErrCount = intDumpErrCount + 1
End If
Next
'------------------------------
'圧縮
'------------------------------
'圧縮ファイル名
strArchFile = strDumpDir & ARCH_EXT
'メッセージ
Call dispMess( vbCrLf &"圧縮ファイル名: "& strArchFile, ML_TEST )
'実行するコマンド
strCmd = ARCH_COMMAND
strCmd = Replace( strCmd, "%ARCHFILE%", strArchFile )
strCmd = Replace( strCmd, "%SRCDIR%", strDumpDir )
'実行
intRes = objShell.Run( strCmd, 0, True )
'結果
If intRes <> 0 Then
Call dispMess( vbCrLf &"エラー: 圧縮に失敗しました。", ML_FATAL )
WScript.Quit
End If
'------------------------------
'ダンプ削除
'------------------------------
If intDumpErrCount = 0 Then
Call objFs.DeleteFolder( strDumpDir )
If Err.Number <> 0 Then
Call dispMess( vbCrLf &"エラー: ダンプ用フォルダの削除に失敗しました。("& strDumDir &")", ML_ERR )
End If
Else
Call dispMess( vbCrLf &"ダンプ用フォルダは削除しませんでした。", ML_INFO )
End If
Call dispMess( vbCrLf & strArchFile &" を作成しました。", ML_INFO )




