修正: 这个原因就是 跳板机 的账号密码错误,导致连不到远程数据库,只要把跳板机服务器账号密码输对,保存,重启 navicat 就搞定了
下面是我使用的镜像,以及mysql实例运行脚本
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d centos/mysql-57-centos7
启动后,在宿主机用yum安装了mysql,执行,可以连接,宿主机安装yum install -y mysql非常重要,否则用navicat是连接不上的,但只要装了,哪怕你yum remove mysql,貌似都可以连上,这个很神奇

mysql -uroot -p -h 127.0.0.1

执行,不可以,原因这个会找宿主机的sock进行连接,但是宿主机和容器直接无法通过sock互联,所以,报mysql.sock找不到,如果你想让它找到,那就得将这个文件夹和容器的设为共享卷,但是风险很大,因为这个目录宿主机还要放其他东西呢!两者共享必然混乱,请不要如此尝试
mysql -uroot -p

所以,就只能用tcp/ip链接
进入容器内,如果用localhost方式登录也是莫名奇妙报错,必须用-h 127.0.0.1才能进去,然后藏重新改密码
docker exec -it --user root mysql /bin/bash

先用-h 127.0.0.1进去,再用下面的SQL改,然后flush,重启docker就可以,但感觉没意义,可能docker启动时,-e 环境没有配置localhost的密码,只是配置了127.0.0.1的密码,但这个没意义,这里之所以写,就是图个明白
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456' PASSWORD EXPIRE NEVER;
之前一直navicat一直连不上,后来宿主机装了yum install -y mysql,然后用-h docker容器的内网可以连

后来发现127.0.0.1也可以了,有点蒙,我好像啥都没干,就好了,没安装yum install -y mysql是这不行的

远程用navicat也发现可以连了,无论是用172.17.0.2,还是127.0.0.1,这个是真神奇,为了避免下次再盲目入坑,把整个过程记录下来

文章讲述了作者在使用Docker运行MySQL容器时遇到的连接问题,包括使用不同主机地址、安装yum对连接的影响,以及如何通过设置环境变量解决localhost连接问题。

2039

被折叠的 条评论
为什么被折叠?



