【 Docker 快速部署 MySQL 8.0(2026最新实践)—— 一键启动 + 数据持久化 + 常见优化】

Docker 快速部署 MySQL 8.0(2026最新实践)------ 一键启动 + 数据持久化 + 常见优化

文章最后更新时间:2026年1月

适用镜像:mysql:8 / mysql:8.0(官方镜像,当前最新 8.0.4x 系列)

目标读者:开发、测试、运维小白 ~ 中级

MySQL 8.0 是目前企业最广泛使用的稳定版本之一,使用 Docker 部署可以做到环境一致、秒级启动、易于迁移 。本文提供最常用、最稳定的两种方式:单命令启动 + docker-compose 推荐写法,并附带常见问题解决方案。

一、准备工作(强烈建议先做)

  1. 确保 Docker 已安装并正常运行

    bash 复制代码
    docker --version
    docker compose version   # 或 docker-compose --version
  2. (可选但推荐)配置国内镜像加速(显著提升拉取速度)

    编辑 /etc/docker/daemon.json(没有就新建):

    json 复制代码
    {
      "registry-mirrors": [
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.ccs.tencentyun.com"
      ]
    }

    重启 Docker:

    bash 复制代码
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  3. 拉取最新 MySQL 8 镜像(推荐使用 mysql:8,自动跟踪 8.0 系列最新 patch)

    bash 复制代码
    docker pull mysql:8

    提示:mysql:latest 目前已指向 MySQL 9.x 创新版系列,不建议用于生产!请明确指定 88.0

二、最简单方式:一行命令启动(适合快速测试)

bash 复制代码
docker run -d \
  --name mysql8 \
  -e MYSQL_ROOT_PASSWORD=Root@2026strong \
  -p 3306:3306 \
  -v mysql8-data:/var/lib/mysql \
  --restart unless-stopped \
  mysql:8

参数说明表

参数 作用说明
--name mysql8 容器命名,方便管理
-e MYSQL_ROOT_PASSWORD=... 必填 root 初始密码(生产请用复杂密码)
-p 3306:3306 主机:容器端口映射(可改为 13306:3306 避免冲突)
-v mysql8-data:/var/lib/mysql 数据卷,防止容器删除后数据丢失(命名卷方式,最推荐)
--restart unless-stopped Docker 重启/主机重启时自动启动(生产必加)
mysql:8 镜像标签(固定 8.0 系列最新版)

快速验证是否启动成功

bash 复制代码
docker ps | grep mysql8
docker logs -f mysql8

三、推荐生产方式:docker-compose.yml(一劳永逸)

新建目录(如 ~/mysql8),然后创建 docker-compose.yml

yaml 复制代码
version: '3.8'

services:
  mysql:
    image: mysql:8                  # 或 mysql:8.0、mysql:8.0.40(指定精确版本)
    container_name: mysql8
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: Root@2026strong     # 必须修改!
      MYSQL_DATABASE: appdb                    # 可选:自动创建数据库
      MYSQL_USER: appuser                      # 可选:创建普通用户
      MYSQL_PASSWORD: App@2026user             # 可选:普通用户密码
      TZ: Asia/Shanghai                        # 时区(强烈推荐)
    ports:
      - "3306:3306"                            # 可改为 "13306:3306"
    volumes:
      - mysql8-data:/var/lib/mysql             # 数据持久化
      - ./mysql-conf:/etc/mysql/conf.d         # 自定义配置文件目录(可选)
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --default-authentication-plugin=mysql_native_password   # 兼容老客户端
      # - --innodb-buffer-pool-size=256M       # 小内存机器可加这行

volumes:
  mysql8-data:

启动:

bash 复制代码
cd ~/mysql8
docker compose up -d

四、连接测试(三种常用方式)

  1. 容器内 mysql 客户端

    bash 复制代码
    docker exec -it mysql8 mysql -uroot -p
  2. 宿主机 mysql 客户端(需先安装 mysql-client)

    bash 复制代码
    mysql -h 127.0.0.1 -P 3306 -uroot -p
  3. Navicat / DBeaver / DataGrip 等图形化工具

    主机:127.0.0.1 或 本机IP

    端口:3306(或你映射的端口)

    用户:root / appuser

    密码:你设置的密码

五、常见问题 & 优化方案

问题 解决方案
Navicat 等老客户端连接失败 --default-authentication-plugin=mysql_native_password 到 command
中文乱码 确保 command 中有 utf8mb4 设置 + 客户端连接时指定 utf8mb4
内存占用过高(云服务器 1-2核) --innodb-buffer-pool-size=128M 或 256M
想开启慢查询日志 挂载自定义 my.cnf,加入 slow_query_log=1 等参数
远程无法连接(云服务器) 1. 安全组/防火墙放行 3306 端口 2. 执行 ALTER USER 'root'@'%' IDENTIFIED BY '密码';
数据目录权限问题 使用命名卷(mysql8-data)基本不会出现;如用绑定挂载需 chmod -R 777

六、扩展:自定义 my.cnf 示例(放在 ./mysql-conf/my.cnf)

ini 复制代码
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default_authentication_plugin=mysql_native_password
lower_case_table_names=1                # Linux 下表名大小写不敏感
max_connections=500
innodb_buffer_pool_size=256M
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=1

然后在 compose 中挂载 - ./mysql-conf:/etc/mysql/conf.d

结语

使用 Docker 部署 MySQL 8.0 的核心就是:数据持久化 + 合理配置 + 自动重启

以上两种方式(单命令 / compose)已覆盖 95% 的日常场景,生产环境强烈推荐 docker-compose 方式,便于版本管理、备份、扩容。

有任何问题欢迎评论区留言~ 比如想加主从复制、读写分离、备份脚本等高级玩法,也可以继续讨论!

喜欢记得一键三连:点赞 + 收藏 + 关注,下篇见!

相关推荐
heze092 小时前
sqli-labs-Less-26
数据库·mysql·网络安全
ahauedu2 小时前
在 MySQL 中设置 `max_allowed_packet` 参数的几种方法
数据库·mysql
hunter14502 小时前
docker 在centos和ubuntu的安装
linux·docker·centos
不做码农好多年,该何去何从。2 小时前
阿里云上使用docker-compose安装禅道
阿里云·docker·云计算
无名修道院2 小时前
AI大模型应用开发-用 MySQL 存储简单数据,用 Python 操作数据库
数据库·python·mysql·ai大模型应用开发
Eaxker2 小时前
Java后端学习4:MySQL
后端·mysql
boy快快长大2 小时前
Docker简单服务迁移
运维·docker·容器
好好研究3 小时前
MobaXterm远程连接云服务器(Centos环境)及配置jdk、Tomcat、MySQL环境
java·服务器·mysql·jdk·tomcat·aliyun服务器
xixi_6663 小时前
mysql 的分组函数 ROLLUP 语法
数据库·mysql