Laradockで複数DBを立ち上げたい
1つのLaradockで複数のプロジェクトを開発していたり、テスト用などで別のデータベースが欲しい場合があると思います。
今回は通常のローカル開発用のDBに加えて、テスト用のDBもコンテナ立ち上げ時に作成したいなあと思ったので、その時の方法をメモします。
この方法を発見するまでは、tableplus などのmysqlクライアントからDBを追加するようにしていました。
どうやるか
DockerではMysqlコンテナ起動時に、/docker-entrypoint-initdb.d
にマウントしたディレクトリ内の.sqlの拡張子のファイルを読み込んでそのSQLを実行します。
Laradockの mysql/docker-entrypoint-initdb.d
配下にexampleでsqlファイルが置いてあった!
これを使って、追加のDBを作成していきます。
初回起動の場合
mysqlコンテナの初回起動の場合は、上記のcreatedb.sqlファイルにDB作成するsqlを追記するだけです。
$pwd
/laradock
## 用意されてるexampleコピーして、createdb.sqlを作成
$cp mysql/docker-entrypoint-initdb.d/createdb.sql.example createdb.sql
##ファイルを開く
$vim mysql/docker-entrypoint-initdb.d/createdb.sql
一番下の//FLUSH PRIVILEGES
よりも上に以下を追加します。すでにDBをもう一個作るsqlがコメントアウトされてるので、そのDB名だけ書き換えるでもok.
CREATE DATABASE IF NOT EXISTS `任意のDB名` COLLATE 'utf8_general_ci' ;
GRANT ALL ON `任意のDB名`.* TO 'default'@'%' ;
コンテナを立ち上げる
$ docker-compose up mysql
すでに初回起動してる場合はどうする?
もうdocker-compose up
してるんだよなーっていう時は手動でcreatedb.sqlを実行する形になります
まずは、↑の手順でmysql/docker-entrypoint-initdb.d/createdb.sql
を作成して
以下を実行するだけです。
$ docker-compose exec mysql bash
$ mysql -u root -p < /docker-entrypoint-initdb.d/createdb.sql
初期データの投入とかもこれでできちゃいますね。
参考
公式にめっちゃ書いてあった
https://laradock.io/documentation/#create-multiple-databases