最新消息: 新版网站上线了!!!

Linux连接mysql提示Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

一、代码
[root@bogon ~]# mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
 
二、原因是my.cnf配置文件中设置了[mysqld]的参数socket,而没有设置[client]的参数socket
下面是我原本的my.cnf配置文件内容
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
修改之后的my.cnf配置文件内容
[client]
port = 3306
socket=/usr/local/mysql/data/mysql.sock
 
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
问题解决现可以使用 mysql -uroot -p成功连接上登录到mysql
 
三、补充
1、如果mysql -uroot -p连接不上,可是常识一下mysql -uroot -h127.0.0.1 -p,一般可以连接上,如果是远程mysql把127.0.0.1替换为ip地址即可。
 
2、详细说明
经过测试发现,如果使用mysql -uroot -p连接登录mysql提示错误ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)时,即使不在my.cnf中设置
[client]
port = 3306
socket=/usr/local/mysql/data/mysql.sock
这个也可以成功连接登录mysql。办法就是使用如下方法
[root@bogon ~]# mysql -uroot -h127.0.0.1 -p
Enter password: 
 
 
[root@bogon ~]# mysql -uroot -h127.0.0.1 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.22
 
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> 
 
四、课外补充
1.mysql server的套接字文件。
如果不手动配置my.cnf,那么默认的socket一般是DATADIR/mysql.sock,而DATADIR如果没有手动修改,一般默认是/var/lib/mysql目录。不同的mysql版本,可能socket的默认路径是/tmp/mysql.sock。
2.客户端连接时使用的套接字文件。
在Linux上的各种mysql类客户端(例如mysql,mysqladmin,mysqldump,mysqlimport等)连接mysql server时,如果指定的主机名是'localhost',则会使用套接字来连接mysql server。因此,必须为这些客户端指定正确的套接字
3、除了使用[client]指定全局客户端的连接参数,还可以为特定的客户端指定连接参数。例如下面为mysql、mysqldump、mysqladmin这3个客户端分别指定socket连接参数。
[mysql]
socket=/data/mysql.sock
 
[mysqldump]
socket=/data/mysql.sock
 
[mysqladmin]
socket=/data/mysql.sock
4、如果使用IP,例如mysql -uroot -h'192.168.100.10'则表示使用TCP/IP协议连接mysql,这时不会使用套接字,就没有套接字找不到的问题。
5、socket文件路径在配置文件中设置不完整:
这一般是由于我们修改了mysql配置“/etc/my.cnf”引起的。比如我们修改了配置文件中“[mysql]”选项下的“socket”参数,而未指定“[client]”、“[mysql]”选项的“socket”参数,导致mysql使用默认的socket文件位置去寻找socket文件,从而导致未找到socket文件而引发此错误
.....

转载请注明:谷谷点程序 » Linux连接mysql提示Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)