MySQL
bat

MySQLから特定のテーブルをダンプ、リストアするバッチファイル

More than 1 year has passed since last update.

MySQLから特定のテーブルのdump、restoreをしたいと思い、batファイルを作りました。
自分用にメモ。

初期設定

以下変数を設定する。
binPath=XXXX #MYSQL\binのパス
dbName=XXXX #データベース名
tmpFile=target_ #dump対象のテーブル一覧を出力するファイル名の接頭辞

使い方

  1. batファイルを開く
  2. モードを選択してください(dump:1 restore:2): どちらかを選択
  3. (dumpの場合)ダンプを取りたいテーブル名を指定
    ※例えば「m_」と入力すると文字列「m_」が含まれるすべてのテーブル、ビューが対象となる。
    batファイルと同じ場所に、対象テーブル一覧を記載したファイル(target_XXX.txt)とdump(dump_XXX.sql)が作成される。
  4. (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