news 2026/5/12 6:32:53

Docker 安装 MySQL 8.0

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 安装 MySQL 8.0

Docker 安装 MySQL 8.0 是日常运维中最常用的方式之一,核心是镜像拉取+持久化配置+适配 MySQL 8.0 特性(如密码策略、认证插件、字符集等),以下是通用且避坑的详细步骤,适配 Linux(CentOS/Debian/Ubuntu)系统,Windows/macOS 仅需微调目录路径即可。

一、前置准备:检查/安装 Docker

确保服务器已安装 Docker(推荐 20.10+ 版本),未安装则执行以下命令快速安装:

# 通用 Linux 一键安装 Docker(阿里云镜像,速度快)curl-fsSL https://get.docker.com|bash-sdocker--mirror Aliyun# 启动 Docker 并设置开机自启systemctl startdocker&&systemctlenabledocker# 验证 Docker 安装docker-v# 输出版本号即成功(如 Docker version 20.10.24, build 297e128)

二、拉取 MySQL 8.0 镜像(推荐指定具体版本)

避免拉取latest标签导致版本兼容问题,推荐指定稳定版本(如 8.0.36):

# 拉取 MySQL 8.0.36(可替换为最新 8.0.x 版本,如 8.0.37)dockerpull mysql:8.0.36# 验证镜像拉取成功dockerimages|grepmysql# 输出 mysql:8.0.36 即成功

三、创建持久化目录(核心:避免容器删除丢失数据)

MySQL 的数据、配置、日志需挂载到宿主机目录,否则容器删除后数据全部丢失:

# 创建目录(自定义路径,如 /data/mysql)mkdir-p /data/mysql/{data,conf,logs}# 赋予权限(避免容器读写权限不足,Linux 需执行)chmod-R777/data/mysqlchown-R root:root /data/mysql

Windows/macOS 无需赋权,直接创建目录即可(如D:\docker\mysql\data)。

四、启动 MySQL 8.0 容器(核心命令)

MySQL 8.0 有严格的密码策略(需大小写+数字+特殊字符),且默认认证插件可能导致旧客户端连接失败,启动命令需适配这些特性:

dockerrun -d\--name mysql8.0\# 容器名称(自定义,如 mysql80)--restart always\# 开机自启(容器崩溃/服务器重启后自动运行)-p3306:3306\# 端口映射(宿主机:容器,若3306被占用可改如 3307:3306)-v /data/mysql/data:/var/lib/mysql\# 数据持久化(核心)-v /data/mysql/conf:/etc/mysql/conf.d\# 自定义配置文件挂载-v /data/mysql/logs:/var/log/mysql\# 日志持久化-eMYSQL_ROOT_PASSWORD=MySql@123456\# root密码(必须复杂:大小写+数字+特殊字符)-eTZ=Asia/Shanghai\# 时区(解决时间差/乱码问题)-eMYSQL_DEFAULT_CHARACTER_SET=utf8mb4\# 默认字符集(兼容emoji)mysql:8.0.36\# 镜像版本(与拉取的一致)--default-authentication-plugin=mysql_native_password\# 兼容旧客户端(如Navicat 11)--character-set-server=utf8mb4\# 服务端字符集--collation-server=utf8mb4_unicode_ci\# 字符集排序规则--lower_case_table_names=1# 表名忽略大小写(可选,适配Windows习惯)

五、验证安装是否成功

1. 检查容器运行状态
dockerps|grepmysql8.0# 输出如下表示正常(STATUS 为 Up):# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES# xxxxxxxx mysql:8.0.36 "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql8.0
2. 进入容器登录 MySQL
# 进入 MySQL 容器dockerexec-it mysql8.0 /bin/bash# 登录 MySQL(输入启动命令中配置的密码 MySql@123456)mysql -uroot -p

登录成功后,执行show databases;验证,输出系统库(mysql/information_schema/performance_schema)即正常:

mysql>showdatabases;+--------------------+|Database|+--------------------+|information_schema||mysql||performance_schema||sys|+--------------------+4rowsinset(0.01sec)
3. 外部客户端连接(Navicat/DBeaver 等)

