爱分享666

当前位置:首页 >java技术博客>数据库

一、代码

[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 -uroot -p,老是出现Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2),还有权限的问题,就是mysql.sock所在文件权限不够。chown -R mysql:mysql /var/run/mysql/ 相应问路径

这个也可以成功连接登录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文件而引发此错误


上一篇:

手动安装mysql问题-You must reset your password using ALTER USER statement before executing this statement.

下一篇:

Redis 缓存雪崩 || 穿透 || 击穿概念及解决办法

2 +1
打赏 ×

如果网站能给予您帮助,欢迎给网站捐助,给我打赏个吧!
您的支持是我的动力,让网站能一直陪伴着大家,共同学习进步。
捐助费用将用于网站日常运营(服务器租费、域名租费等)
捐助者请发送邮箱提供姓名至 zhaoqn@163.com 留言以表感谢。

网友评论


  • 验证码:

热门评论

本月热门

推荐资料

精彩评论

回到顶部