Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2),mysqldmysqld.sock
今天在ubuntu上串連mysql資料庫時,遇到一個小問題
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
第一次使用時還可以使用的,突然就不好了,不知道是不是沒吃藥,
先查看資料庫狀態:
jason@jason-Aspire-EC-471G:~$ sudo /etc/init.d/mysql status
(因為我使用的是普通使用者,所以要sudo一下)
1.如果出現:
jason@jason-Aspire-EC-471G:~$ sudo /etc/init.d/mysql status
* /usr/bin/mysqladmin Ver 8.42 Distrib 5.5.41, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 5.5.41-0ubuntu0.14.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 8 min 2 sec
Threads: 1 Questions: 110 Slow queries: 0 Opens: 291 Flush tables: 1 Open tables: 4 Queries per second avg: 0.228
等相關資料庫配置資訊,表示資料庫是start狀態,是可用可串連的。
2.如果出現:
* MySQL is stopped.
表示資料庫是stop狀態,是不可用不可串連的。
也可以這樣>
在串連本機資料庫,很傻瓜的做法就是在命令列鍵入mysql,
1.如果出現:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)那麼串連不上資料庫的
2.如果出現:
ERROR 2002 (HY000): Access denied for user 'jason'@'localhost' (using password: NO) 那麼表示可以串連的
使用jason@jason-Aspire-EC-471G:~$mysql -uroot -p 也會出現
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
不管怎樣查看,最終問題都是指向
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
網上查了下,資料庫不在啟動狀態,應該是許可權的問題(因為我成功啟動過,然會突然不行了,其中也有動過my.cnf檔案),
1.首先鍵入” ps -ef | grep mysql“
jason@jason-Aspire-EC-471G:~# ps -ef|grep mysql
root 21721 1958 0 14:14 pts/12 00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql 22132 21721 0 14:14 pts/12 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/lib/mysql/jason-Aspire-EC-471G.err --pid-file=/var/lib/mysql/jason-Aspire-EC-471G.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root 24309 21554 0 14:29 pts/12 00:00:00 grep --color=auto mysql
可以查到mysql的進程,ok,kill掉mysql的進程
jason@jason-Aspire-EC-471G:~$ kill 22132
2.然後把資料庫重新啟動,但每次都是【fail】,因為我使用的是普通使用者"jason",然後"sudo -s"切換到管理員root,啟動資料庫,如下
jason@jason-Aspire-EC-471G:~$ sudo -s
[sudo] password for jason:
root@jason-Aspire-EC-471G:~# /etc/init.d/mysql restart
* Stopping MySQL database server mysqld [ OK ]
* Starting MySQL database server mysqld [ OK ]
* Checking for tables which need an upgrade, are corrupt or were
not closed cleanly.
啟動完成了
用管理員也可以串連資料庫。資料庫啟動成功了,那麼切換到普通使用者吧"su jason" ,再次鍵入
jason@jason-Aspire-EC-471G:~$ sudo /etc/init.d/mysql status查看資料庫狀態,則會出現資料庫相關配置資訊
這時普通使用者也可重啟資料庫。可以進行備份,恢複等相關操作。
本來已經完結的,今天在使用時又出現了,所以又來補充幾句,
今天按照上面的步驟,切換到root使用者重啟也【fail】了,
這樣不成功的話請使用命令
root@jason-Aspire-EC-471G:~# lsof -i tcp:3306
這裡會顯示mysql的一些進程,
全部kill掉,殺死進程,然後再串連或者重啟就好了。