在本地/内网机器上,用数据库客户端连接:

  • 主机:服务器 IP(本地 Docker 填127.0.0.1
  • 端口:3306(若修改过则填新端口,如 3307)
  • 用户名:root
  • 密码:MySql@123456
    能连接并创建库/表即部署完成。

六、常用操作(运维必备)

# 重启 MySQL 容器dockerrestart mysql8.0# 停止 MySQL 容器dockerstop mysql8.0# 查看 MySQL 启动日志(排查问题用)dockerlogs -f mysql8.0# 备份 MySQL 数据(核心:备份挂载的 data 目录)cp-r /data/mysql/data /data/mysql/data_backup_$(date+%Y%m%d)# 删除 MySQL 容器(数据已持久化,删除后可重新启动)dockerstop mysql8.0&&dockerrmmysql8.0# 重新启动容器(仅删除容器时用,镜像仍在)dockerrun -d\--name mysql8.0\--restart always\-p3306:3306\-v /data/mysql/data:/var/lib/mysql\-v /data/mysql/conf:/etc/mysql/conf.d\-v /data/mysql/logs:/var/log/mysql\-eMYSQL_ROOT_PASSWORD=MySql@123456\-eTZ=Asia/Shanghai\mysql:8.0.36\--default-authentication-plugin=mysql_native_password

七、关键配置说明(避坑重点)

  1. 密码策略:MySQL 8.0 要求root密码至少 8 位,且需包含「大小写字母+数字+特殊字符」(如MySql@2025!),密码过简单会导致容器启动失败(日志提示ERROR: Database initialization failed)。
  2. 端口冲突:若 3306 被占用,修改端口映射(如-p 3307:3306),外部连接时用 3307 端口。
  3. 防火墙/安全组:Linux 需开放 3306 端口(云服务器需配置安全组):
    # CentOS 7/8firewall-cmd --add-port=3306/tcp --permanent&&firewall-cmd --reload# Ubuntu/Debianufw allow3306&&ufw reload
  4. 字符集utf8mb4是 MySQL 8.0 推荐字符集,兼容 emoji 表情,避免中文乱码;若用utf8会导致 emoji 插入失败。
  5. 认证插件--default-authentication-plugin=mysql_native_password解决旧客户端(如 Navicat 11、Python2 的 MySQLdb)无法连接 MySQL 8.0 的问题(MySQL 8.0 默认插件为caching_sha2_password)。

八、常见问题排查

1. 容器启动失败(STATUS 为 Exited (1))
  • 原因:密码过简单、目录权限不足、SELinux 未关闭(CentOS)。
  • 解决
    # 查看报错日志dockerlogs mysql8.0# 示例:密码过简单则重新设置复杂密码,删除失败容器后重启dockerrmmysql8.0# 重新执行启动命令(替换为复杂密码)
2. 客户端连接提示「认证失败」
  • 原因:默认认证插件不兼容旧客户端。
  • 解决:进入容器修改 root 认证插件:
    dockerexec-it mysql8.0 /bin/bash mysql -uroot -p ALTERUSER'root'@'%'IDENTIFIED WITH mysql_native_password BY'MySql@123456';FLUSH PRIVILEGES;
3. 中文乱码/时间不一致
  • 解决:启动命令中已配置TZ=Asia/Shanghaiutf8mb4,若仍乱码,在自定义配置文件中补充:
    # 创建自定义配置文件echo-e"[mysqld]\ninit_connect='SET NAMES utf8mb4'\nserver_timezone = Asia/Shanghai">/data/mysql/conf/my.cnf# 重启容器dockerrestart mysql8.0

总结

Docker 安装 MySQL 8.0 的核心是「镜像拉取+持久化挂载+适配 8.0 特性」,重点关注密码复杂度、字符集、认证插件和时区配置,避免踩坑。只要保证目录权限正确、端口开放、密码合规,即可快速部署稳定的 MySQL 8.0 实例。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 6:58:40

计算机Java毕设实战-基于springboot+vue技术的二手车交易管理系统的设计与实现基于SpringBoot+Vue的二手车交易平台设计【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/9 12:33:42

数据库介绍

数据库 1、什么是数据库 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中&#xf…

作者头像 李华
网站建设 2026/5/10 2:07:03

Python+uniapp微信小程序智慧党建活动中心系统设计与开发 三端_4xxx1rk3

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 Pythonuniapp微信小程序智慧党建活动中心系统设计与开发 三端…

作者头像 李华
网站建设 2026/5/9 10:11:01

springboot-vue购物商城系统 论文vue_o9m4k

目录已开发项目效果实现截图开发技术介绍核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果…

作者头像 李华
网站建设 2026/5/10 6:34:56

读人机沟通法则:理解数字世界的设计与形成05机器可以被测量

1. 遥测1.1. 小铃铛尖锐的叮当声让我们拥有某种低科技水平的感知能力,让我们知道有人在前台1.2. “遥测”(telemetry)这个词诞生于19世纪的法国,当时电信技术才刚出现1.2.1. 使用一种电子仪器将阿尔卑斯山最高峰勃朗峰的积雪深度传输到巴黎的过程1.2.2. …

作者头像 李华
网站建设 2026/5/9 8:17:57

Java计算机毕设之基于springBool+Vue美食分享平台的设计与实现基于SpringBoot + Vue的美食网站系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华