docker-compose启动mysql8

快速创建 MySQL 8.0 数据库容器(10 分钟内完成)

1. 从 PHP 连接到 MySQL

  • 现在支持 PHP 7.1.16、7.2.4 及更高版本,无需设置默认身份验证插件(caching_sha2_password)。

2. 如果使用 Dbeaver

  • DBeaver 是一款功能强大的跨平台数据库管理工具,适用于开发者、数据库管理员和数据分析师。以下是它的一些关键特点和功能,你可以在 DBeaver 官方网站 下载并了解更多信息。 {9E43B06C-97FF-4F56-AC8B-4215974F8C57}.png

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 downdocker-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. 启动容器:

    1
    
    docker-compose up -d
    
  2. 查看容器状态:

    1
    
    docker-compose ps
    
  3. 登录数据库:

    1
    
    docker-compose exec db bash -c 'mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}'
    
  4. 初始化清理数据库:

    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 工具

  1. Sequel Ace:

    • 名称:任意 (例如 db-mysql8.0)
    • 用户名:test(来自 .env 文件的 DB_USER
    • 密码:123456(来自 .env 文件的 DB_PASS
    • 数据库:test(来自 .env 文件的 DB_NAME
    • 端口:3306(来自 .env 文件的 DB_PORT
  2. Dbeaver:

    • 这是另一款支持 MySQL 8 的客户端工具,界面友好。

希望这些说明清晰又有帮助,让你的 MySQL 容器开发之旅更加顺畅! 🚀 如果还有任何问题,随时告诉我哦! 😊

Licensed under CC BY-NC-SA 4.0
最后更新于 Mar 26, 2025 09:29 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up