📄 Docker 安装 MySQL 8.0.30 技术文档
一、基础信息
-
MySQL 版本:8.0.30
-
Docker 环境:任意支持 Docker 的 Linux 系统
-
数据与配置持久化路径:
-
数据目录:
/usr/local/docker_data/mysql/data
-
配置目录:
/usr/local/docker_data/mysql/conf
-
日志目录:
/usr/local/docker_data/mysql/logs
-
-
容器名称:
mysql8
-
拉取镜像:
docker pull mysql:8.0.30
二、创建相关目录
mkdir -p /usr/local/docker_data/mysql/{conf,data,logs}
三、准备配置文件
你可以手动创建一个基本的 my.cnf
配置文件到 /usr/local/docker_data/mysql/conf/my.cnf
:
[mysqld]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-host-cache
skip-name-resolve
[client]
default-character-set=utf8mb4
❗ 注意:如配置目录为空,MySQL 容器会启动失败或加载默认配置。
四、运行 MySQL 8.0.30 容器
docker run -d \
--name mysql8 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /usr/local/docker_data/mysql/data:/var/lib/mysql \
-v /usr/local/docker_data/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/docker_data/mysql/logs:/var/log/mysql \
mysql:8.0.30
或者使用启动脚本:
#!/bin/bash
# 配置参数
CONTAINER_NAME="mysql8"
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD="123456"
DATA_DIR="/usr/local/docker_data/mysql/data"
CONF_DIR="/usr/local/docker_data/mysql/conf"
LOGS_DIR="/usr/local/docker_data/mysql/logs"
# 创建目录(如果不存在)
mkdir -p "$DATA_DIR" "$CONF_DIR" "$LOGS_DIR"
# 启动 Docker 容器
docker run \
--name "$CONTAINER_NAME" \
-p ${MYSQL_PORT}:3306 \
--restart unless-stopped \
-e MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD}" \
-d \
-v "$DATA_DIR":/var/lib/mysql \
-v "$CONF_DIR":/etc/mysql/conf.d \
-v "$LOGS_DIR":/var/log/mysql \
mysql:8.0.30 \
--lower_case_table_names=1
五、验证容器状态
docker ps -a
docker logs -f mysql8
六、常见问题与解决方案
❌ 问题一:Plugin mysql_native_password
is not loaded
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
✅ 解决方案:
MySQL 8.0 默认使用 caching_sha2_password
插件,不需要切换。如果确实要用 mysql_native_password
:
-
在容器启动时配置:
-
在
my.cnf
中添加:default_authentication_plugin=mysql_native_password
-
-
或换用支持此插件的版本(较旧版本)
-
否则无需强制切换,客户端使用新版驱动支持即可。
❌ 问题二:Can't open shared library 'auth_native_password.so'
INSTALL PLUGIN mysql_native_password SONAME 'auth_native_password.so';
ERROR 1126 (HY000): Can't open shared library ...
✅ 说明:
MySQL较新的版本默认并不支持 INSTALL PLUGIN mysql_native_password
方式启用;推荐直接在配置中指定插件,而不是动态加载。或者使用 8.0.30版本
❌ 问题三:Cannot boot server version 80030 on data directory built by version 90300
InnoDB: Cannot boot server version 80030 on data directory built by version 90300. Downgrade is not supported
✅ 解决方案:
你可能曾使用过 MySQL 9.x 写入了数据目录 /usr/local/docker_data/mysql/data
,现在用 8.0.30 启动,不能向下兼容。
解决方法:
# 删除旧数据目录(谨慎操作)
rm -rf /usr/local/docker_data/mysql/data/*
# 重新启动容器,会重新初始化数据目录
docker restart mysql8
七、允许远程连接
-
登录容器:
docker exec -it mysql8 mysql -uroot -p
-
修改用户权限:
ALTER USER 'root'@'%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
-
修改防火墙或服务器安全组,放行 3306 端口。
八、其他说明
/etc/mysql/conf.d/
目录说明:
这是容器默认挂载的配置目录,你挂载 my.cnf
到这里,可以覆盖默认设置。不是必须,但推荐使用以便管理配置文件。
九、卸载 MySQL 镜像与容器(如需重新部署)
# 停止并删除容器
docker stop mysql8
docker rm mysql8
# 删除镜像(列出镜像ID后删除)
docker images | grep mysql
docker rmi mysql:8.0.30