Can’tconnecttolocalMySQLserverthroughsocket的解决⽅法
mysql,mysqldump,php连接mysql服务常会提⽰下⾯错误:
1ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
产⽣此问题的原因⼀般有两个:
1、mysql服务未正常运⾏:
由于mysql的socket⽂件是由mysqld服务启动时创建的,如果mysqld服务未正常启动,socket⽂件⾃然也不会被创建,当然会不到socket⽂件了。对于判断mysql服务是否启动,我们可以使⽤下⾯命令:
1 2 3 4 5 6 7 8# 1、端⼝是否打开
[root@aiezu ~]# lsof -i:3306
COMMAND  PID  USER  FD  TYPE DEVICE SIZE/OFF NODE NAME mysqld  12207 mysql  14u  IPv4  52350      0t0  TCP *:mysql (LISTEN) # 2、mysqld服务是否正在运⾏
[root@aiezu ~]# service mysqld status
mysqld (pid  4717)
2、socket⽂件路径在配置⽂件中设置不完整:
这⼀般是由于我们修改了mysql配置“/etc/myf”引起的。⽐如我们修改了配置⽂件中“[mysql]”选项下的“socket”参数,⽽未指定“[client]”、“[mysql]”选项的“socket”参数,导致mysql使⽤默认的socket⽂件位置去寻socket⽂件,从⽽导致未到socket⽂件⽽引发此错误。
解决办法:
1、mysql服务未正常运⾏:
如果是服务未启动,我们运⾏“service mysqld start”启动服务即可。如果服务启动不了,就去查看mysql服务⽇志,寻原因并解决再启动
1 2 3 4 5 6 7[root@aiezu ~]# service mysqld start
Starting mysqld:                                          [  OK  ]
[root@aiezu ~]# lsof -i:3306
COMMAND  PID  USER  FD  TYPE    DEVICE SIZE/OFF NODE NAME mysqld  14109 mysql  10u  IPv4 247183583      0t0  TCP *:mysql (LISTEN) [root@aiezu ~]# service mysqld status
mysqld (pid  14109)
2、完善mysql配置⽂件:
如果确认mysql服务正常运⾏,还提⽰⽂章标题的此错误,那就是“/etc/myf”配置⽂件的问题了。解决办法是修改“/etc/myf”配置⽂件,在配置⽂件中添加“[client]”选项和“[mysql]”选项,并使⽤这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket⽂件路径完全⼀致。如下:
1 2 3 4 5 6 7 8 9 10 11 12[mysqld]
mysql下载starting the server
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock ...省略n⾏(爱E族)...
[client]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock [mysql]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock
其中socket等于的路径就是socket⽂件的位置,我们只要修改myf⽂件,告诉mysql,mysqldump,等命令,mysql服务的socket⽂件位置在哪⾥,然后重启mysqld服务即可。
3、php连接mysql服务提⽰"Can't connect to local MySQL server "的解决⽅法
有时候mysql服务正常运⾏,⽤户名密码也完全正确,使⽤php的mysql_connect函数却连接不了mysql,调⽤php的mysql_error()函数提⽰“Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'”,这是我们需要修改/etc/php.ini⽂件。
在/etc/php.ini⽂件中"[MySQL]"项下到"mysql.default_socket",并设置其值指向正确的mysql服务socket⽂件即可,如:
1 2 3[MySQL]
...省略n⾏...
mysql.default_socket = "/storage/db/mysql/mysql.sock"
4、python连接mysql提⽰"Can't connect to local MySQL server "的解决⽅法:在连接mysql数据库函数中指定socket⽂件,如下:
1 2 3 4 5 6 7 8#!/usr/bin/python
from MySQLdb import connect
conn = connect(db="pzy", user="root", host="localhost", unix_socket="/storage/db/mysql/mysql.sock") cur = conn.cursor()
ute("show databases")
print 'there has %s dbs' % count
connmit()
conn.close()
5. php pdo连接mysql提⽰"Can't connect to local MySQL server "的解决⽅法:同样在连接字符串添加mysql socket⽂件的位置即可,如下:
1 2 3 4 5 6 7 8<?php
$dsn = "mysql:host=localhost;dbname=pzy;unix_socket=/storage/db/mysql/mysql.sock"; $db = new PDO($dsn, 'root', '');
$rs = $db->query("SELECT * FROM qrtest");
while($row = $rs->fetch()){
print_r($row);
}
?>
转这个⽂章主要是为了以后查阅⽅便⽽且也有要补充的地⽅是说这个mysql.sock⽂件的位置我的⽂件是在/tmp/mysql.sock  但是打开⾥⾯是空的所以当时有⼀些疑惑经过实验证明确实就是这个/tmp/mysql.
sock  我的问题主要是php连接不上    mysql客户端是可以的然后改了 php.ini  重启php-fpm就可以了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。