解决远程连接 docker中mysql 失败

在docker安装好mysql之后 端口也设置好,同时云服务器的端口3306也打开。但是使用navicat 连接不上。

请添加图片描述

其实是因为Navicat只支持旧版本的加密,需要更改mysql的加密规则

进入MySQL容器,登陆MySQL

docker exec -it mysql /bin/bash

登陆mysql**

mysql -u root -p

输入密码

这个时候会提示输入密码,输入即可。

进行授权远程连接授权

GRANT ALL ON . TO ‘root’@‘%’;

刷新权限

flush privileges;

更改加密规则

ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVER;

更新root用户密码

ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;

刷新权限

flush privileges;

然后就可以使用 Navicat 连接数据库了。

### 验证 Docker 环境下 MySQL远程连接配置正确性 要验证 Docker 容器中的 MySQL 是否能够成功接受远程连接,可以通过以下几个方面来确认: #### 1. **检查容器网络设置** 通过 `docker inspect` 命令获取容器的 IP 地址以及其绑定的网络信息。这一步可以帮助确认容器是否已经暴露了必要的端口并分配了有效的内部 IP 地址。 ```bash docker inspect mysql-master --format="{{json .NetworkSettings.Networks}}" ``` 上述命令会返回 JSON 格式的网络详情,其中包含容器所使用的子网及其对应的 IP 地址[^1]。 #### 2. **确保主机端口映射无误** 在运行容器时,需指定 `-p` 参数将宿主机上的某个端口号映射到容器内的服务端口上。例如,在创建名为 `mysql7` 的容器实例时,已设置了外部可访问的端口为 `13306` 映射至容器内默认数据库监听端口 `3306`: ```bash docker run -p 13306:3306 --name mysql7 ... ``` 此操作允许来自外界对宿主机该特定端口发起请求,并转发给目标容器的服务进程处理[^2]。 #### 3. **调整 MySQL 用户权限** 进入正在运行的 MySQL 实例中执行 SQL 脚本授予 root 或其他用户针对任意客户端(`%`)完全控制权: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES; ``` 注意替换 `'your_password'` 成实际密码值。完成之后退出 shell 并重启关联的服务以应用更改效果。 #### 4. **测试连通性** 利用 telnet 工具或者 netcat (`nc`) 来初步判断是否有数据包抵达服务器端: ```bash telnet your_host_ip 13306 # or using nc command if available on system nc -zv your_host_ip 13306 ``` 如果显示握手失败,则可能是防火墙阻止流量;如果是超时错误则表明路由存在问题或者是目的地址不可达等问题存在。 #### 5. **安全加固建议** 对于生产环境而言,应该遵循最小化原则只开放必要接口和服务端口,同时考虑启用 SSL/TLS 加密传输保护敏感资料免受中间人攻击威胁。另外还应定期更新镜像版本修复潜在漏洞风险[^4]。 --- ### 排查方法总结 当遇到无法正常建立远程链接的情况时可以从以上几个角度逐一排查问题根源所在直至找到解决办法为止。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值