Docker 解决ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket

        最近几天在学习一个微服务项目的开发,其中服务器中用到了docker容器去安装mysql等环境。第一次学习的时候一切顺利,但第二天继续学习的时候发现navicat不能连接虚拟机上的mysql数据库了,然后在shell中看到了标题中的错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

        然后我仔细回想了第二天的所有操作,打开虚拟机后发现docker并没有启动,然后用了以下命令去启动docker:

systemctl start docker

        打开docker后,用了以下命令去查看容器中运行的内容:

docker ps

        运行结果见下:

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

        可以看出,现在容器中没有东西在运行,因此,此时我用了下列命令去运行mysql:

docker run -it mysql:5.7 /bin/bash

        再之后的操作和结果如下:

[root@localhost ~]# docker run -it mysql:5.7 /bin/bash
root@15cdff365676:/# mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

        这也就遇到了我们标题上提的问题,接下来讲解问题的解决方案。注意:该方案仅针对曾经正常运行过之后再遇到问题的情况,如果第一次启动就遇到了这个问题的需要寻找其它解决方案。

解决办法:

        其实在我们重新打开虚拟机并启动docker后,我们可以通过以下命令去查看曾经运行过但现在停止的服务:

docker ps -a

        比如我运行过后可以看到以下结果:

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                      PORTS     NAMES
c055de3cfdf6   mysql:5.7     "docker-entrypoint.s…"   36 minutes ago   Exited (0) 13 minutes ago             mysql

        我们可以看到有一个mysql服务被停用了,这也就是我们第一次启动的mysql,我们需要做的是重启这个mysql服务,而不是去开启一个新的服务,我们可以通过以下语句去开启这个镜像:

docker start CONTAINER_ID

        开启之后我们再查看容器中运行的服务就可以看到mysql了,之后我们再用以下命令去进入这个镜像:

docker exec -it CONTAINER_ID /bin/bash

        之后我们再去正常输入用户名和密码,就可以正常启动mysql了。

删除多余服务

        有些朋友遇到这个问题的时候在docker里面已经存在多个mysql服务了,这个时候我们需要通过两个语句来删除这些多余的服务:

docker stop CONTAINER_ID
//以上语句用于停用正在运行的服务,如果服务本身未运行,可跳过此步骤
docker rm CONTAINER_ID
//以上语句用于彻底删除某一服务

        通过以上两条语句可以逐一删除多余的mysql服务,只剩下需要的那一个,这个时候我们再去开启这个mysql服务就不会遇到相同的问题了。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值