docker安装mysql后远程访问3306失败

在阿里云服务器中,安装了docker,并且启动容器后安装了mysql8.0。在容器中连接mysql一切正常,接下来就准备在本机中以navicat访问mysql,结果发现连接报错10038。然后就开始了艰难的排查之旅!

初次尝试,因为是以root用户去创建的,以为是属组问题,因此创建了一个个人用户,结果还是连接不上,想到自己安装的8.0的版本,可能会有新特性,一查发现用户密码的加密规则不同(具体加密细则可以自行查询资料),老版navicat不一定支持,于是试着将用户的加密规则修改为老版本,再次连接仍然失败!

        下图是修改密码规则过程。

查看修改后的结果:

在修改规则仍然失败后,想到会不会是端口影响,于是从本次telnet ip端口,发现22是能正常连的,3306不行,以为是防火墙缘故,因此关闭了防火墙,仍然不行。

查看了下启动的端口:

 发现端口信息正常。

这就比较纳闷了,然后百度中有个说法是阿里云会有个安全策略的配置,能够添加入口的端口访问设置,于是我走阿里云控制台上添加了下

 安全组规则中新增了一条规则

 终于成功连接!

注:

        其实在解决问题之前就操作过安全组策略,但是当时是没有用的,我想会不会是mysql版本过高导致的,于是移除了8.0的容器,重新pull了5.7版本,结果一下就炸了,因为在很久之前我曾经装过docker,并且当时尝试的就是5.7版本,导致容器报错,run启动后就直接被停用了。几经折腾后,我没找到好的办法,只能卸载docker,重装后按新流程再走一遍。

        于是卸载完成后,安装docker,下面是官方安装教程。Install Docker Engine on CentOS | Docker DocumentationInstructions for installing Docker Engine on CentOShttps://docs.docker.com/engine/install/centos/

按途中步骤安装好后,pull了8.0版本的mysql并启动,然后再接着去阿里云上新增了之前最后一步的配置,尝试用本地navicat连接,一下就成功了。。

问题猜测:

1. 采用了mysql8.0的镜像,那么外部连接工具尽量也采用新的版本,例如我本地是navicat15去连接的。之前用的11一直不行。有的博客说是mysql5.7-8.0两个版本,用户密码加密的方式不同,那么连接工具有的不支持新的密码。这个过程我也试过,回滚了加密方式,没啥用处。

2. 防火墙影响,这个是有影响的,不过我阿里云服务器上根本就没开。这个没有影响到我。。

3. docker容器在安装前,最好确认一下,是否有过安装记录,有的话需要提前把老版本记录全部清空,已有安装先卸载进行重装,避免镜像冲突。

4. 阿里云的这个安全策略确实没想到。。毕竟平时都是运维处理这个事情,自己很少考虑端口开放问题。好在折腾后还是搞定了。

整个过程大概花了我两个晚上时间,一共近4小时吧。果然亲自对服务器动手,还是要有个好心态的,踩坑的地方很多。然后docker又是没怎么用过,不太熟悉,希望能再接再厉呀--

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值