dockerのphpMyAdminでMYSQLのサーバ複数を管理する
- phpMyAdminには1個のphpMyAdminで複数のサーバを管理する機能があるがdockerで複数管理は行ったことがなかったので調べてみた
- MYSQLのサーバ毎に個別のID, PASSを使いたい場合は以下の方法ではできないので、config.user.inc.phpを使った方法を使わないといけない気がする。
利用するdockerのイメージ
設定方法
docker hubのphpMyAdminのページを見るとdocker-composeを使って任意のサーバに対してphpMyAdminを使う方法のサンプルの記載がある
Usage with docker-compose and arbitrary server
This will run phpMyAdmin with the arbitrary server option - allowing you to specify any MySQL/MariaDB server on the login page.
version: '3.1' services: db: image: mariadb:10.3 restart: always environment: MYSQL_ROOT_PASSWORD: notSecureChangeMe phpmyadmin: image: phpmyadmin restart: always ports: - 8080:80 environment: ← ここの環境変数に値を追加すれば任意のホストに接続できるようになる - PMA_ARBITRARY=1
docker hubの上記の記載のもう少し下にdocker-compose.ymlで渡せる環境変数の一覧(Environment variables summary)が書かれており、その中にPMA_HOSTS - define comma separated list of address/host names of the MySQL serversの記載がある。
- 接続したいmysqlのサーバをmysql1,mysql2、ID: root PASS: passwordとした場合、docker-compose.ymlを以下のように書き換える
version: "3" services: phpmyadmin: image: phpmyadmin/phpmyadmin:5.1.3 restart: always environment: - PMA_ARBITRARY=-1 - PMA_HOSTS=mysql1,mysql2 - PMA_USER=root - PMA_PASSWORD=password ports: - 8080:80
テスト用サンプルdocker-compose.ymlの使い方
- docker-compose..ymlと同じディレクトリにmainのディレクトリを作成してその中に*.sqlのファイルを置くとmysql-mainにデータがインポートされてから起動する
- 今回利用しているのはMYSQLの公式サイトにある
Other MySQL Documentation https://dev.mysql.com/doc/index-other.htmlの中のworld databaseを展開したデータ
- 今回利用しているのはMYSQLの公式サイトにある
- サンプルデータを利用しない場合は- ./main:/docker-entrypoint-initdb.d:roの行をコメントアウトするか削除してください
- 準備ができたらdocker-compose.ymlのファイルのある所でdocker-compose up -dをすると起動します
- 終わらせる時はdocker-compose.ymlのファイルのある所でdocker-compose down -vをするとupした時にできたボリュームのデータも一緒に消えます。
ディレクトリ構成
. ├── docker-compose.yml └── main └── world.sql
docker-compose.yml
- phpMyAdminはhttp://localhost:8080ポートで起動
- mysqlは1個目がmysql-mainでホストのポート13306で起動
- mysqlは2個目がmysql-subでホストのポート23306で起動
version: "3" services: mysql-main: image: mysql:5.7.38 restart: always ports: - "13306:3306" volumes: - main_db_data:/var/lib/mysql:rw - ./main:/docker-entrypoint-initdb.d:ro environment: MYSQL_ROOT_PASSWORD: secret MYSQL_USER: master MYSQL_PASSWORD: password mysql-sub: image: mysql:5.7.38 restart: always ports: - "23306:3306" volumes: - sub_db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: secret MYSQL_USER: sub MYSQL_PASSWORD: password phpmyadmin: image: phpmyadmin/phpmyadmin:5.1.3 restart: always environment: - PMA_ARBITRARY=-1 - PMA_HOSTS=mysql-main,mysql-sub - PMA_USER=root - PMA_PASSWORD=secret ports: - 18080:80 depends_on: - mysql-main - mysql-sub volumes: main_db_data: sub_db_data: