连接Mysql提示Can’t connect to local MySQL server through socket的解决方法

Posted UniqueColor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接Mysql提示Can’t connect to local MySQL server through socket的解决方法相关的知识,希望对你有一定的参考价值。

转:http://aiezu.com/article/mysql_cant_connect_through_socket.html

有时候,当我们使用“mysql”、“mysqladmin”、“mysqldump”等命令管理数据库时,服务器抛出类似如下错误:

ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/lib/mysql/mysql.sock (2)

这个错误是由于什么原因导致的呢?请看后面爱E族(aiezu.com)为您提供的分析。

 

一、错误现场还原:

下面我们通过三种方式来连接,然后观察提示的错误信息:

  • 1、直接使用“mysql”命令,不带主机名参数;
  • 2、使用带了主机名“localhost”参数的“mysql -h localhost”命令;
  • 3、使用带了主机名“127.0.0.1”参数的“mysql -h 127.0.0.1”命令。
[[email protected] ~]# mysql
ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/lib/mysql/mysql.sock (2)
[[email protected] ~]# mysql -h localhost
ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/lib/mysql/mysql.sock (2)
[[email protected] ~]# mysql -h 127.0.0.1
ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)

通过上面实验可以看出,前面两种方式都能产生标题中的错误,而第三种方式连接是不会产生标题中的错误的(第三种方式这里产生的是由于密码问题拒绝访问的错误信息)(爱E族)。

 

二、错误产生原因解析:

   这是由于我们连接数据库使用的主机名参数为“localhost”,或者未使用主机名参数、服务器默认使用“localhost”做为主机名(爱E族)。 使用主机名参数为“localhost”连接mysql服务端时,mysql客户端会认为是连接本机,所以会尝试以socket文件方式进行连接(socket文件连接方式,比“ip:端口”方式效率更高),这时根据配置文件“/etc/my.cnf”的路径,未找到相应的socket文件,就会引发此错误。
   

三、修复故障前准备:

1、看mysql服务是否在运行:

  由于“socket”文件是由mysql服务运行时创建的,如果提示“ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘***‘ (2)”,找不到“socket”文件,我们首先要确认的是mysql服务是否正在运行。

# 1、 端口是否打开
[[email protected] ~]# lsof -i:3306
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  12207 mysql   14u  IPv4  52350      0t0  TCP *:mysql (LISTEN)

# 2、mysqld服务是否正在运行
[[email protected] ~]# service mysqld status
mysqld (pid  4717) is running...

# 3、如果mariadb,同样方法查服务是否正在运行:
[[email protected] ~]# service mariadb status
Redirecting to /bin/systemctl status  mariadb.service
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2016-11-03 13:47:37 CST; 23min ago

2、确定“socket”文件正确位置:

  确定mysql服务正常运行后,产生此错误的原因只剩下“socket”文件路径不正确了,我们可以使用“find”命令或者“lsof”命令来确定socket文件的正确路径:

[[email protected] ~]# lsof  -c mysqld|grep sock$
mysqld 4717 mysql 12u unix 0xffff88010a655b80 0t0 77474827 /storage/db/mysql/mysql.sock

[[email protected] ~]# find / -name *.sock
/storage/db/mysql/mysql.sock

 

四、故障解决方法:

解决方案一:

  修改“/etc/my.cnf”配置文件,在配置文件中添加“[client]”选项和“[mysql]”选项,并使用这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket文件路径完全一致。如下: 

 

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
...省略n行(爱E族)...

[client]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

[mysql]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

 

修改完后,重启mysqld服务,即可解决此问题。
 

解决方案二:

  使用“ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock”命令,将正确的socket文件位置,软链接到提示错误的socket文件路径位置,即可解决此问题:

[[email protected] ~]# ls /var/lib/mysql/mysql.sock
ls: cannot access /var/lib/mysql/mysql.sock: No such file or directory
[[email protected] ~]# ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock
[root[email protected] ~]# ls /var/lib/mysql/mysql.sock
/var/lib/mysql/mysql.sock

 五、后序:

  这篇文章只讲述了mysql提供的“mysql”、“mysqldump”、“mysqladmin”等命令提示“ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘***‘ (2)”的解决方法,如果需要解决“php”、“perl”、“python”等脚本语言提示此错误的问题,请参考爱E族的另外一篇文章:http://aiezu.com/article/mysql_php_connect_through_socket.html

 



以上是关于连接Mysql提示Can’t connect to local MySQL server through socket的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

连接Mysql提示Can’t connect to local MySQL server through socket的解决方法

连接mysql提示Can’t connect to local MySQL server through socket的解决方法

zabbix连接Mysql提示Can’t connect to local MySQL server through socket的解决方法

连接mysql数据库时提示2003 can't connect to MySQL server on ip(10060)的解决办法

Can’t connect to local MySQL server through socket

连接MySQL的10060错误:Can't connect to MySQL server on '*.*.*.*'(10060) (转自https://www.cnblo