快速创建 MySQL 8.0 数据库容器(10 分钟内完成)
1. 从 PHP 连接到 MySQL
- 现在支持 PHP 7.1.16、7.2.4 及更高版本,无需设置默认身份验证插件(
caching_sha2_password
)。
2. 如果使用 Dbeaver
- DBeaver 是一款功能强大的跨平台数据库管理工具,适用于开发者、数据库管理员和数据分析师。以下是它的一些关键特点和功能,你可以在 DBeaver 官方网站 下载并了解更多信息。

3. 基本镜像
文件目录结构
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ tree -a .
.
├── .env
├── docker
│ └── mysql
│ └── my.cnf
├── docker-compose.yml
└── logs
├── mysql-error.log
├── mysql-query.log
└── mysql-slow.log
3 directories, 6 files
|
docker-compose.yml
文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
version: "3"
services:
db:
image: mysql:8.0
volumes:
- db-store:/var/lib/mysql
- ./logs:/var/log/mysql
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_PASS}
- TZ=${TZ}
ports:
- ${DB_PORT}:3306
db-testing:
image: mysql:8.0
volumes:
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
tmpfs:
- /var/lib/mysql
- /var/log/mysql
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_PASS}
- TZ=${TZ}
volumes:
db-store:
|
补充说明
-
开发 vs 测试:
db
容器用于开发,数据使用持久化存储卷 db-store
。
db-testing
容器用于测试,数据使用临时文件系统(tmpfs
),容器删除后数据会被清空。
-
配置管理:
- 数据库连接信息和时区通过
.env
文件设置。
- 额外的数据库配置通过
docker/mysql/my.cnf
配置文件挂载至 /etc/mysql/conf.d/my.cnf
。
-
配置更新:
- 修改
my.cnf
后,需通过 docker-compose down
和 docker-compose up
更新。
.env
文件内容
1
2
3
4
5
|
DB_NAME=test
DB_USER=test
DB_PASS=123456
DB_PORT=3306
TZ=Asia/Shanghai
|
my.cnf
配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# MySQL服务器设置
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
default-time-zone = SYSTEM
log_timestamps = SYSTEM
default-authentication-plugin = mysql_native_password
# 日志设置
log-error = /var/log/mysql/mysql-error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5.0
log_queries_not_using_indexes = 0
general_log = 1
general_log_file = /var/log/mysql/mysql-query.log
# mysql 客户端设置
[mysql]
default-character-set = utf8mb4
# MySQL客户端工具设置
[client]
default-character-set = utf8mb4
|
常用命令
-
启动容器:
-
查看容器状态:
-
登录数据库:
1
|
docker-compose exec db bash -c 'mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}'
|
-
初始化清理数据库:
1
2
|
docker-compose down --volumes
docker-compose up -d
|
字符编码设置检查
运行以下命令,确认字符集设置为 utf8mb4
:
1
|
mysql> show variables like '%char%';
|
输出结果示例:
1
2
3
4
5
6
7
8
9
|
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
+--------------------------+--------------------------------+
|
连接 GUI 工具
-
Sequel Ace:
- 名称:任意 (例如
db-mysql8.0
)
- 用户名:
test
(来自 .env
文件的 DB_USER
)
- 密码:
123456
(来自 .env
文件的 DB_PASS
)
- 数据库:test(来自
.env
文件的 DB_NAME
)
- 端口:
3306
(来自 .env
文件的 DB_PORT
)
-
Dbeaver:
- 这是另一款支持 MySQL 8 的客户端工具,界面友好。
希望这些说明清晰又有帮助,让你的 MySQL 容器开发之旅更加顺畅! 🚀 如果还有任何问题,随时告诉我哦! 😊