socket的化解格局,directory消除形式

mysql,mysqldump,Mysqladmin,php连接mysql服务常会提醒上边错误:

壹般来说所示,PHP连接MySQL报错:

mysql,Mysqldump,Mysqladmin,php连接mysql劳动常会提醒上边错误:

前日用pdo连接mysql蒙受二个奇怪的标题,host设为12七.0.0.一方可连绵不断成功,设为localhost就会报如下的荒唐:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’ (2)

SQLSTATE[HY000] [2002] Can’t connect to local MySQL server through
socket ‘MySQL’ (2)

 

  1. PHP Fatal error:  Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000] [2002] No such file or directory’ in /usr/share/nginx/html/test.php:2  
  2. Stack trace:  
  3. #0 /usr/share/nginx/html/test.php(2): PDO->__construct(‘mysql:host=loca…’, ‘root’, ‘aaaaaa’)  
  4. #socket的化解格局,directory消除形式。1 {main}  
  5.   thrown in /usr/share/nginx/html/test.php on line 2  

当使用host参数为“localhost”连接Mysql服务时,会先行采用“sock文件”进行连接,而不是接纳“IP:端口”进行再而三,而Mysql尝试运用“sock文件”举行连接时,却无力回天获取“sock文件”的地点。
 
要缓解此错误,有二种缓解办法:

测试代码如下:

1
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

先是反馈是mysql:user表中(user=user一,host=localhost)的这条记下未有密码,不过查了随后发现并不是,而且密码和(user=user1,host=%)的密码壹致,排除密码的标题,以往还剩余二个地点正是host。那么用localhost连接MySQL和12七.0.0.一有何样界别吧?在大家回忆中那四个都能够访问到本地的服务,不过精神上有何分其余?

  • 将一而再参数“host”的值由“localhost”改成“127.0.0.壹”;
  • 按下面方法,在“/etc/mysql.cnf”中钦赐“sock文件”地点。

<?php
try
{
 $dsn = ‘mysql:dbname=php-note;host=localhost;port=3306;charset=utf8’;
 $username = ‘root’;
 $password = ‘root’;
 new PDO( $dsn, $username, $password);
}
catch (\PDOException $e)
{
 echo $e->getMessage();
}

 

host=1二7.0.0.1,使用 TCP连接,mysql
server会认为那么些接二连三来自1二柒.0.0.一那些IP或许localhost.localdomin那么些域名。

 

【化解方案】

那是由于修改mysql服务的了socket文件mysql.sock地方,而招致力不从心透过mysql
socket文件一连到mysql服务引起的,具体消除办法如下:
1、查看mysql服务的socket文件地点:
mysql socket文件的职务是在/etc/my.cnf中安装的,cat /etc/my.cnf内容如下:

host=localhost,不使用TCP连接,它使用Unix socket连接mysql服务

一、查看mysql服务的socket文件地点:
  mysql socket文件的地点是在/etc/my.cnf中设置的,cat
/etc/my.cnf内容如下:

把 host=localhost 改为 host=127.0.0.1 即可!
 
 
接2连3Mysql提醒Can’t connect to local MySQL server through
socket的缓解办法
 
mysql,Mysqldump,Mysqladmin,php连接mysql服务常会指示下边错误:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’ (2)
那是出于修改mysql服务的了socket文件mysql.sock地点,而导致不能够通过mysql
socket文件三番五次到mysql服务引起的,具体消除办法如下:

 

以上是那三种host连接差其余归纳总计(更详尽的笔者会再独自整理1篇出来)。知道了那些分歧,那么难题来了,当php用localhost去老是mysql的时候,它该用哪个socket呢?大家都掌握mysql服务运营后它的进度里有叁个–socket=/var/lib/mysql/mysql.sock的参数(大家的地方和自家的大概会不一致,那一个能够在mysq.cnf中开始展览安装),个中那几个mysql.sock便是要用到的socket,大家只要把那一个欧洲经济共同体地址告诉php就能够,告诉的主意便是修改php.ini

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
user=mysql

1、查看mysql服务的socket文件地方:

