公式イメージを使う。[[MySQL]]のバージョンは8。
> https://hub.docker.com//mysql
## バージョン
| 対象 | バージョン |
| ---------- | -------------------- |
| [[Docker]] | 25.0.4 build 1a576c5 |
## 設定ファイル
[[MySQL]]のバージョンは8系。
`docker-compose.yml`
```yaml
services:
db:
image: mysql:8
container_name: mysql-sample
ports:
- 13306:3306
volumes:
- ./conf.d:/etc/mysql/conf.d
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: root
```
`conf.d/my.cnf`
```ini
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
explicit-defaults-for-timestamp=1
general-log=1
general-log-file=/var/log/mysql/mysqld.log
local-infile=1
default-time-zone='Asia/Tokyo'
[mysql]
default-character-set=utf8mb4
local-infile=1
```
## 初期化ファイル
`docker-entrypoint-initdb.d/init.sql`
```sql
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
CREATE DATABASE IF NOT EXISTS mydb;
USE mydb;
CREATE TABLE types (
`int` INT PRIMARY KEY,
`varchar` VARCHAR(255) NOT NULL,
`date` DATE,
`time` TIME,
`datetime` DATETIME,
`timestamp` TIMESTAMP,
`enum` ENUM('option1', 'option2', 'option3'),
`bool` BOOLEAN
) ENGINE=InnoDB;
INSERT INTO types VALUES
(
1,
'one',
'2024-11-26',
'11:22:33',
'2024-11-26 00:03:00',
'2024-11-26 00:03:01',
'option1',
true
),
(
2,
'two',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
);
CREATE TABLE pets (
`id` VARCHAR(32) PRIMARY KEY,
`name` VARCHAR(255) NOT NULL,
`stay` BOOLEAN NOT NULL,
`price` INT,
`joined_year` YEAR NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;
INSERT INTO pets
(`id`, `name`, `stay`, `price`, `joined_year`)
VALUES
("tatsuwo", "タツヲ", 1, 9000, 2009),
("seikichi", "セイキチ", 1, 5000, 2007),
("masaharu", "マサハル", 1, 42000, 2021),
("mitarashi", "みたらし", 1, 44000, 2021),
("wanbe", "わんべえ", 1, 3000, 2010),
("hyosuke", "ヒョウスケ", 1, NULL, 2014),
("raizo", "ライゾウ", 1, NULL, 2014),
("robao", "ロバオ", 0, NULL, 1987),
("mimizo", "みみぞう", 0, NULL, 2004),
("mimiko", "みみこ", 0, NULL, 2006),
("momochi", "ももち", 0, NULL, 2019);
```
## コマンド
### 起動
```console
docker compose up -d
```
### 接続確認
```console
docker exec -it mysql-sample mysql -u user -ppassword mydb
```
[[データベースクライアント]]が起動したら[[SQL]]を実行。
```sql
select * from pets;
```
結果が出ればOK。