http://www.aiezu.com/tag/mysql , http://www.aiezu.com/tag/mysqldump , http://www.aiezu.com/tag/mysql-2 dump,php 连接 mysql 服务常会提示下面错误:
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 服务是否启动, 我们可以使用下面命令:
# 1, 端口是否打开 [root@aiezu.com ~]# 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.com ~]# service mysqld status mysqld (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 服务日志, 寻找原因并解决再启动
[root@aiezu.com ~]# service mysqld start Starting mysqld: [ OK ] [root@aiezu.com ~]# 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.com ~]# service mysqld status mysqld (pid 14109) is running...
2, 完善 mysql 配置文件:
如果确认 mysql 服务正常运行, 还提示文章标题的此错误, 那就是 "/etc/my.cnf" 配置文件的问题了. 解决办法是修改 "/etc/my.cnf" 配置文件, 在配置文件中添加 "[client]" 选项和 "[mysql]" 选项, 并使用这两个选项下的 "socket" 参数值, 与 "[mysqld]" 选项下的 "socket" 参数值, 指向的 socket 文件路径完全一致. 如下:
[mysqld] 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 文件的位置, 我们只要修改 my.cnf 文件, 告诉 mysql,mysqldump, http://www.aiezu.com/tag/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 文件即可, 如:
[MySQL] ... 省略 n 行... mysql.default_socket = "/storage/db/mysql/mysql.sock"
4,python 连接 mysql 提示 "Can't connect to local MySQL server through socket..." 的解决方法:
在连接 mysql 数据库函数中指定 socket 文件, 如下:
#!/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() count=cur.execute("show databases") print 'there has %s dbs' % count conn.commit() conn.close()
5. php pdo 连接 mysql 提示 "Can't connect to local MySQL server through socket..." 的解决方法:
同样在连接字符串添加 mysql socket 文件的位置即可, 如下:
$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); } ?>
来源: http://www.bubuko.com/infodetail-2596137.html