Docker 一键部署 MySQL 8.0

发布时间:2026/6/26 20:54:33

Docker 一键部署 MySQL 8.0 一个 Dockerfile一个初始化脚本5分钟拿到一个随时可用的 MySQL后面接 Hive 时直接连。一、为什么还要单独写 MySQL因为 Hive 的元数据需要一个数据库来存表结构、分区信息等默认的 Derby 只能单连接生产级使用都换成 MySQL 或 PostgreSQL。核心要求使用 MySQL 8.0支持远程连接后面 Hive 要从另一个容器连字符集和时区预先配置好避免乱码和时区坑数据持久化到宿主机不会因容器删除而丢数据二、目录结构新建一个文件夹mysql-docker放以下三个文件mysql-docker/ ├── Dockerfile ├── my.cnf └── init.sql # 初始化时自动创建的 Hive 元数据库及用户三、文件内容1. DockerfileFROM mysql:8.0 # 设置 root 密码并创建 Hive 元数据库和用户通过环境变量 init.sql ENV MYSQL_ROOT_PASSWORDroot123 ENV MYSQL_DATABASEhive_metastore ENV MYSQL_USERhive ENV MYSQL_PASSWORDroot123 # 复制自定义 MySQL 配置 COPY my.cnf /etc/mysql/conf.d/my.cnf # 初始化脚本会在容器首次启动时自动执行 COPY init.sql /docker-entrypoint-initdb.d/ # 暴露默认端口 EXPOSE 33062. my.cnf[mysqld] character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci default-time-zone08:00 [client] default-character-setutf8mb43. init.sql-- 创建 Hive 元数据库 CREATE DATABASE IF NOT EXISTS hive_metastore DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建 hive 用户如果已存在则跳过 CREATE USER IF NOT EXISTS hive% IDENTIFIED WITH mysql_native_password BY root123; -- 授权 GRANT ALL PRIVILEGES ON hive_metastore.* TO hive%; -- 刷新权限 FLUSH PRIVILEGES;注意init.sql会在容器第一次启动时自动执行重复启动不会再次执行避免重复建库报错。四、构建镜像并启动容器0. 配置 Docker 镜像加速如果网络不稳定可以配置国内镜像源。在 Docker Desktop 设置 → Docker Engine 中添加{ registry-mirrors: [ https://docker.1ms.run, https://docker.xuanyuan.me ] }1. 构建方式A最简单会有高级docker 认为把密码写在 Dockerfile 不安全docker build -t mysql:8.0 .方式B忽略警告docker build --build-arg MYSQL_ROOT_PASSWORDroot123 --build-arg MYSQL_PASSWORDroot123 -t mysql:8.0 .方式 C直接加--quiet不输出警告docker build -t mysql:8.0 . 21 | grep -v SecretsUsedInArgOrEnv2. 启动容器挂载数据卷docker run -d \ --name mysql \ -p 3306:3306 \ -v /Users/用户/bigdata/dev/docker/mysql/mysql-data:/var/lib/mysql \ mysql:8.0-v将 Mac 上的mysql-data目录映射到容器内的数据目录确保数据持久化。首次启动会执行init.sql稍等约 20 秒让 MySQL 完全就绪。3. 检查运行状态docker logs mysql看到[Server] ready for connections.且没有报错即成功。五、验证连接1. 用 root 连入 MySQLdocker exec -it mysql mysql -uroot -proot123进入 MySQL 命令行后SHOW DATABASES;应能看到hive_metastore数据库。2. 测试 hive 用户连接模拟远程在 Mac 上任意 MySQL 客户端如 DBeaver、DataGrip连接Host:localhostPort:3306User:hivePassword:root123Database:hive_metastore如果连接成功说明 MySQL 已准备就绪。六、数据安全与日常维护数据备份直接备份 Mac 上的/Users/你的用户名/mysql-data目录或使用mysqldumpdocker exec mysql mysqldump -uroot -proot123 hive_metastore metastore_bak.sql镜像更新如果以后要改密码或添加其他库修改init.sql或Dockerfile重新构建即可。注意若数据卷已存在新init.sql不会再次执行需要手动删除数据卷目录。七、踩坑问题Public Key Retrieval is not allowed这个错误是因为 MySQL 8.0 默认使用caching_sha2_password认证插件而客户端连接时需要通过公钥加密密码。如果客户端没有请求公钥或者连接 URL 中没允许就会报Public Key Retrieval is not allowed。解决办法修改MySQL 用户的认证插件为老式的mysql_native_passwordALTERUSERhive%IDENTIFIEDWITHmysql_native_passwordBYroot123;FLUSHPRIVILEGES;

相关新闻