素材牛VIP会员
使用docker的话,mysql 命令的 -h127.0.0.1和-hlocalhost有什么区别?
 ji***ui  分类:SQL代码  人气:2213  回帖:5  发布于6年前 收藏

使用的镜像是 mariadb:latest

$ docker pull mariadb

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

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

映射成功之后:

$ netstat -tunlp |grep 3306

信息如下:

连接数据库:

$ 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 却不能工作,这两者有什么区别?

讨论这个帖子(5)垃圾回帖将一律封号处理……

Lv5 码农
陈***0 其它 6年前#1

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

Lv6 码匠
骨***活 产品经理 6年前#2

localhost、127.0.0.1 和 本机IP 三者的区别? mysql -h localhost -u root -p root此时你尝试连接的是宿主机的mysql了

Lv4 码徒
li***zi 其它 6年前#3

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

Lv5 码农
麦***j 产品经理 6年前#4

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

可以通过修改配置文件

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

Lv1 新人
wx***61 职业无 10月前#5
区别是localhost需要映射到ip,配置在/etc/hosts文件里面 至于localhost不能工作,应该就是默认没有配置在hosts文件里
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取