【Docker】使用docker的话,mysql 命令的 -h127.0.0.1和-hlocalhost有什么区别?
使用的镜像是 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
却不能工作,这两者有什么区别?
回答
区别是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文件里
localhost、127.0.0.1 和 本机IP 三者的区别? mysql -h localhost -u root -p root此时你尝试连接的是宿主机的mysql了
以上是 【Docker】使用docker的话,mysql 命令的 -h127.0.0.1和-hlocalhost有什么区别? 的全部内容, 来源链接: utcz.com/a/76047.html