TiDBを使ってみる その2

- [その１](https://qiita.com/ssugimoto/items/5738717a6a6021fff69d)では、TiDBの説明、TiDBへの接続をしました
- その２では、その１でA5M2で接続できず不便と感じたので、phpMyAdminで接続してみようと

## TiDBに対してphpMyAdminから接続してみる

- https://github.com/7474/phpmyadmin-with-basic-auth/blob/master/src/docker-compose.yml ←こちらに公開してくれているのでそれを使ってきます
- コンテナをそのまま利用して接続情報等を入れるだけです
- 基本認証あり

### compose.ymlで公開されたコンテナイメージを指定

- PMA_HOST: db_server については、何でも良いです、

```compose.yml
  phpmyadmin_with_basic_auth:
    # build:
    #   context: .
    #   dockerfile: Dockerfile
    image: ghcr.io/7474/phpmyadmin-with-basic-auth:latest
    environment:
      PMA_SSL: 1
      PMA_ARBITRARY: 1
      PMA_HOST: db_server
      BACIC_AUTH_USER: test_user
      BACIC_AUTH_PASSWORD: test_password
    ports:
     - 8080:80
    networks:
      - default
```

### docker composeコマンドで起動

```
cd compose.ymlファイルのある場所
docker compose up
```

#### Tips docker compose
:::note info
Tips docker compose
:::

`docker compose up -d` はバックグラウンド実行したい場合に使います
`docker compose --build` コンテナの再ビルドしたい場合に使います
`docker compose down --rmi all` 滅びの呪文、コンテナを停止してイメージ削除

### ブラウザで開く
- http://localhost:8080 へ

- Basic認証を入力、compose.ymlに記載した情報のまま test_user / test_password 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/b2fc3482-23c9-e4ae-44b8-088f62a2725a.png)


#### TiDBへのログイン情報を入力

|項目 |値  |説明  |
|---|---|---|
|サーバ |gatewayxxxx aws.tidbcloud.com  |TiDBへの接続で、mysql cliの `-h` ホスト指定の項目値|
|ユーザ  |XxxXXxxXxx.root |TiDBへの接続で `-u` のユーザー名の項目値  |
|パスワード |XXXXX  |TiDBへの接続で 小文字の`-p`の後に続ける文字列  |

![phpmyadmin-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/4da3cd75-57a8-fc2a-be2d-12513acf1940.png)


#### 接続後の画面例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/323aa2e2-c0e5-6bbe-f60b-bcfea2a95519.png)


![FireShot Capture 067 - localhost_18080 _ gateway01.ap-northeast-1.prod.aws.tidbcloud.com _ g_ - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1482752/49d947b6-7348-a036-a8aa-5187d66733e1.png)


### データベース接続情報と基本認証情報を環境変数にもつ場合
- PMA_HOST, PMA_USER, PMA_PASSWORD を環境変数に設定することで、接続情報の入力はスキップできます
- Git管理する場合は、gitignoreの対象にする

#### 以下のようにcompose.ymlに直接記載は推奨しない
```compose.yml
  phpmyadmin_with_basic_auth:
    image: ghcr.io/7474/phpmyadmin-with-basic-auth:latest
    environment:
      PMA_SSL: 1
      PMA_ARBITRARY: 1
      PMA_HOST: xxxx.prod.aws.tidbcloud.com
      PMA_USER: XXXXXXXX.root
      PMA_PASSWORD: XXXXXXX
      BACIC_AUTH_USER: test_user
      BACIC_AUTH_PASSWORD: test_password
    ports:
     - 8080:80
    networks:
      - default
```

#### 環境変数を利用した設定サンプル
- 環境変数用のファイル`.env`を用意して、gitignoreの対象にする
- `.env`に接続情報を記載する
- .envファイルの例
```.env
PMA_HOST=xxxx.prod.aws.tidbcloud.com
PMA_USER=XXXXX.root
PMA_PASSWORD=XXXXX
BACIC_AUTH_USER=test_user
BACIC_AUTH_PASSWORD=test_password
```

- compose.ymlでは、`.env`を利用する
- env_fileで envファイルを指定しなくても `.env`は docker composeではデフォルトで読み込みします。
- 値は${...}で指定する
- compose.ymlの例
```compose.yml
  phpmyadmin_with_basic_auth:
    image: ghcr.io/7474/phpmyadmin-with-basic-auth:latest
    ## env_file: 
    ##   - ./.env
    environment:
      PMA_SSL: 1
      PMA_ARBITRARY: 1
      PMA_HOST: ${PMA_HOST}
      PMA_USER: ${PMA_USER}
      PMA_PASSWORD: ${PMA_PASSWORD}
      BACIC_AUTH_USER: ${BACIC_AUTH_USER}
      BACIC_AUTH_PASSWORD: ${BACIC_AUTH_PASSWORD}
    ports:
     - 8080:80
    networks:
      - default
```