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
以上、こんな感じでいいはず。