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