ubuntu mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

今天在安装mysql时遇到主要问题

在mysql-client用如下命令连接mysql server时

zhaohui@localhost:/usr/local/mysql$ mysql -h localhost -u root -p

报错

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

用127.0.0.1连接时正常

mysql -h 127.0.0.1 -u root -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7

 

最后的解决思路:

1 首先查看mysql server是否启动

hui@localhost:/usr/local/mysql$ netstat -apn | grep mysql
(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)
tcp        0      0 127.0.0.1:45179         127.0.0.1:3306          ESTABLISHED 12344/mysql     
unix  2      [ ACC ]     流        LISTENING     84169    -                   /tmp/mysql.sock
zhaohui@localhost:/usr/local/mysql$ sudo netstat -apn | grep mysql
[sudo] password for zhaohui: 
tcp        0      0 127.0.0.1:45179         127.0.0.1:3306          ESTABLISHED 12344/mysql     
tcp6       0      0 :::3306                 :::*                    LISTEN      12301/mysqld    
tcp6       0      0 127.0.0.1:3306          127.0.0.1:45179         ESTABLISHED 12301/mysqld    
unix  2      [ ACC ]     流        LISTENING     84169    12301/mysqld        /tmp/mysql.sock

 

2 由于在本机设置过hostname,可以查看,之前为ThinkPad,经过修改/etc/hostname之后(修改为localhost),仍然无效,问题依旧

zhaohui@localhost:/usr/local/mysql$ hostname
localhost

3 仔细看报错内容,从网上查到,是由于mysql-client 和server都需要socket,而mysql-client的socket从/var/run/mysqld/ysqld.sock中读取(由报错可 知),与server端不一致。mysql-client的参数可以按照一个顺序读取,第一个即/etc/my.cnf,如果都没有,则按照默认,也可以 新建一个文件进行设置。

mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

 

server端是/tmp/mysql.sock ,可以利用bin/mysqladmin中查看

zhaohui@localhost:/usr/local/mysql$ bin/mysqladmin variables | grep sock
| performance_schema_max_socket_classes                  | 10                                                                                                                                                                                                                                                                                                                                               |
| performance_schema_max_socket_instances                | 322                                                                                                                                                                                                                                                                                                                                              |
| socket                                                 | /tmp/mysql.sock                          


两者冲突,网上有一种解决方法是建立一个软连接,大家反馈感觉不太好,主要是server端的/tmp可能会被系统干掉。

4 最终采用如下解决方法(来源

mysql主机填写localhost与非localhost有不同的地方

当主机填写为localhost时mysql会采用 unix domain socket连接

当主机填写为127.0.0.1时mysql会采用tcp方式连接

这是linux套接字网络的特性,win平台不会有这个问题,因此在/etc/my.cnf中的[mysql]中添加

[mysql]
protocol=tcp

启动mysql,搞定!

zhaohui@localhost:/usr/local/mysql$ mysql -h localhost
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1

 

posted @ 2016-02-22 16:54  重启下试试  阅读(4037)  评论(0编辑  收藏  举报