使用docker的话,mysql 命令的 -h127.0.0.1和-hlocalhost有什么区别?

testnullundefine
  • 2.4k

使用的镜像是 mariadb:latest

$ docker pull mariadb

直接进行端口映射(忽略我又给了一个mariadb的名字):

$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mariadb mariadb:latest

映射成功之后:

clipboard.png

$ netstat -tunlp |grep 3306

信息如下:

clipboard.png

连接数据库:

$ mysql -uroot -proot

报错:

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

我知道这个错误怎么搞或者什么原因,但是如果我加了 -hIP 就没问题:

$ mysql -h127.0.0.1 -uroot -proot
$ mysql -h192.168.1.130 -uroot -proot

上面两个都没问题,但是如果 -hlocalhost 就有问题(同样上面的错误):

$ mysql -hlocalhost -uroot -proot

ping localhost 是没问题的

这个问题是我 linux 的问题还是 docker 容器方面的问题还是什么问题?
为什么 -h127.0.0.1 能工作而 -hlocalhost 却不能工作,这两者有什么区别?

回复
阅读 7.3k
4 个回答
✓ 已被采纳

区别是mysql在使用-hlocalhost选择使用的连接方式为unix-socket,而你没有在mysql的配置文件中启用:socket=/var/run/mysqld/mysqld.sock,导致这个文件不存在而使连接失败;而-hIP的形式使用的是tcp-socket

-h IP:是通过TCP/IP连接方式连接
-h localhost: 是通过socket连接方式连接

可以通过修改配置文件

protocol=tcp  # 强制使用TCP/IP 连接
skip-networking  #强制使用socket来连接。

区别是localhost需要映射到ip,配置在/etc/hosts文件里面
至于localhost不能工作,应该就是默认没有配置在hosts文件里

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