首页 技术 正文
技术 2022年11月21日
0 收藏 361 点赞 4,455 浏览 3096 个字

http://www.aiezu.com/db/mysql_cant_connect_through_socket.html

mysql,mysqldump,php连接mysql服务常会提示下面错误:

 

1 ERROR 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服务是否启动,我们可以使用下面命令:

 

12345678 # 1、 端口是否打开[root@aiezu.com ~]# lsof -i:3306COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEmysqld  12207 mysql   14u  IPv4  52350      0t0  TCP *:mysql (LISTEN) # 2、mysqld服务是否正在运行[root@aiezu.com ~]# service mysqld statusmysqld (pid  4717) is running…

2、socket文件路径在配置文件中设置不完整:

这一般是由于我们修改了mysql配置“/etc/my.cnf”引起的。比如我们修改了配置文件中“[mysql]”选项下的“socket”参数,而未指定“[client]”、“[mysql]”选项的“socket”参数,导致mysql使用默认的socket文件位置去寻找socket文件,从而导致未找到socket文件而引发此错误。

解决办法:

下面是解决方法,更详细的介绍可以参考:http://aiezu.com/article/mysql_cant_connect_through_socket.html

1、mysql服务未正常运行:

如果是服务未启动,我们运行“service mysqld start”启动服务即可。如果服务启动不了,就去查看mysql服务日志,寻找原因并解决再启动

 

1234567 [root@aiezu.com ~]# service mysqld startStarting mysqld:                                           [  OK  ][root@aiezu.com ~]# lsof -i:3306COMMAND   PID  USER   FD   TYPE    DEVICE SIZE/OFF NODE NAMEmysqld  14109 mysql   10u  IPv4 247183583      0t0  TCP *:mysql (LISTEN)[root@aiezu.com ~]# service mysqld statusmysqld (pid  14109) is running…

2、完善mysql配置文件:

如果确认mysql服务正常运行,还提示文章标题的此错误,那就是“/etc/my.cnf”配置文件的问题了。解决办法是修改“/etc/my.cnf”配置文件,在配置文件中添加“[client]”选项和“[mysql]”选项,并使用这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket文件路径完全一致。如下:

 

123456789101112 [mysqld]datadir=/storage/db/mysqlsocket=/storage/db/mysql/mysql.sock…省略n行(爱E族)… [client]default-character-set=utf8socket=/storage/db/mysql/mysql.sock [mysql]default-character-set=utf8socket=/storage/db/mysql/mysql.sock

其中socket等于的路径就是socket文件的位置,我们只要修改my.cnf文件,告诉mysql,mysqldump,mysqladmin等命令,mysql服务的socket文件位置在哪里,然后重启mysqld服务即可。

3、php连接mysql服务提示”Can’t connect to local MySQL server through socket…”的解决方法

有时候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文件即可,如:

 

123 [MySQL]…省略n行…mysql.default_socket = “/storage/db/mysql/mysql.sock”

4、python连接mysql提示”Can’t connect to local MySQL server through socket…”的解决方法:

在连接mysql数据库函数中指定socket文件,如下:

 

12345678 #!/usr/bin/pythonfrom MySQLdb import connectconn = connect(db=”pzy”, user=”root”, host=”localhost”, unix_socket=”/storage/db/mysql/mysql.sock”)cur = conn.cursor()count=cur.execute(“show databases”)print ‘there has %s dbs’ % countconn.commit()conn.close()

5. php pdo连接mysql提示”Can’t connect to local MySQL server through socket…”的解决方法:

同样在连接字符串添加mysql socket文件的位置即可,如下:

 

12345678 <?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就可以了

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,996
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,510
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,353
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,137
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848