今天在安装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
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
zhaohui@localhost:/usr/local/mysql$ hostname
localhost
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可能会被系统干掉。
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
原文:http://www.cnblogs.com/zhao123h/p/5207622.html