skydum

個人的な作業記録とか備忘録代わりのメモ

dockerのphpMyAdminで複数のMYSQLサーバを管理する

dockerのphpMyAdminMYSQLのサーバ複数を管理する

  • 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にデータがインポートされてから起動する
  • サンプルデータを利用しない場合は- ./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

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: