navicat无法远程连接docker安装的mysql的解决方案、mysql无法远程连接的解决思路、mysql无法连接的原因分析

写在前面

场景中涉及到的机器列表:

机器

备注

机器GR2_Win10

个人电脑2,安装了windows10操作系统机器k8s-master-1这是在机器GR2_Win10 上通过Vmware软件实现的虚拟机
vmware上安装了centos7操作系统
centos7上安装docker
docker里安装了禅道系统(版本为12.3.3)
机器ip地址为192.168.152.100

场景:

禅道系统(版本为12.3.3)内置的mysql数据库的端口号3306和宿主机机器k8s-master-1的端口号13306做了映射

需求:

机器GR2_Win10上的navicat软件无法连接禅道系统(版本为12.3.3)内置的mysql数据库

连接的时候报两种错误

错误1:

错误2:

请找出错误原因并解决

步骤一、能否ping通机器k8s-master-1

  • 第1步:打开你的cmd窗口
  • 第2步:执行ping命令,看下能否ping通
C:\Users\fenglv>ping 192.168.152.100

正在 Ping 192.168.152.100 具有 32 字节的数据:
来自 192.168.152.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.152.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.152.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.152.100 的回复: 字节=32 时间<1ms TTL=64

192.168.152.100 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

如果看到有TTL字样,类似上面的输出内容,说明是可以ping通的,直接跳到步骤二

如果不能ping通,那就要想办法先解决ping通的问题,问题解决之后跳到步骤二

步骤二、执行telnet命令看下能否连接上机器k8s-master-1的13306端口号

  • 第1步:打开机器GR2_Win10的cmd窗口
  • 第2步:执行telnet命令,看下能否连接上
C:\Users\fenglv>telnet 192.168.152.100 13306

如果看到的结果如下,说明无法连接上,继续看步骤三

步骤三、查看机器k8s-master-1的iptables相关情况及监听端口号

执行命令sudo iptables -n -L -v | grep DOCKER -C 5查看映射的端口号是否已经添加到iptables的放行规则中,如果看到类似下面的结果,说明已经已经添加了。

请注意,docker容器在端口映射时,会自动把映射的宿主机的端口添加到iptables的放行规则中,所以我们可以直接telnet到宿主机的端口。

执行命令sudo netstat -tunpl查看监听的端口号中是否监听了13306端口:

### Navicat 连接 DockerMySQL解决方案 当遇到 Navicat 无法连接到运行在 Docker 容器中的 MySQL 数据库时,通常会涉及以下几个方面的原因分析解决方法: #### 1. **确认 MySQL 容器已正常启动** 确保 Docker 容器内的 MySQL 服务正在运行。可以通过 `docker ps` 命令查看当前活动的容器列表。如果目标容器未显示,则说明其可能未正确启动[^1]。 此外,可以进一步验证 MySQL 是否在容器内部正常工作: ```bash docker exec -it <container_id_or_name> bash mysql -u root -p ``` 上述命令用于进入容器并测试是否能够通过本地客户端访问 MySQL。如果能成功登录,则可排除 MySQL 自身的服务异常问题。 --- #### 2. **检查端口映射配置** Navicat 默认需要通过主机上的指定端口来访问容器中的 MySQL 实例。因此,在创建或运行 Docker 容器时需设置正确的端口映射参数 `-p` 或 `--publish`。例如: ```bash docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 mysql:tag ``` 此操作将把宿主机的 3306 端口绑定至容器内的默认 MySQL 端口 (同样为 3306)[^1]。如果没有执行此类映射或者端口号匹配,可能导致连接失败。 另外还可以利用以下指令检验实际开放情况: ```bash netstat -an | grep LISTEN ``` 寻找是否有监听于所设定外部接口地址与对应端数之上之记录存在。 --- #### 3. **处理权限足引发的问题** 即使网络可达性和端口转发均无误,仍可能存在因用户授权范围受限而导致拒绝访问的情况。此时应赋予特定账户允许来自任意 IP 地址(`%`)的数据请求权利: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES; ``` 注意替换 `'root'`, `%`, 和密码字段为你实际情况下的值。完成更改之后记得重启数据库服务使新规则生效。 --- #### 4. **防火墙及其他安全机制干扰排查** 有时即便完成了以上步骤依旧遭遇阻碍可能是由于操作系统层面的安全防护措施所致比如 Windows Defender Firewall/Linux iptables etc.. 。故而建议临时关闭这些组件做一次全面检测以便定位真正原因所在: 对于 Linux 用户而言, ```bash sudo ufw disable # or iptables -F ``` 而对于 windows 则可通过图形界面管理工具实现快速开关功能。 最终一旦确定是由这类因素引起的话则应当调整相应策略而非彻底禁用它们从而保障整体安全性受影响。 --- ### 总结代码片段展示如何构建带适当选项启动含暴露必要端口给外界使用的Mysql实例样例程序如下所示: ```bash docker run --name=mysql-server \ -e MYSQL_ROOT_PASSWORD=examplepassword \ -d \ -p 3306:3306 \ mysql:latest ``` 随后按照前述指导逐一核验直至找到确切症结为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值