MySQL:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘

登陆时遇到错误:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

解决:

$ /etc/init.d/mysql.server restart
[ ok ] Restarting mysql.server (via systemctl): mysql.server.service.

如果重启还是没有解决,还有一个原因:
由于我们修改了mysql配置“/etc/my.cnf”引起的。比如我们修改了配置文件中“[mysql]”选项下的“socket”参数,而未指定“[client]”、“[mysql]”选项的“socket”参数,导致mysql使用默认的socket文件位置去寻找socket文件,从而导致未找到socket文件而引发此错误。
解决方法: 修改“/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

具体请参考:http://aiezu.com/article/mysql_cant_connect_through_socket.html



理论知识:
MYSQL的连接方式有两种:

  • 通过本地socket进行连接 【mysql服务器和客户端在同一台机器上】
[mysql]> show variables like 'socket%';  --查看mysql socket文件在哪里
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| socket        | /tmp/mysql.sock |
+---------------+-----------------+

$ mysql -uroot -p123456 -S/tmp/mysql.sock 【本地连接,-S/tmp/mysql.sock可以省略】
[mysql]> \s
--------------
mysql  Ver 8.0.13 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

Connection id:        20
Current database:    
Current user:        root@localhost
SSL:            Not in use                           -------本地传输,没有网络传输,而ssl是为了防止窃听,因此没有使用ssl
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        8.0.13 MySQL Community Server - GPL
Protocol version:    10
Connection:        Localhost via UNIX socket   --当前的连接方式是socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:        /tmp/mysql.sock
Uptime:            2 hours 42 min 28 sec

可以在配置文件中$ sudo gedit /etc/my.cnf添加:
[client]
socket=/tmp/mysql.sock
  • 通过TCP/IP协议连接【mysql服务器和客户端不在同一台机器上,也可以在一台机器上】
$ mysql -h127.0.0.1 -uroot -p
> show variables like '%ssl%';
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| have_openssl       | YES             |
| have_ssl           | YES             |              ---- 说明已经启用了ssl
 + --------------------------------------+
[mysql]> status
--------------
mysql  Ver 8.0.13 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

Connection id:        17
Current database:    
Current user:        root@localhost
SSL:            Cipher in use is DHE-RSA-AES128-GCM-SHA256   --启用了ssl
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        8.0.13 MySQL Community Server - GPL
Protocol version:    10
Connection:        127.0.0.1 via TCP/IP   --当前的连接方式是TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:        3306
Uptime:            2 hours 41 min 15 sec

Threads: 2  Questions: 211  Slow queries: 0  Opens: 267  Flush tables: 2  Open tables: 243  Queries per second avg: 0.021
--------------

启动mysql 报错:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)


1.先查看mysql启动状态

#/etc/rc.d/init.d/mysqld status

2.mysql.sock位置查找与验证?

# find / -name mysql.sock
/Data/mydata/mysql.sock
验证目录是否正确
#mysql -u root -p -S /Data/mydata/mysql.sock
备注:-S参数socket file文件验证

3.验证mysql.sock文件权限和用户是否正确?
如果是权限问题,则先改变权限 
#chown -R mysql:mysql /Data/mydata/mysql.sock


[root@localhost ~]# /etc/init.d/mysqld start
启动 MySQL: [ OK]

4.永久解决

修改/etc/my.cnf

添加以下内容到/etc/my.conf:
[client]
socket = /Data/mydata/mysql.sock
[mysqld]
socket = /Data/mydata/mysql.sock
根据提供的引用内容,出现"ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)"错误通常是由于MySQL服务器无法通过指定的套接字连接到本地MySQL服务器引起的。这可能是由于以下原因导致的: 1. MySQL服务器未启动:请确保MySQL服务器已经启动。可以使用以下命令检查MySQL服务器的运行状态: ```shell service mysql status ``` 2. MySQL服务器套接字文件路径不正确:请确保MySQL服务器套接字文件的路径与配置文件中的路径一致。可以使用以下命令查看MySQL服务器套接字文件的路径: ```shell grep "socket" /etc/mysql/my.cnf ``` 3. MySQL服务器套接字文件权限问题:请确保MySQL服务器套接字文件的权限正确。可以使用以下命令更改套接字文件的权限: ```shell sudo chmod 777 /tmp/mysql.sock ``` 4. MySQL服务器配置文件错误:请检查MySQL服务器的配置文件(通常是/etc/mysql/my.cnf)是否正确配置了套接字文件路径。可以使用以下命令编辑配置文件: ```shell sudo nano /etc/mysql/my.cnf ``` 然后找到并修改以下行: ```shell socket = /tmp/mysql.sock ``` 5. MySQL服务器端口被占用:请确保MySQL服务器所使用的端口没有被其他进程占用。可以使用以下命令查看端口占用情况: ```shell sudo netstat -tlnp | grep mysql ``` 如果以上方法都无法解决问题,可能需要重新安装MySQL服务器或者联系系统管理员进行进一步的故障排除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值