MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)

网盘分享 MySQL-8.0.32 版本 Docker 镜像文件:

链接: https://pan.baidu.com/s/1cubH9dYhtslD7nqZxlYfSA?pwd=r96p 提取码: r96p

Docker部署 MySQL8.0.32 版本

  • 1.部署流程
    • [1.1 导入镜像文件](#1.1 导入镜像文件)
    • [1.2 创建挂载目录](#1.2 创建挂载目录)
    • [1.3 添加配置文件](#1.3 添加配置文件)
    • [1.4 启动命令](#1.4 启动命令)
      • [1.4.1 核心配置参数(环境变量)](#1.4.1 核心配置参数(环境变量))
      • [1.4.2 存储与数据持久化(卷挂载)](#1.4.2 存储与数据持久化(卷挂载))
      • [1.4.3 网络与端口](#1.4.3 网络与端口)
      • [1.4.4 容器运行策略](#1.4.4 容器运行策略)
      • [1.4.5 MySQL 服务端参数(直接追加)](#1.4.5 MySQL 服务端参数(直接追加))
  • 2.总结

1.部署流程

1.1 导入镜像文件

bash 复制代码
# 上传镜像文件并导入镜像
docker load -i mysql8.0.32.tar

# 输出日志
caefa4e45110: Loading layer [==================================================>]  112.4MB/112.4MB
5ed69eb31cd7: Loading layer [==================================================>]  11.26kB/11.26kB
a9805d41c46a: Loading layer [==================================================>]  2.359MB/2.359MB
3f772020efc1: Loading layer [==================================================>]  13.93MB/13.93MB
08745f0c18ca: Loading layer [==================================================>]  7.168kB/7.168kB
0b298ddae18b: Loading layer [==================================================>]  3.072kB/3.072kB
dffcd75d4203: Loading layer [==================================================>]  178.9MB/178.9MB
27fefd67a649: Loading layer [==================================================>]  3.072kB/3.072kB
500cc6781b7e: Loading layer [==================================================>]  237.2MB/237.2MB
a5b118f152bf: Loading layer [==================================================>]  17.41kB/17.41kB
edddc37f3f38: Loading layer [==================================================>]  1.536kB/1.536kB
Loaded image: mysql:8.0.32

导入后可以使用命令查看镜像信息:

bash 复制代码
docker images

# 镜像信息
REPOSITORY                      TAG             IMAGE ID       CREATED         SIZE
mysql                           8.0.32          412b8cc72e4a   2 years ago     531MB

1.2 创建挂载目录

为的是便于编辑配置文件和查看日志信息,如果数据库的数据量比较大,也可将数据文件放在容器外(启动容器的时候挂载 data 和 log 目录即可):

bash 复制代码
# 创建挂载目录
mkdir -p /home/mysql/{conf,data,log}

1.3 添加配置文件

懂的都懂,当然也可以不添加配置文件使用默认的:

bash 复制代码
# 添加配置文件
vim /home/jsgx/mysql/conf/my.cnf

# 配置文件内容
[mysqld]
# 默认配置
log_bin=mysql-binlog
max_connections=2000
join_buffer_size=8M
read_buffer_size=8M
read_rnd_buffer_size=8M
innodb_log_buffer_size= 128M
innodb_read_io_threads=8
innodb_write_io_threads=8
innodb_buffer_pool_size=64G
table_open_cache=4000

secure_file_priv =
innodb_log_file_size=1024M
innodb_log_files_in_group=4
innodb_flush_log_at_trx_commit=0
sync_binlog=2000
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1

[client]
port=3306

[mysqldump]
quick
max_allowed_packet=1024M
net_buffer_length=64M

1.4 启动命令

在使用 Docker 启动 MySQL 容器时,可通过 docker run 命令传递多种参数来配置容器的运行环境、网络、存储以及 MySQL 本身的属性。而这些参数可以大致分为 Docker 运行参数 (控制容器行为)和 MySQL 镜像特定参数(控制数据库行为)。

以下是常用的参数详解:

1.4.1 核心配置参数(环境变量)

这些参数通常以 -e 开头,用于设置 MySQL 的初始配置和用户权限。

参数 含义 示例
-e MYSQL_ROOT_PASSWORD=yourpassword 必填 。设置 MySQL 的 root 用户密码。 -e MYSQL_ROOT_PASSWORD=123456
-e MYSQL_ROOT_HOST=% 设置允许 root 用户从哪些主机连接。% 代表任意主机(即允许远程连接),默认是 localhost -e MYSQL_ROOT_HOST=%
-e MYSQL_DATABASE=mydb 容器启动时自动创建一个指定名称的数据库。 -e MYSQL_DATABASE=test_db
-e MYSQL_USER=myuser 创建一个新用户,并赋予对 MYSQL_DATABASE 指定数据库的操作权限。 -e MYSQL_USER=john
-e MYSQL_PASSWORD=mypass 配合 MYSQL_USER 使用,设置新用户的密码。 -e MYSQL_PASSWORD=secret
-e TZ=Asia/Shanghai 设置容器时区(防止日志或时间字段出现时差问题)。 -e TZ=Asia/Shanghai

1.4.2 存储与数据持久化(卷挂载)

使用 -v 参数将宿主机的目录挂载到容器内,防止容器删除后数据丢失。

  • 数据目录-v /宿主机路径/data:/var/lib/mysql
    • 将 MySQL 的数据文件存储在宿主机,确保数据持久化。
  • 配置文件-v /宿主机路径/conf:/etc/mysql/conf.d
    • 将自定义的 .cnf 配置文件挂载到容器内,覆盖默认配置(如字符集、连接数)。
  • 日志目录-v /宿主机路径/logs:/var/log/mysql
    • 将日志文件输出到宿主机,便于排查问题。
  • 初始化脚本-v /宿主机路径/init:/docker-entrypoint-initdb.d
    • .sql.sh 脚本挂载到此目录,容器首次启动时会自动执行这些脚本(用于初始化表结构或数据)。

1.4.3 网络与端口

  • 端口映射 ( -p)
    • 语法:-p 宿主机端口:容器端口
    • 示例:-p 3306:3306 (将宿主机的 3306 端口映射到容器的 3306 端口)。
    • 如果宿主机 3306 已被占用,可以映射为其他端口,如 -p 3307:3306
  • 容器名称 ( --name)
    • 为容器指定一个易记的名称,方便后续管理(如 docker stop mysql-container)。

1.4.4 容器运行策略

参数 含义
-d 后台运行容器(detached mode)。
--restart=always 设置容器随 Docker 服务开机自启,或在崩溃后自动重启。
--privileged=true 赋予容器高权限(通常在 SELinux 或权限受限的系统中需要)。
--net=host 使用宿主机网络模式(不推荐常规使用,会失去网络隔离)。

1.4.5 MySQL 服务端参数(直接追加)

在镜像名称后面直接追加 MySQL 的启动参数,用于覆盖默认配置。

  • 字符集设置
    • --character-set-server=utf8mb4
    • --collation-server=utf8mb4_unicode_ci
  • 大小写不敏感 (仅限初始化):
    • --lower_case_table_names=1
  • SQL 模式
    • --sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

这是一个结合了上述大部分最佳实践的启动命令:

bash 复制代码
docker run -d \
  --name mysql-prod \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=StrongPassword123 \
  -e MYSQL_ROOT_HOST=% \
  -e TZ=Asia/Shanghai \
  -v /data/mysql/conf:/etc/mysql/conf.d \
  -v /data/mysql/data:/var/lib/mysql \
  -v /data/mysql/logs:/var/log/mysql \
  -v /data/mysql/init:/docker-entrypoint-initdb.d \
  --restart=always \
  mysql:8.0 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci \
  --lower_case_table_names=1

数据库的版本不同,挂载目录会存在差异,本次测试使用的命令:

bash 复制代码
docker run -d \
  --name mysql8.0.32 \
  -p 3309:3306 \
  -e MYSQL_ROOT_PASSWORD=1234567890 \
  -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
  -v /home/mysql/data:/var/lib/mysql \
  -v /home/mysql/log:/logs \
  --privileged=true \
  mysql:8.0.32 \
  --lower_case_table_names=1

2.总结

Docker 部署的优点不少,我最看中的是它只需要一行命令即可启动一个 MySQL 实例。不需要手动配置软件源、处理依赖关系,且可以离线部署。而同时,切换 MySQL 版本变得异常简单,只需更换镜像标签(如 mysql:5.7 切换到 mysql:8.0),无需重新安装或担心依赖冲突,极大地提升了部署效率。

相关推荐
李慕婉学姐1 小时前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再2 小时前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
WeiXin_DZbishe2 小时前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
tryCbest2 小时前
数据库SQL学习
数据库·sql
jnrjian2 小时前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle
十月南城2 小时前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
Henry Zhu1233 小时前
数据库:并发控制基本概念
服务器·数据库
BugShare3 小时前
继《小爱音响》详细说下怎么部署,尤其是关于Docker部分
docker·nas·xiaomusic
银发控、3 小时前
数据库隔离级别与三个问题(脏读、不可重复读、幻读)
数据库·面试