MySQLから特定のテーブルのdump、restoreをしたいと思い、batファイルを作りました。
自分用にメモ。
初期設定
以下変数を設定する。
binPath=XXXX #MYSQL\binのパス
dbName=XXXX #データベース名
tmpFile=target_ #dump対象のテーブル一覧を出力するファイル名の接頭辞
使い方
- batファイルを開く
- モードを選択してください(dump:1 restore:2): どちらかを選択
-
(dumpの場合)ダンプを取りたいテーブル名を指定
※例えば「m_」と入力すると文字列「m_」が含まれるすべてのテーブル、ビューが対象となる。
batファイルと同じ場所に、対象テーブル一覧を記載したファイル(target_XXX.txt)とdump(dump_XXX.sql)が作成される。 - (restoreの場合)「dump_」以降のダンプファイル名を入力してください(拡張子入力不要)
mysqldump&restore.bat
@ECHO OFF
REM 遅延環境変数を有効化
SETLOCAL enabledelayedexpansion
REM 各種設定
SET binPath=XXXX
SET filePath=%~dp0
SET dbName=XXXX
SET tmpFile=target_
SET tables=
REM モード選択
SET /P mode="モードを選択してください(dump:1 restore:2): "
IF "%mode%" EQU "1" (
ECHO mode:dump
:DUMP
SET /P tableName="テーブル名を入力してください: "
REM カレントディレクトリをMySQL\binへ変更
cd %binPath%
REM バックアップ対象を抽出
mysql -u root -h localhost -N information_schema -e "SELECT table_name FROM information_schema.tables WHERE table_schema = '%dbName%' AND table_name LIKE '%%!tableName!%%'" > %filePath%%tmpFile%!tableName!.txt
FOR /F %%a IN (%filePath%%tmpFile%!tableName!.txt) DO (
IF "!tables!" EQU "" (
SET tables=%%a
) ELSE (
SET tables=!tables! %%a
)
)
mysqldump -u root -h localhost %dbName% !tables! > %filePath%dump_!tableName!.sql
ECHO dump作成完了しました
SET /P contDump="続けてdumpしますか?(y/n): "
IF "!contDump!" EQU "y" (
GOTO DUMP
) ELSE (
GOTO END
)
) ELSE IF "%mode%" EQU "2" (
ECHO mode:restore
:RESTORE
SET /P dumpFile="「dump_」以降のダンプファイル名を入力してください(拡張子入力不要):"
ECHO restore start...
mysql -u root -D %dbName% < %filePath%dump_!dumpFile!.sql
ECHO restore end
SET /P contRest="続けてrestoreしますか?(y/n): "
IF "!contRest!" EQU "y" (
GOTO RESTORE
)
)
:END
ENDLOCAL