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

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

mysql,Mysqldump,Mysqladmin,php连接mysql服务常会指示上边错误:

前几日用pdo连接mysql碰到三个出人意料的难点,host设为1二7.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文件”进行一而再时,却1筹莫展得到“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贰7.0.0.壹有哪些分别呢?在我们印象中那七个都足以访问到本地的劳动,不过精神上有啥差别的?

  • 将连接参数“host”的值由“localhost”改成“12七.0.0.1”;
  • 按上边方法,在“/etc/mysql.cnf”中内定“sock文件”地方。

<?php
try
directory解决形式,socket的缓解方式。{
 $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=12七.0.0.一,使用 TCP连接,mysql
server会认为那个一而再来自12七.0.0.一以此IP可能localhost.localdomin这些域名。

 

【化解方案】

那是出于修改mysql服务的了socket文件mysql.sock地方,而致使不能够通过mysql
socket文件一连到mysql服务引起的,具体消除办法如下:
一、查看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 即可!
 
 
连日来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服务运维后它的长河里有2个–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

一、查看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.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…”的消除格局:

三、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()

 

今天接2连3mysql数据库的时候蒙受贰个题材: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 是不是曾经起步.

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]金沙注册送58 ,”项下找到”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=一千他说太多了,然后改成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

那般,能够健康连接数据库了

再附1篇有关小说:()

 mysql_real_connect()试图建立到运维host的一个MySQL数据库引擎的3个再而叁。其函数原形为:

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)   

  
笔者要编1段程序用来远程连接2个mysql数据库。笔者在数据库的本机上做试验,发现mysql_real_connect()的第一个参数设为”localhost”时得以不奇怪连接,当改写为该机器的IP地址”1九二.16捌.十0.贰”时就总是战败。作者在程序中写的原句为:

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

 

  
最初,笔者以为将”localhost”改为”1九2.16八.100.二”之后要将第四个参数端口号写上,但依旧万分。由于作者是在Linux上做的,所以想大概必要将第三个参数unix_socket写上,结果也许那些。于是到google找化解方法,发现要远程连接mysql要求为mysql的钦命帐号设置远程连接的权力。在本身的次序中,就要为root设置那一权力。事实注明,笔者前边总是失利就是由于那些原因造成的。但难点是,网上被附近转贴的章程是错误的,作者照做后还不行,最后问了同桌才缓解的。上面作者实际说一下,望大家不会再被误导。

 

   在mysql数据库中有一个mysql库,它当中含有1个user表,里面存有全数帐号及它们的权柄及特点。对应自笔者的user表中找到User项为root的,发现有两项,其Host项分别为localhost和localhost.localdomain。笔者们只要求把’localhost’改为’%’就足以让具有长途机器以root帐号登6mysql服务器。也得以将’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…

 

2、socket文件路径在陈设文件中安装不完全:

这相似是由于大家修改了mysql配置“/etc/my.cnf”引起的。比如大家修改了陈设文件中“[mysql]”选项下的“socket”参数,而未钦点“[client]”、“[mysql]”选项的“socket”参数,导致mysql使用暗中同意的socket文件地点去搜寻socket文件,从而导致未找到socket文件而引发此错误。

 

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

 

搞定办法:

上边是焚林而猎办法,更详实的介绍能够参考:

一、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…

 

二、完善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服务即可。

 

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

 

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

 

4、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地图