在 Docker 中安装 MySQL 5.7 非常简单,只需一条命令即可启动。下面分别给出使用 docker run 和 docker-compose 的两种方式,并附上字符集、持久化等关键配置。
这里不再介绍如何安装docker,这个很简单,从网上下载安装即可。
1、第一步拉取镜像
命令:docker pull mysql:5.7
2、用docker启动mysql服务
docker run 命令启动docker run -d \
--name mysql57 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=你的密码 \
-v /你的宿主机路径/mysql/data:/var/lib/mysql \
-v /你的宿主机路径/mysql/conf:/etc/mysql/conf.d \
mysql:5.7
参数说明:
| 参数 | 说明 |
|---|---|
-d |
后台运行 |
--name mysql57 |
容器名称,可自定义 |
-p 3306:3306 |
端口映射 宿主机端口:容器端口 |
-e MYSQL_ROOT_PASSWORD=你的密码 |
设置 root 密码(必填) |
-v /宿主机路径/data:/var/lib/mysql |
持久化数据,防止容器删除后数据丢失 |
-v /宿主机路径/conf:/etc/mysql/conf.d |
挂载自定义配置文件目录 |
可选环境变量:
| 变量 | 说明 |
|---|---|
MYSQL_DATABASE |
自动创建指定的数据库 |
MYSQL_USER、MYSQL_PASSWORD |
创建新用户并授权(需同时指定数据库或全局权限) |
docker-compose.yml 启动(推荐)创建 docker-compose.yml 文件:
version: '3.8'
services:
mysql:
image: mysql:5.7
container_name: mysql57
restart: always
platform: linux/amd64
ports:
- "3306:3306"
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456 # root 密码
MYSQL_DATABASE: mydb # 可选,自动创建的数据库
#MYSQL_USER: user # 可选,额外用户
#MYSQL_PASSWORD: userpass # 可选,额外用户密码
TZ: Asia/Shanghai # 设置时区
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-time-zone=+08:00
- --bind-address=0.0.0.0
启动:在 yml 文件目录下执行 docker-compose up -d。
platform修改为你的系统和对应的芯片。
创建本地配置文件 ./mysql/conf/my.cnf,内容如下:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
然后重启容器使配置生效:docker restart mysql57
# 进入容器内部连接 MySQL
docker exec -it mysql57 mysql -uroot -p
# 查看字符集是否生效
SHOW VARIABLES LIKE 'character_set_%';
拉取镜像失败: macOS下,arm芯片安装mysql5.7一直超时失败,后来设置了platform才解决问题。
端口冲突:如果宿主机 3306 已被占用,可改为其他端口,如 -p 3307:3306。
权限问题:挂载目录需要赋予适当权限,或直接使用 Docker 默认卷。
数据备份:docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql

微信扫码加好友
全部评论