Docker 部署 MySQL 8.0
本文介绍如何在 Linux 环境下通过 Docker 快速部署 MySQL 8.0,并完成基础配置与远程访问授权。相比传统 yum 安装,容器化部署更利于环境隔离与迁移。
1. 拉取镜像
确保宿主机网络通畅,直接拉取官方镜像即可:
docker pull mysql:latest
如需查看可用版本,可执行 docker search mysql(注:新版 Docker CLI 已逐步弃用该命令,建议直接尝试版本号)。
2. 确认镜像
docker images | grep mysql
3. 运行容器
使用以下命令启动容器,并挂载日志、数据及配置文件到宿主机,方便后续维护:
docker run -p 3306:3306 --name mysql \
--restart=always \
--privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:latest
参数说明:
-p 3306:3306:端口映射--restart=always:容器随系统重启自动恢复-v:卷挂载,宿主机路径在前,容器路径在后-e:环境变量,设置 root 密码
4. 检查状态
查看容器是否正常运行:
docker ps
若状态为 Up 表示成功。若遇到 restarting 或报错 Failed to access directory for --secure-file-priv,通常是因为权限或目录问题,需调整配置后重启。
查看实时日志定位问题:
docker logs -f mysql
5. 进入容器内部
docker exec -it mysql /bin/bash
6. 修改 MySQL 配置
由于我们在启动时已将 /usr/local/mysql/conf 映射到容器的 /etc/mysql,因此直接在容器内编辑该路径下的配置文件。
创建/编辑配置文件
cd /etc/mysql
vi my.cnf
配置内容
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 设置东八区时区
default-time_zone = '+8:00'
# 兼容旧版客户端认证方式
authentication_policy=mysql_native_password
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
skip-character-set-client-handshake
skip-name-resolve
注意:MySQL 8.0+ 默认使用
caching_sha2_password,部分旧版客户端连接会失败,改为mysql_native_password兼容性更好。
保存退出后,重启服务使配置生效:
docker restart mysql
7. 设置自动启动
虽然启动时已加 --restart=always,但再次确认更新策略:
docker update mysql --restart=always
8. 授权远程访问
默认情况下,root 用户仅允许 localhost 登录。若需从外部工具(如 Navicat、DBeaver)连接,需修改权限。
1. 重新进入容器
docker exec -it mysql /bin/bash
2. 登录 MySQL
mysql -u root -p
# 输入密码:123456
3. 切换数据库
USE mysql;
4. 查看当前用户权限
SELECT host, user FROM user;
5. 修改认证与授权
将 root 用户的主机权限改为 %(允许任意 IP),并重置密码认证插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
UPDATE user SET host = '%' WHERE host = 'localhost' AND user = 'root';
FLUSH PRIVILEGES;
EXIT;
6. 退出容器
exit
至此,MySQL 容器已部署完成,支持远程连接。建议在防火墙中放行 3306 端口以确保外部可达。
