如何通过Docker容器一键部署MySQL 8.0服务器?

老辰君_1627

老辰君_1627

2026-07-20

465人浏览

原创

真正“一键可用”的关键在于挂载my.cnf(含utf8mb4与mysql_native_password配置)、init.sql(建库授权并指定字符集)及数据目录(uid需为999),三者缺一不可;仅docker run -e启动必在hive连接、中文乱码、数据丢失上失败。

如何通过docker容器一键部署mysql 8.0服务器?

直接上结论:用 docker run 一条命令就能跑起来,但只靠这条命令,90% 的人会在 Hive 连接、中文乱码、远程访问失败上卡住。真正“一键可用”的关键不在启动命令本身,而在配置文件、初始化脚本和挂载路径的组合。

为什么 docker run -e MYSQL_ROOT_PASSWORD=xxx mysql:8.0 不够用?

这条命令能启动容器,但默认配置会立刻暴露三个硬伤:

  • character-set-server 是 latin1,init.sql 里建库用 utf8mb4 会失效
  • MySQL 8.0 默认认证插件是 caching_sha2_password,Hive JDBC 驱动(尤其老版本)不认,连不上
  • 容器内 /var/lib/mysql 没挂载宿主机目录,docker rm 一执行,所有表结构和数据全丢

my.cnf 必须显式挂载,且要包含这三行

不能只靠环境变量覆盖编码和时区。Docker 官方镜像不会自动读取你放在任意位置的 my.cnf —— 必须挂载到 /etc/mysql/conf.d/ 下,且文件名以 .cnf 结尾。

最小有效配置只有这三行(其他参数可后续加):

[mysqld]
character-set-server=utf8mb4
default-authentication-plugin=mysql_native_password
[client]
default-character-set=utf8mb4

注意:default-authentication-plugin 这一行决定 Hive 能不能连;[client] 段影响 mysql 命令行客户端默认编码,否则即使服务端是 utf8mb4,本地登录后 show variables like 'char%' 仍可能显示 latin1。

Dolphindb Docker
Dolphindb Docker

自动化 DolphinDB Docker 部署,支持自动架构检测(ARM64/x86_64),智能内存分配(50% 规则)以及完整数据持久化。

下载

初始化脚本 init.sql 要在容器首次启动时生效

Docker MySQL 镜像只在 /docker-entrypoint-initdb.d/ 目录下执行 .sql 或 .sh 文件,且**仅当 /var/lib/mysql 为空时才执行一次**。这意味着:

  • 如果已挂载非空目录,init.sql 永远不会运行 —— 别指望它反复建库授予权限
  • CREATE USER IF NOT EXISTS 在 MySQL 8.0 中必须配合 IDENTIFIED WITH mysql_native_password,否则用户创建成功但认证方式仍是 caching_sha2_password
  • Hive 元数据库名不能含下划线以外的特殊字符,hive-metastore 会报语法错,必须用 hive_metastore

所以 init.sql 至少得写成这样:

-- 必须用 utf8mb4 显式指定
CREATE DATABASE IF NOT EXISTS hive_metastore DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'hive'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';
GRANT ALL ON hive_metastore.* TO 'hive'@'%';
FLUSH PRIVILEGES;

挂载路径和权限最容易被忽略

宿主机目录权限不对,MySQL 容器启动直接退出,日志里只报 Permission denied,不告诉你具体哪个文件。

  • /var/lib/mysql 对应的宿主机目录(如 /mydata/mysql/data)必须属主为 UID 999(MySQL 容器内默认用户 mysql 的 UID),不是 root
  • 用 chown -R 999:999 /mydata/mysql/data,而不是 chmod 777 —— 后者反而触发 MySQL 安全拒绝
  • /etc/mysql/conf.d/my.cnf 挂载时,宿主机文件权限建议 644,否则容器内读不到
  • 不要把整个 /etc/mysql 挂载成目录,会覆盖镜像里原有的 mysql.conf.d/,导致启动失败

最终能稳定跑通 Hive 元存储的完整启动命令长这样:

docker run -d \
  --name mysql-hive \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -v /mydata/mysql/data:/var/lib/mysql \
  -v /mydata/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
  -v /path/to/init.sql:/docker-entrypoint-initdb.d/init.sql \
  mysql:8.0

复杂点从来不在“怎么启动”,而在于:挂载目录的 UID 是否匹配、my.cnf 是否落在正确路径、init.sql 是否在首次启动前就位 —— 这三处任一出错,容器都起得来,但 Hive 死活连不上。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql docker mysql 8.0

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2792

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

936

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

829

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

434

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2516

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4672

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

747

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 183人学习