Docker安装MySQL 8并配置远程连接与解决2059错误
本文详细介绍了在Linux系统中利用Docker容器化技术部署MySQL 8.0的全过程。内容涵盖从镜像获取、带持久化参数的容器创建、命令行交互登录,到核心的远程访问权限配置。针对MySQL 8默认的caching_sha2_password加密机制导致的第三方客户端(如Navicat)连接失败问题(错误代码2059),提供了将认证方式降级为mysql_native_password的具体修复方案。
结果与目标
完成本地或服务器环境下的MySQL 8实例快速搭建,实现通过局域网IP地址进行远程数据库连接,并排除因新版本加密规则不兼容引发的连接阻断。
准备条件
- 已安装并运行Docker服务的Linux主机。
- 拥有sudo或root权限,以便执行系统命令。
- 用于连接的MySQL客户端工具(如Navicat、DBeaver或命令行)。
第1步:获取MySQL镜像
目的:确保本地拥有最新的MySQL 8.0标准镜像文件,这是启动容器的基础依赖。
操作入口:终端命令行。
docker pull mysql
默认情况下,上述命令会下载当前官方仓库中最新的稳定版本标签(latest)。若需固定版本以避免后续兼容性变更,可显式指定版本号,例如 docker pull mysql:8.0。
第2步:启动MySQL容器
目的:基于镜像创建容器,映射端口并设置初始管理员密码,使服务对外可用。
重要参数说明:
--name dockermysql:指定容器运行的别名,便于后续管理。-p 3306:3306:将宿主机的3306端口映射至容器的3306端口,实现外部网络对数据库端口的访问。-e MYSQL_ROOT_PASSWORD=mysqlpassword:初始化环境变量,设定root用户的登录密码。**请务必妥善记录此密码**,后续无法轻易查看明文。-d:后台守护进程模式运行容器。
执行命令:
docker run --name dockermysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=YourStrongPassword -d mysql
注:请将 YourStrongPassword 替换为您自定义的高强度密码。
第3步:验证容器状态
目的:确认容器是否处于“Up(运行中)”状态。
操作入口:终端命令行。
docker ps
检查输出列表中的 dockermysql 容器,若 STATUS 列显示为 Up,则表示数据库服务正在运行。
第4步:进入容器交互环境
目的:为了执行数据库内部的账号授权配置,需要直接进入容器内部的操作系统环境中。
操作入口:终端命令行。
docker exec -it dockermysql bash
此时命令提示符发生变化,表明已进入容器文件系统。
第5步:登录MySQL数据库
目的:使用之前设置的密码进入数据库命令行界面,开始进行权限修改。
操作入口:容器内的 Bash Shell。
mysql -u root -p
输入前文设置的环境变量密码后回车,若成功进入 mysql> 提示符,则准备就绪。
第6步:配置远程访问权限
目的:允许非本机(即Host为 % 任意主机)的用户使用root账号进行连接。
- 切换系统库:用户信息存储在mysql库中。
use mysql;
- 授权所有权限:
grant all privileges on *.* to 'root'@'%';
其中 * 代表所有数据库和所有表,'%'@'%' 表示允许任何IP地址连接。刷新权限使其立即生效(部分版本可能不需要显式刷新,但建议加上):
flush privileges;
第7步:解决Navicat连接报错2059
目的:解决因MySQL 8.0更改默认身份验证插件导致的客户端连接拒绝问题。
现象描述:使用较新版本的数据库管理工具连接时,弹出错误代码 2059 (Authentication plugin ‘caching_sha2_password’ cannot be loaded)。
排查步骤: 在MySQL命令行查询当前的身份验证插件设置:
select Host,User,plugin from user;
解决方案:将root用户(及其他特定用户)的认证方式改回旧版的 mysql_native_password,该方式兼容性最好。
执行命令:
alter user 'root'@'%' identified with mysql_native_password by 'YourStrongPassword';
此处需再次确认填写的是正确的root密码。修改完成后,结果应显示如下:
执行完该命令后,无需重启容器即可在第三方工具中测试连接,通常已成功恢复访问。
简要总结
通过在Docker中部署MySQL 8,结合适当的端口映射和环境变量初始化,可以快速获得一个可用的数据库服务。关键在于处理新版加密协议与旧版客户端的兼容性问题,手动重置认证插件即可彻底解决连接难题。以上就是Docker部署MySQL 8及解决远程连接问题的详细内容,更多关于Docker数据库管理及故障排查的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









