目的
EC-CUBE4のDocker環境で特定ディレクトリ内のSQLファイルすべてをコマンドラインで一括実行したい。
方法
-
SQLファイル置き場を作成するため、
docker-compose.yml
に下記のように行を追加する。docker-compose.ymlservices: mysql: volumes: - ./additional_sql:/home/additional_sql # この行を追加
docker-compose up -d
する。プロジェクトフォルダ直下に「additional_sql」フォルダが作成されるので、そこに実行させたいSQLファイルを保存する。
-
プロジェクトフォルダ直下に「additional_sql」フォルダ内のSQLファイルを全て実行するシェルスクリプトを作成する。
additional_sql.sh#!/usr/bin/env bash # additional_sqlフォルダ内の全SQLファイルをEC-CUBEのDBにて実行する。 for file in ./additional_sql/*.sql do docker-compose exec mysql bash -c "mysql -u dbuser -psecret eccubedb < /home/${file}" done
-
下記コマンドラインをプロジェクトフォルダ直下で実行する。
# WindowsのGit Bashの場合、TTYエラーを避けるためのお約束 $ exec winpty bash # additional_sqlフォルダ内の全SQLファイルを実行するシェルスクリプトを実行 $ ./additional_sql.sh
SQLファイル作成時の注意点
冒頭にCHARSET utf8;
を記述しないと、日本語が文字化けしてDB登録されてしまう。