威尼斯人线上娱乐

directory化解形式,socket的缓解方法

2 4月 , 2019  

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

如下所示,PHP连接MySQL报错:

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

今日用pdo连接mysql境遇1个奇怪的难题,host设为1二七.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. #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=user1,host=localhost)的那条记下未有密码,但是查了后来发现并不是,而且密码和(user=user一,host=%)的密码壹致,排除密码的题材,未来还剩余一个地点正是host。那么用localhost连接MySQL和1二柒.0.0.壹有啥样分别呢?在大家影象中那多个都足以访问到本地的劳动,但是精神上有啥不相同的?

  • 将连接参数“host”的值由“localhost”改成“1二7.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会认为那么些连续来自127.0.0.一以此IP也许localhost.localdomin那些域名。

 

【解决方案】

那是由于修改mysql服务的了socket文件mysql.sock位置,而招致不可能通过mysql
socket文件接二连三到mysql服务引起的,具体消除办法如下:
1、查看mysql服务的socket文件地方:
mysql socket文件的职位是在/etc/my.cnf中装置的,cat /etc/my.cnf内容如下:

directory化解形式,socket的缓解方法。host=localhost,不使用TCP连接,它使用Unix socket连接mysql服务

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

把 host=localhost 改为 host=127.0.0.1 即可!
 
 
连天Mysql提醒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连接分裂的不难总括(更详实的小编会再单独整理一篇出来)。知道了那几个区别,那么难点来了,当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

 

1.翻看mysql库上面包车型大巴user表中,user=用户名,host=localhost的那条记下密码是不是和user=用户名,host=1贰7.0.0.1那条记下的密码是或不是相同,分化的改个密码再试试

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…”的化解格局:

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

其它一处的文章:

[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数据库的时候蒙受3个难点:Can’t connect to local MySQL
server through socket ‘/tmp/mysql.sock’ (二)

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

五、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 是或不是业已起步.

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

4、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=一千他说太多了,然后改成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数据库引擎的2个连连。其函数原形为:

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九二.168.100.二”时就接二连三战败。作者在程序中写的原句为:

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

 

  
最初,小编觉得将”localhost”改为”1九2.168.拾0.二”之后要将第陆个参数端口号写上,但依旧要命。由于自家是在Linux上做的,所以想或者须要将第多少个参数unix_socket写上,结果照旧尤其。于是到google找解决措施,发现要远程连接mysql需求为mysql的钦定帐号设置远程连接的权位。在自己的先后中,就要为root设置那壹权力。事实评释,我从前线总指挥部是失败正是由于那些原因导致的。但难题是,网上被广大转贴的章程是荒唐的,小编照做后还尤其,最终问了同桌才化解的。上面小编实际说一下,望大家不会再被误导。

 

   在mysql数据库中有二个mysql库,它其中含有一个user表,里面存有全数帐号及它们的权杖及特色。对应自作者的user表中找到User项为root的,发现有两项,其Host项分别为localhost和localhost.localdomain。咱俩只需求把’localhost’改为’%’就能够让拥有长途机器以root帐号登陆mysql服务器。也得以将’localhost’改为某一个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)

 

发生此题材的由来1般有多个:

壹、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…”的缓解形式:

同1在几次三番字符串添加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地图