1
2
3
4
[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
user=mysql
  1. pdo_mysql.default_socket=  

 

mysql socket文件的岗位是在/etc/my.cnf中安装的,cat
/etc/my.cnf内容如下:
[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
user=mysql
其间socket等于的门径便是socket文件的岗位,大家只要修改my.cnf文件,告诉mysql,mysqldump,mysqladmin
mysql服务的socket地点在何地就能够。

其间socket等于的路径便是socket文件的地方,大家借使修改my.cnf文件,告诉mysql,mysqldump,mysqladmin mysql服务的socket地方在哪儿就足以。

设置好之后重启php-fpm就马到功成了。

内部socket等于的门路正是socket文件的任务,大家若是修改my.cnf文件,告诉mysql,mysqldump,mysqladmin等mysql服务的socket地方在何地就足以。

2、修改my.cnf文件:

2、修改my.cnf文件:
在/etc/my.cnf文件中添加如下内容,同仁一视启mysqls服务,即可缓解mysql,mysqldump,mysqladmin的“Can’t
connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’”问题:

缓解形式总计:

 

在/etc/my.cnf文件中添加如下内容,视同一律启mysqls服务,即可缓解mysql,mysqldump,mysqladmin的“Can’t
connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’”难题:
[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
[mysql]
socket=/storage/db/mysql/mysql.sock
[mysqldump]
socket=/storage/db/mysql/mysql.sock
[mysqladmin]
socket=/storage/db/mysql/mysql.sock

 

一.翻看mysql库上边包车型地铁user表中,user=用户名,host=localhost的那条记下密码是不是和user=用户名,host=127.0.0.一这条记下的密码是不是一律,分歧的改个密码再尝试

2、修改my.cnf文件:
在/etc/my.cnf文件中添加如下内容,不偏不倚启mysqls服务,即可缓解mysql,mysqldump,mysqladmin的“Can’t
connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’”难点:

三、php连接mysql服务提醒”Can’t connect to local MySQL server through
socket…”的消除格局

1
2
3
4
5
6
7
8
9
10
11
12
[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
 
[mysql]
socket=/storage/db/mysql/mysql.sock
 
[mysqldump]
socket=/storage/db/mysql/mysql.sock
 
[mysqladmin]
socket=/storage/db/mysql/mysql.sock

2.看看php.ini中pdo_mysql.default_socket那项是或不是有安插恐怕配备是或不是正确。

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock

偶然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”

 

 

[mysql]
socket=/storage/db/mysql/mysql.sock

肆、python连接mysql提醒”Can’t connect to local MySQL server through
socket…”的化解办法:

三、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文件即可,如:

其余1处的篇章:

[client]
socket=/storage/db/mysql/mysql.sock

在连接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()

 

明日连日mysql数据库的时候遇到2个题材:Can’t connect to local MySQL
server through socket ‘/tmp/mysql.sock’ (2)

[mysqldump]
socket=/storage/db/mysql/mysql.sock

5、php pdo连接mysql提醒”Can’t connect to local MySQL server through
socket…”的消除措施:

1
2
3
[MySQL]
…省略n行…
mysql.default_socket = "/storage/db/mysql/mysql.sock"

参照网上有关的主意,包含:()

[mysqladmin]
socket=/storage/db/mysql/mysql.sock

平等在连年字符串添加mysql socket文件的任务即可,如下:
<?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);
}
?>

 

方案1.
 1.#ps -A|grep mysql 
   显示类似:
  1829 ?        00:00:00 mysqld_safe
   1876 ?        00:00:31 mysqld
  2.#kill -9 1829
  3.#kill -9 1876
  4.#/etc/init.d/mysql restart
  5.#mysql -u root -p
   他的分神消除了,我的还没消除!
继续找
方案2 
先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是或不是业已起步.

三、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文件即可,如:

肆、python连接mysql提醒”Can’t connect to local MySQL server through
socket…”的消除格局:
在连年mysql数据库函数中钦命socket文件,如下:

其余看看是或不是权力难点.

[root@localhost beinan]#chown -R mysql:mysql /var/lib/mysql
[root@localhost beinan]# /etc/init.d/mysqld start
启动 MySQL: [ 确定 ]
[root@localhost lib]# mysqladmin -uroot password ‘123456’
[root@localhost lib]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 3 to server version: 4.1.11

Type ‘help;’ or ‘/h’ for help. Type ‘/c’ to clear the buffe
他的也消除了,小编的麻烦还在几次三番,还是继续查找
方案3 
题材消除了,竟然是max_connections=1000他说太多了,然后改成500也说多,无奈删之难点化解了。
也许非凡
方案4
     /var/lib/mysql 全体文件权限 改成mysql.mysql
     不佳倒霉
 
方案5
     摘要:化解不可能经过mysql .sock连接MySQL难点那个标题首要性提醒是,不能够由此 ‘/tmp/mysql
.sock’连到服务器,而php标准配置即是用过’/tmp/mysql .sock’,不过某些mysql
安装方式 将 mysql .sock放在/var/lib/mysql
.sock大概别的的什么地点,你可以因此改动/etc/my.cnf文件来改进它,打开文件,能够看来如下的东东: 
   [mysql d] 
  socket=/var/lib/mysql .sock 
  改一下就好了,但也会引起别的的题材,如mysql
程序连不上了,再加一点: 
  [mysql ] 
  socket=/tmp/mysql .sock 
  也许还足以经过改动php.ini中的配置来使php用其余的mysql
.sock来连,那一个大家温馨去找找
  
  恐怕用如此的主意:
  ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock

打响了,就是那般ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock

OK!

但本人的种类中从不找到mysql.sock文件,只有mysqld.sock文件,/var/run/mysqld/mysqld.sock

于是乎效仿上边包车型地铁做法: ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

如此,能够不奇怪连接数据库了

再附一篇相关小说:()

 mysql_real_connect()试图确立到运行host的一个MySQL数据库引擎的二个总是。其函数原形为:

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag)   

  
作者要编一段程序用来远程连接多少个mysql数据库。作者在数据库的本机上做试验,发现mysql_real_connect()的第二个参数设为”localhost”时能够平常连接,当改写为该机器的IP地址”1九二.16八.100.贰”时就接连战败。我在先后中写的原句为:

mysql_real_connect(mysql,”192.168.100.2″,”root”,””,”mydns”,0,NULL,0)。

 

  
最初,小编觉得将”localhost”改为”1九二.16八.100.②”之后要将第多个参数端口号写上,但要么那些。由于本身是在Linux上做的,所以想也许须求将第多个参数unix_socket写上,结果或许格外。于是到google找消除方法,发现要远程连接mysql必要为mysql的钦定帐号设置远程连接的权能。在自个儿的顺序中,就要为root设置那壹权力。事实申明,小编事先接连退步就是由于这么些缘故造成的。但难点是,网上被大面积转贴的不2诀如果不对的,作者照做后还百般,最后问了校友才化解的。上面笔者具体说一下,望大家不会再被误导。

 

   在mysql数据库中有二个mysql库,它里面包涵一个user表,里面存有全数帐号及它们的权限及特点。对应自作者的user表中找到User项为root的,发现有两项,其Host项分别为localhost和localhost.localdomain。大家只供给把’localhost’改为’%’就能够让抱有长途机器以root帐号登陆mysql服务器。也能够将’localhost’改为某1个ip地址,那样就足以在该地址的机械上登6mysql服务器。这一个都不曾难题,只是网上被广为传唱的二个变动Host项的点子是指鹿为马的。他的点子是用update语句将钦命User项的Host项改过来,若是想添加三个新的用来远程访问的帐号,就用insert语句添加。事实是那根本不行,笔者遵照作了,表是变了,但要么连不上。后来透过理解才领悟,要想改,结合小编的景况,必须用下边包车型大巴那条语句:

     grant all privileges on mydns.* to ‘root’@’%’;

来改变root帐号的权能。要是添加新帐号也是这么。想必这些表相比较越发,用一般的SQL语句无法操作。要是帐号有密码,后边再添加identified
by ‘***'(*为您帐号的密码)就能够了。

 

   为了缓解那么些难点用了一上午的时日,费了累累不利,写出来也能让大家少走些弯路。

其二种小说:

mysql,mysqldump,mysqldump,php连接mysql劳务常会提醒下边错误:

 

 

1
ERROR 2002 (HY000): Can&#039;t connect to local MySQL server through socket &#039;/var/lib/mysql/mysql.sock&#039; (2)

 

产生此难点的来头壹般有多个:

一、mysql服务未正常运营:

由于mysql的socket文件是由mysqld服务运维时创立的,假使mysqld服务未正常运行,socket文件自然也不会被创立,当然会找不到socket文件了。对于判断mysql服务是不是运营,大家可以行使上面发号施令:

 

 

1
2
3
4
5
6
7
8
# 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…

 

二、socket文件路径在配备文件中装置不完整:

那貌似是出于大家修改了mysql配置“/etc/my.cnf”引起的。比如我们修改了配置文件中“[mysql]”选项下的“socket”参数,而未钦定“[client]”、“[mysql]”选项的“socket”参数,导致mysql使用暗中认可的socket文件地点去找寻socket文件,从而造成未找到socket文件而引发此错误。

 

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

 

解决办法:

上边是涸泽而渔办法,更详细的介绍能够参照:

1、mysql服务未平常运营:

假假设劳动未运转,我们运营“service mysqld
start”运营服务即可。借使服务运维不了,就去查看mysql服务日志,寻找原因并消除再开发银行

 

 

1
2
3
4
5
6
7
[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文件路径完全1致。如下:

 

 

1
2
3
4
5
6
7
8
9
10
11
12
[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,mysqladmin等一声令下,mysql服务的socket文件地点在哪个地方,然后重启mysqld服务即可。

 

三、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文件即可,如:

 

1
2
3
[MySQL]
…省略n行…
mysql.default_socket = "/storage/db/mysql/mysql.sock"

 

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

在接连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()
count=cur.execute("show databases")
print &#039;there has %s dbs&#039; % count
conn.commit()
conn.close()

 

5. php pdo连接mysql提醒”Can’t connect to local MySQL server through
socket…”的化解措施:

一致在连接字符串添加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, &#039;root&#039;, &#039;&#039;);
$rs = $db->query("SELECT * FROM qrtest");
while($row = $rs->fetch()){
    print_r($row);
}
?>

四、python连接mysql提示”Can’t connect to local MySQL server through
socket…”的化解方法:
  在延续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()
count=cur.execute("show databases")
print ‘there has %s dbs’ % count
conn.commit()
conn.close()

#!/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()

 

  1. php pdo连接mysql提醒”Can’t connect to local MySQL server through
    socket…”的消除措施:
    亚洲必赢官网 ,  同样在连年字符串添加mysql socket文件的职位即可,如下:
  1. php pdo连接mysql提醒”Can’t connect to local MySQL server through
    socket…”的化解格局:
    相同在连年字符串添加mysql socket文件的岗位即可,如下:

<?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);
}
?>

 

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);
}
?>
网站地图xml地图