MySQLのDB復元の自動化

mysql-auto-restoreのアイキャッチ画像 Windows

Windowsのバッチファイルを使い、MySQLのユーザーを作成し、そのユーザーを使ってDBを復元する方法を解説します。
山括弧<…>で囲まれている箇所は、ご自身の環境に合わせて書き換える必要があります。

MySQLのインストール

こちらからMySQL (mysql-installer-community-*.msi) をダウンロードします。
ダウンロードしたら同MSIファイルを実行し、インストールします。
インストール過程での設定は、すべてデフォルトのままで結構です。
ユーザーrootのパスワードはrootで設定した前提で進めます。

ユーザー作成

batファイルは以下のように作成します。

@echo off
set CWD=%~dp0

REM DBサーバー名
Set ServerName=localhost

REM ユーザー情報
Set RootUserID=root
Set RootPassword=root
Set UserID=<作成したいユーザー名>
Set Password=<作成したいユーザーのパスワード>

REM ログ出力先
Set LogPath=%CWD%

REM 起動パラメーター
if "%1"=="" (set ServerName=%ServerName%) Else (set ServerName=%1)
if "%2"=="" (set UserID=%UserID%) Else (set UserID=%2)
if "%3"=="" (set Password=%Password%) Else (set Password=%3)
if "%~4"=="" (set LogPath=%LogPath%) Else (set LogPath=%~4)

REM ログ出力
Set cmdlog=%LogPath%\CreateUserBat.log
Set sqllog=%LogPath%\CreateUserSql.log


echo User Create start. > %cmdlog%
echo ServerName=%ServerName% >> %cmdlog%
echo UserID=%UserID% >> %cmdlog%

REM ユーザー作成
mysql --host=%ServerName% --user=%RootUserID% --password=%RootPassword% -e "create user %UserID% identified by '%Password%';" > %sqllog% 2>&1

REM 権限付与
If %errorlevel%==0 (
   mysql --host=%ServerName% --user=%RootUserID% --password=%RootPassword% -e "grant all on *.* to %UserID% with grant option;" >> %sqllog% 2>&1
)

REM 終了
echo User Create Result=%errorlevel% >> %cmdlog%
exit /b %errorlevel%

DB復元

batファイルは以下のように作成します。

@echo off
set CWD=%~dp0

REM DBサーバー名
Set ServerName=localhost

REM ユーザー情報

Set UserID=<上記で作成したユーザー>
Set Password=<上記で作成したユーザーのパスワード>

REM データベース情報
Set Database=<データベース名>

REM DBファイル名
Set inFilePath=<復元したいDBのファイルパス(e.g. C:\mysql\db.dmp)>

REM ログ出力先
Set LogPath=%CWD%

REM 起動パラメーター
if "%1"=="" (set ServerName=%ServerName%) Else (set ServerName=%1)
if "%~2"=="" (set inFilePath=%inFilePath%) Else (set inFilePath=%~2)
if "%3"=="" (set Database=%Database%) Else (set Database=%3)
if "%~4"=="" (set LogPath=%LogPath%) Else (set LogPath=%~4)
if "%5"=="" (set UserID=%UserID%) Else (set UserID=%5)
if "%6"=="" (set Password=%Password%) Else (set Password=%6)

REM ログ出力
Set sqllog="%LogPath%\RestoreSql.log"
Set cmdlog="%LogPath%\RestoreBat.log"

REM 絶対パスに変換
call :GET_FILENAME "%inFilePath%"
Set inFilePath=%TmpPath%

echo DB setup start. > %cmdlog%
echo ServerName=%ServerName% >> %cmdlog%
echo inFilePath=%inFilePath% >> %cmdlog%
echo UserID=%UserID% >> %cmdlog%
echo Database=%Database% >> %cmdlog%

REM 接続確認
mysql --host=%ServerName% --user=%UserID% --password=%Password% %Database% -e "select 0;" > %sqllog% 2>&1

REM DB作成
If not %errorlevel%==0 (
   mysql --host=%ServerName% --user=%UserID% --password=%Password% -e "CREATE SCHEMA `%Database%`;" >> %sqllog% 2>&1
)

REM 復元開始
If %errorlevel%==0 (
   mysql --host=%ServerName% --user=%UserID% --password=%Password% %Database% < "%inFilePath%" >> %sqllog% 2>&1
)

REM 終了
echo DB setup Result=%errorlevel% >> %cmdlog%

GOTO :END

:GET_FILENAME
rem -%変数 を完全修飾パス名に展開します。
Set TmpPath=%~f1
GOTO :EOF

:END
exit /b %errorlevel%

TIPS

  • WebサイトとCGIを構築する方法はこちらをご覧下さい。

コメント

タイトルとURLをコピーしました