mysqlの構築メモ

dockerでmysql, phpmyadminの環境を構築。ファイルの配置や文字コードの設定など苦戦したため自分用のメモとして残す。dumpの取得、取り込み、コンテナからの持ち出しも記載。

フォルダ構成

/root
├── /mount
│   ├── /db
│   │   ├── /docker-entrypoint-initdb.d
│   │   ├── /mysql
│   │   └── my.cnf
│   └── /phpmyadmin
│       └── /sessions
└── docker-compose.yml

バージョン

Docker version 20.10.11, build dea9396
Docker Compose version v2.2.1

docker-compose.yml

version: "3"
services:
  mysqldb:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment: 
      MYSQL_ROOT_PASSWORD: hogehoge
      MYSQL_DATABASE: hogehoge
      MYSQL_USER: hogehoge
      MYSQL_PASSWORD: hogehoge
      TZ: 'Asia/Tokyo'
    volumes:
      - ./mount/db/mysql:/var/lib/mysql  
      - ./mount/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./mount/db/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    ports:
      - "3306:3306"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - mysqldb
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOSTS='mysqldb'
    ports:
      - "3000:80"
    volumes:
      - ./mount/phpmyadmin/sessions:/sessions

my.cnf

windowsの場合はファイルを読み取り専用にしておくこと。linuxの場合はよく知らないけどchmod 644くらい。

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

起動

# docker-compose build
# docker-compose -f docker-compose.yml -p project_name up -d

phpmyadmin

http://localhost:3000/ にアクセスしてログインできるか確認。

サーバ : mysqldb
ユーザ名 : hogehoge
パスワード : hogehoge

mysql

power shellからコンテナに入り、mysql文字コード確認。

# docker exec -it コンテナ名 /bin/bash

$ mysql -u root -phogehgoe 

mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

データのエクスポート(mysqldump)と持ち出し

power shellからコンテナに入り、dumpを取得。 ※コンテナに入らずにmysqldumpを実行することも出来るが、テーブルの論理名が文字化けしたりデータが文字化けしたりとうまくいかなかった。

# docker exec -it コンテナ名 /bin/bash

$ mysqldump --default-character-set=binary -u root -phogehgoe hogehoge > /tmp/hogehoge.dump

$ exit

# docker cp コンテナ名:/tmp/hogehoge.dump hogehoge.dump

データのインポート

power shellからコンテナに入り、dumpを流し込み。

# docker exec -it コンテナ名 /bin/bash

$ mysql --default-character-set=binary -u root -phogehgoe hogehoge < /tmp/hogehoge.dump

以上、こんな感じでいいはず。