焦作市网站建设_网站建设公司_HTML_seo优化
2025/12/24 23:07:11 网站建设 项目流程

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 实例。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询