错误信息
【汉】2002 (HY000):无法通过套接字连接到本地MySQL服务器
【英】2002 (HY000):Can't connect to local MySQL server through socket '%s' (%d)
序
刚刚安装完的数据库,使用mysql -uroot -p命令连接到MySQL命令窗口报错。
版本
我个人猜测啊,注意,是我个人猜测,所有数据库版本都可能会发生。
故
从官方文档中得知,Unix上的MySQL客户端,可以有两种方式连接到数据库。这两种方式分别是:
- Unix套接字(socket)文件
- TCP/IP方式
首先是套接字(socket)方式,这种方式在连接速度上比TCP/IP快,但是它只能在连接到同一台服务器时使用(就是数据库的服务端和客户端在同一个服务器上)。在使用客户端连接时,它默认情况下会用/tmp目录下的mysql.sock文件去跟服务器通信。当然,这个路径也是可以更改滴!**注意,接下来是套接字连接重点!**在使用mysql连接到服务端时,只要没有指定主机名(ip地址),就会使用此方式进行连接。
说完套接字连接方式,就轮到TCP/IP了。想想TCP/IP方式也没啥可以说的,一句话概况就是客户端通过IP地址和端口号进行连接。使用起来也很简单,就是指定ip和端口,客户端就会自动使用该连接方式。到这里,再多提一句,TCP/IP是全部平台都能够使用的,而套接字只有Unix平台能够使用。
注意,指定ip如果是localhost,则会使用套接字方式连接。
解
看到这里后,相信你也已经初步了解TCP/IP方式和套接字方式了,接下来就该说说咋排查是不是套接字文件的问题。
首先我们去检查一下MySQL数据库的配置文件,由于我这里没改过配置文件的路径,就直接查看/etc/my.cnf就行了。如果你使用的不是默认配置文件,那么就查看自己配置的文件路径。
[root@localhost mysql]# cat /etc/my.cnf
检查完配置文件,就知道问题出在哪里了。[mysqld]下的socket是有指定的,并且指定路径是/usr/local/mysql/mysql.sock,而客户端由于没有指定socket参数,则使用默认/tmp/mysql.sock。客户端和服务端的参数不一致,肯定就没法连接了嘛!就想两个人一样,一个在南方,一个在北方,怎么可能交流呢!别钻牛角尖啊,我说的是面对面交流。
知道问题后,解决起来也就简单了,在配置文件中加个客户端socket就行了。
修改配置文件
在配置文件的下面新增一条客户端的socket参数。
[root@localhost mysql]# vim /etc/my.cnf
[client]
socket=/usr/local/mysql/mysql.sock
再次连接
[root@localhost mysql]# bin/mysql -uroot -p
这不就解决了,不过也没有必要非要使用套接字连接。顺道说下怎么使用TCP/IP连接吧!使用TCP/IP只需要指定ip和端口就行了,至于说的速度慢,我个人没感觉有啥差别,可能在不同服务器的时候就能看出差距了。
[root@localhost mysql]# bin/mysql -h 127.0.0.1 --port 3306 -uroot -p
评论区