記事一覧

Windows向け MySQL でSQLスクリプトを実行する

 

  
目次     



  

MySQLでSQLスクリプトを実行する

ハロー、みなさん。エジソンです。 

今回は、MySQLにおいて、SQLが書かれたスクリプトファイルを実行する方法を備忘録として残しておくことにします。

MySQL 5.7で検証しました。


SQLスクリプトファイルを実行してみる

ファイルが存在する場所・保存する先は、「C:\Users\username\Desktop」としています。

リスト1:mysql.sqlを保存
select * from information_schema.tables limit 10;

リスト1には、実行したいSQLを保存しましょう。select でも良いですし、insert などでもOKです。


リスト2:mysql.batを保存
@echo off

REM MySQLSQLのbinディレクトリ
set MYSQLPATH=C:\Program Files\MySQL\MySQL Server 5.7\bin\

REM 接続先情報
set HOST=127.0.0.1
set DB_NAME=mysql
set USER_ID=root
set OPTION=--default-character-set=utf8

REM スクリプト実行
"%MYSQLPATH%mysql" %OPTION% -h %HOST% %DB_NAME% -u %USER_ID% -p < mysql.sql

リスト2は、MySQLと対話するためのプログラムである、mysql の実行バッチになります。スクリプトファイルを実行するには、標準入力をリダイレクトして、任意のファイルを指定しましょう。

OPTION指定では、デフォルト文字コード指定を utf8 に設定します。日本語環境でMySQLを使う場合は、大抵の場合において utf8 なのでさほど気にしなくても良いはずです。気になる人は調べてみましょう。


リスト3:実行例
C:\Users\username\Desktop>mysql.bat
Enter password: ********
table_name
CHARACTER_SETS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_PRIVILEGES
ENGINES
EVENTS
FILES
GLOBAL_STATUS
GLOBAL_VARIABLES
…

リスト3は実行例です。mysql.bat を実行すると、パスワードの入力が求められます。認証が通ると、スクリプトファイルに書かれたSQLが実行されます。


SQLをまとめて実行

任意のディレクトリに配置しているスクリプトファイルをまとめて実行してみましょう。




このテクニックは、システム開発時にテーブルやデータの初期化スクリプトをまとめて実行したいような場合に役立ちます。開発途中における、DBのスキーマやマスタデータの追加は、往々にしてあるものです。


リスト4-1:scriptディレクトリにs1.sqlを保存
select table_name from information_schema.tables limit 10;

リスト4-2:scriptディレクトリにs2.sqlを保存
select table_schema from information_schema.tables limit 10;

リスト4-1と4-2に書かれたSQLに特別意味はありません。ここでは、スクリプトファイルを2つ用意したかったので、何かしらの select 文を書いてみました。


リスト5:mysql_loop.batを保存
@echo off

REM MySQLSQLのbinディレクトリ
set MYSQLPATH=C:\Program Files\MySQL\MySQL Server 5.7\bin\

REM 接続先情報
set HOST=127.0.0.1
set DB_NAME=mysql
set USER_ID=root
set OPTION=--default-character-set=utf8

set MYSQL_PWD=password

set curpath=%~dp0

for %%i in ("%curpath%script\*.sql") do (
	REM スクリプト実行
	"%MYSQLPATH%mysql" %OPTION% -h %HOST% %DB_NAME% -u %USER_ID% < %%i
)

リスト5は、リスト2を少々修正したものです。forループを使用して scriptディレクトリ 以下の拡張子が sql のファイルを順次実行します。もう一つリスト2と違うのは、-pオプションを削除して、MYSQL_PWDという変数を宣言していることです。

この変数にパスワードを入力しておくことで、スクリプト実行時にパスワードの入力を省略することができます。これが無いと、スクリプト実行のたびにパスワードの入力が求められるため、必須のテクニックと言えるでしょう。


リスト6:実行例
C:\Users\username\Desktop>mysql_loop.bat
table_name
CHARACTER_SETS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_PRIVILEGES
ENGINES
EVENTS
FILES
GLOBAL_STATUS
GLOBAL_VARIABLES
table_schema
information_schema
information_schema
information_schema
information_schema
information_schema
information_schema
information_schema
information_schema
information_schema
information_schema


リスト6は実行結果です。実行結果を見ると分かるように、複数のスクリプトファイルに書かれたSQLが実行されています。


環境依存情報は別のバッチファイルにまとめよう

プログラムを書く際の基本とも言えることですが、環境に依存する情報は別のファイルに定義しておくのがベターです。

本エントリにおける環境依存情報は、mysql のファイルパスと、DB接続情報などです。
以下のように書くとよいかと思います。

リスト7:env.batを保存
@echo off

REM MySQLSQLのbinディレクトリ
set MYSQLPATH=C:\Program Files\MySQL\MySQL Server 5.7\bin\

REM 接続先情報
set HOST=127.0.0.1
set DB_NAME=mysql
set USER_ID=root
set OPTION=--default-character-set=utf8

set MYSQL_PWD=password

リスト8:env.batの呼び出し
@echo off

set curpath=%~dp0

call %curpath%env.bat 

REM env.batで宣言した変数を読み取ることができる
"%MYSQLPATH%mysql" %OPTION% -h %HOST% %DB_NAME% -u %USER_ID% < hoge.sql 


まとめ

mysql.exe [オプション] -h [ホスト名] [DB名] -u [ユーザーID] < [スクリプトファイル]
パスワードを指定する場合は、set MYSQL_PWD=[パスワード] で環境変数として宣言しましょう。
関連記事

このエントリーをはてなブックマークに追加

コメント

コメントの投稿

非公開コメント

プロフィール

EZOLABブログへようこそ。
EZOLABは、札幌のソフトウェア会社です。

http://ezolab.co.jp

ezolab