1
1

More than 1 year has passed since last update.

Laradockのmysqlコンテナ内で複数DBを立ち上げる

Last updated at Posted at 2023-02-09

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1