MySQLの環境を作る

docker-composeでMySQLを利用できる環境を作る

mysqlのイメージをそのまま利用するとWindowsでは下記の警告が発生し、my.cnfが読み込めなかった。この為、Dockerfile を介してパーミッションを変更する処理を追加した。

mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.

Windows + docker-compose + mysql で文字化けさせない方法 - Qiita

ディレクトリ構成

docker
├─docker-compose.yml
└─mysql
    ├─Dockerfile
    ├─conf.d
    │  └─my.cnf
    ├─data
    ├─logs
    └─initdb.d
        └─init.sql

docker-compose.yml

version: '3.8'
services:
  db:
    container_name: oursql5.7
    build: ./mysql/
    hostname: mysql
    environment:
      MYSQL_DATABASE: sample
      MYSQL_USER: mysql-app
      MYSQL_PASSWORD: mysql-app
      MYSQL_ROOT_PASSWORD: admin
      BIND-ADDRESS: 0.0.0.0
    ports:
      - "33060:3306"
    volumes:
      - ./mysql/initdb.d:/docker-entrypoint-initdb.d
      - ./mysql/data:/var/lib/mysql
      - ./mysql/logs:/var/log/mysql
    tty: true

Dockerfile

FROM mysql:5.7

EXPOSE 3306

ADD ./conf.d/my.cnf /etc/mysql/conf.d/my.cnf

RUN chmod 644 /etc/mysql/conf.d/my.cnf

CMD ["mysqld"]

my.cnf

[mysqld]
character-set-server=utf8mb4

#エラーログを出力
log-error=/var/log/mysql/error.log

#詳細ログを出力
general_log=ON
general_log_file=/var/log/mysql/query.log

#Slow Queryログを出力
slow_query_log=ON # slow queryログの有効化
slow_query_log_file=/var/log/mysql/slow.log # ファイルパス
long_query_time=5 # 5秒以上処理に時間がかかったクエリを記録
log-queries-not-using-indexes # インデックスが使用されていないクエリをログに出力

[mysql]
default-character-set=utf8mb4
 
[mysqldump]
default-character-set=utf8mb4

init.sql

CREATE TABLE IF NOT EXISTS t_users (
    ID              INT(11)       NOT NULL auto_increment PRIMARY KEY COMMENT 'ID',
    MAIL_ADDRESS    VARCHAR(256)  NOT NULL                            COMMENT 'メールアドレス',
    USER_NAME       VARCHAR(15)   NOT NULL                            COMMENT 'ユーザ名',
    PASSWORD        VARCHAR(256)  NOT NULL                            COMMENT 'パスワード',
    LAST_LOGIN_TIME DATETIME                                          COMMENT '最終ログイン日時',
    REGIST_TIME     DATETIME      NOT NULL                            COMMENT '登録日時',
    UPDATE_TIME     DATETIME      NOT NULL                            COMMENT '更新日時',
    DELETED         TINYINT(1)    NOT NULL DEFAULT 0                  COMMENT '削除フラグ'
) DEFAULT CHARSET=utf8mb4
;

INSERT INTO t_users (MAIL_ADDRESS, USER_NAME, PASSWORD, LAST_LOGIN_TIME, REGIST_TIME, UPDATE_TIME)
VALUES
('jack@hoge.example.jp', 'Jack', SHA2('1234567', 256), NULL, NOW(), NOW()),
('lary@hoge.example.jp', 'Lary', SHA2('1234567', 256), NULL, NOW(), NOW()),
('pitt@hoge.example.jp', 'Pitt', SHA2('1234567', 256), NULL, NOW(), NOW())
;

起動

docker-compose up -d

疎通確認

mysql -u mysql-app -p -P 33060 sample
Enter password: *********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from t_users;
+----+----------------------+-----------+------------------------------------------------------------------+-----------------+---------------------+---------------------+--------------+
| ID | MAIL_ADDRESS         | USER_NAME | PASSWORD                                                         | LAST_LOGIN_TIME | REGIST_TIME         | UPDATE_TIME         | DELETED|
+----+----------------------+-----------+------------------------------------------------------------------+-----------------+---------------------+---------------------+--------------+
|  1 | jack@hoge.example.jp | Jack      | 8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414 | NULL            | 2021-06-10 07:18:41 | 2021-06-10 07:18:41 |            0 |
|  2 | lary@hoge.example.jp | Lary      | 8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414 | NULL            | 2021-06-10 07:18:41 | 2021-06-10 07:18:41 |            0 |
|  3 | pitt@hoge.example.jp | Pitt      | 8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414 | NULL            | 2021-06-10 07:18:41 | 2021-06-10 07:18:41 |            0 |
+----+----------------------+-----------+------------------------------------------------------------------+-----------------+---------------------+---------------------+--------------+
3 rows in set (0.00 sec)