如何在docker中安装mysql5.7

26人浏览 / 0人评论 / 添加收藏

在 Docker 中安装 MySQL 5.7 非常简单,只需一条命令即可启动。下面分别给出使用 docker rundocker-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_USERMYSQL_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


全部评论