2011-03-21 199 views
298

我在嘗試連接到mysql時遇到了一個大問題。當我運行:無法通過套接字連接到本地MySQL服務器'/var/mysql/mysql.sock'(38)

/usr/local/mysql/bin/mysql start 

我有以下錯誤:

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38) 

我有mysql.sock/var/mysql目錄下。

/etc/my.cnf我:

[client] 
port=3306 
socket=/var/mysql/mysql.sock 

[mysqld] 
port=3306 
socket=/var/mysql/mysql.sock 
key_buffer_size=16M 
max_allowed_packet=8M 

/etc/php.ini我有:使用sudo /opt/local/apache2/bin/apachectl restart

; Default socket name for local MySQL connects. If empty, uses the built-in 
; MySQL defaults. 
mysql.default_socket = /var/mysql/mysql.sock 

我已經重新啓動Apache的,但我仍然有錯誤。

否則,我不知道這是相關的,但是當我做mysql_config --sockets我得到

--socket   [/tmp/mysql.sock] 
+41

是MySQL的運行? – David 2011-03-21 10:39:49

+0

我會補充@David,你應該看看MySQL日誌,看看服務器是否真的在運行,或者它已經崩潰/還沒有準備好接受連接。 – Romain 2011-03-21 11:02:37

+0

不,mysql沒有運行,我有「無法連接.....」錯誤 – Lambivist 2011-03-21 11:13:00

回答

179

如果您的my.cnf文件(通常在的/ etc/mysql /下文件夾)的配置是否正確與

socket=/var/lib/mysql/mysql.sock 

你可以,如果MySQL是用下面的命令運行檢查:

mysqladmin -u root -p status 

嘗試將您的權限更改爲mysql文件夾。如果你是在本地工作,你可以嘗試:

sudo chmod -R 755 /var/lib/mysql/ 

上解決了這對我

+10

在我遵循上述步驟並重新啓動'mysqld'服務之後,它幫助我。 – whirlwin 2012-02-23 18:13:46

+11

如果將權限設置爲755,以便只有目錄所有者可以寫入權限,那將是最好的。 – codewaggle 2012-06-09 23:07:24

+11

我編輯答案bc chmod 777是壞習慣 – Mateng 2012-08-31 09:44:59

65

一個快速的解決方法是爲我工作:使用本地IP地址,試着(127.0.0.1),而不是「本地主機」在mysql_connect()中。這「強制」php通過TCP/IP而不是unix套接字進行連接。

+0

這適用於我。 – konyak 2014-06-16 17:49:31

+0

它工作...但爲什麼?即使嘗試連接,MySQL是否不會解析'localhost'並獲取'127.0.0.1'? – 2014-08-02 19:11:59

+3

nope ...使用本地主機時,您不使用Internet Socket。您正在使用IPC套接字。 http://en.wikipedia.org/wiki/Unix_domain_socket。 127.0.0.1是本地環回,這意味着請求不會退出您的機器,但它會使用TCP/IP因此速度較慢... – 2014-10-09 16:31:42

19

請確保您正在運行mysqld時:/etc/init.d/mysqld start

+0

kisco @ kisco:〜$ /etc/init.d/mysqld start -bash:/etc/init.d/mysqld:沒有這樣的文件或目錄 – 2015-03-18 21:17:54

+6

然後它可能是'/etc/init.d/mysql start' – 2015-06-24 11:18:53

+0

爲我工作!萬分感謝! – 2016-09-01 17:19:06

79

你確定你的mysql安裝以及MySQL服務器..

例如安裝MySQL服務器,我會用yum或apt安裝mysql的兩命令行工具和服務器:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server) 

啓用MySQL服務:

/sbin/chkconfig mysqld on 

啓動MySQL服務器:

/sbin/service mysqld start 

事後設置MySQL的root密碼:

mysqladmin -u root password 'new-password' (with the quotes) 

我希望它能幫助。

+1

非常有幫助。我非常確定我需要安裝它,但是這將所有必要的命令放在一個地方。 – Dan 2013-11-14 14:07:57

+1

是的,它爲我工作。 – Awijeet 2014-01-02 16:49:08

+0

我用過自制軟件,它的功能就像一個魅力:'brew install mysql' – JaKXz 2014-01-14 18:06:35

3

你可以隨時使用--socket選項像

mysql --socket=/var/mysql/mysql.sock 

指定的mysql.sock文件的位置,這將工作啓動mysql服務器即使套接字文件在不同的位置指定的位置my.cnf文件。

0

我有這個套接字錯誤,它基本上歸結爲MySQL沒有運行的事實。如果運行全新安裝,請確保安裝1)系統軟件包和2)面板安裝程序(mysql.prefPane)。面板安裝程序將允許您轉到系統首選項並打開MySQL,然後運行實例。

請注意,在全新安裝中,我需要重置計算機以使更改正常生效。重啓後,我得到一個新的實例運行,並能夠打開一個連接到本地主機,沒有任何問題。

另外值得注意的是,我顯然已經安裝了以前版本的MySQL,但已經移除了面板,這使得爲mac用戶運行MySQL的實例變得很容易。

一個很好的鏈接,重新安裝的過程:http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

4

我得到的錯誤,因爲我跑甲基苯丙胺和我.sock文件是在不同的位置。我剛剛添加了一個符號鏈接,這個應用程序認爲它應該指向它的實際位置,並且它像魅力一樣工作。

+0

如何在應用程序認爲應該指向實際位置的地方添加符號鏈接? – 2015-12-16 16:17:00

46

我有以下錯誤

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) 

試過多種方法,最終解決了這個問題,通過修改

#bind-address  = 127.0.0.1 

通過以下方式

sudo gksu gedit /etc/mysql/my.cnf 

bind-address  = localhost 

並重新啓動

sudo /etc/init.d/mysql restart 

它的工作

+4

評論代碼如何解決此問題? – shkschneider 2012-08-31 09:40:10

+1

@AnupRaj:你的回答對我的工作是將bind-address添加到我的配置文件中(在我的例子中爲/etc/my.cnf),就像一個魅力一樣。 – 2013-02-20 01:50:48

+0

我的配置沒有它,並添加它的工作。出奇。謝謝。 – MikeTwo 2015-11-25 17:09:36

2

添加

--protocol=tcp 

到pramaters列表中的連接爲我工作。

9

另一個解決方法是/etc/my.cnf中編輯和包括在節[客戶]主機

[client] 
#password  = your_password 
host   = 127.0.0.1 
port   = 3306 
socket   = /var/run/mysql/mysql.sock 

,然後重新啓動MySQL服務。服務器版本:

此解決方案在測試5.5.25a日誌源的分佈

6

在我的情況,我用的Centos 5.5。我發現問題是因爲mysql服務停止了一些操作。 於是我開始用命令mysql服務:

/etc/init.d/mysqld start 

所以..愚蠢的錯誤。

+0

對我來說也是愚蠢的錯誤!出於某種原因,我最終不得不重新啓動一切。正在瀏覽我的wordpress,然後它突然退出。 – TMilligan 2014-02-18 22:38:33

6

我有同樣的問題,它是由mysql服務器運行時更​​新mysql驅動程序引起的。 我固定它只是重新啓動MySQL和apache2的:

sudo的服務mysql的停止

sudo的服務mysql的啓動

須藤服務的Apache2停止

須藤服務的Apache2啓動

+0

在我的情況下,'mysql'沒有運行。在運行'sudo service mysql status'後運行'sudo service mysql start'來驗證它沒有運行。 – Tass 2014-12-30 19:28:04

3

我還發現這是一個權限問題。我將MySQL文件與工作安裝(在Debian 6 squeeze上)進行了比較,並且必須進行以下所有權更改(其中mydatabase是您擁有的任何數據庫)。

所有權mysql:mysql

chown mysql:mysql /var/lib/mysql 
chown mysql:mysql /var/lib/mysql/ib* 
chown mysql:mysql /var/lib/mysql/mydatabase 
chown mysql:mysql /var/lib/mysql/mydatabase/* 
chown mysql:mysql /var/lib/mysql/mysql/* 

所有權mysql:root

chown mysql:root /var/lib/mysql/mysql 
chown mysql:root /var/run/mysqld 

所有權mysql:adm

chown mysql:adm /var/log/mysql 
chown mysql:adm /var/log/mysql.err 
chown mysql:adm /var/log/mysql.log* 
2

這對我來說

不夠好3210
sudo /etc/init.d/mysql restart 
3

如果您使用的是AWS(Amazon Web Services)Micro版本,那麼這是一個內存問題。當我從終端跑

mysql 

它會說

ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock' (111) 

所以我嘗試以下,它只會失敗。

service mysqld restart 

經過大量搜索後,我發現你必須爲MySQL創建一個交換文件以擁有足夠的內存。列出了說明:http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html

然後,我能夠重新啓動mysqld。

+0

製作一個交換文件在我的情況下沒有解決它。剛剛重啓實例,一切都恢復了。 – Jeet 2014-11-20 16:48:53

+0

我在AWS服務器「micro」實例上遇到了同樣的問題,我可以確認使交換文件DID修復了「ERROR 2002(HY000):無法通過套接字/ var/run/mysqld/mysqld.sock'(111)「的問題。謝謝@ jth_92! – Konaras 2016-05-25 07:45:57

19

爲防止發生此問題,必須從命令行正常關閉服務器,而不是關閉服務器電源。

shutdown -h now 

這會在關閉機器之前停止正在運行的服務。

基於CentOS,再次得到它回來了,當你遇到這個問題的另一種方法是移動的mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak 

service mysqld start 

重新啓動該服務創建了一個名爲mqsql新條目。襪子

+1

它也適用於我...; D – B4NZ41 2013-12-22 05:08:23

+1

這是唯一幫助我,我有權限和套接字位置設置正確,與mysqld運行,但未能連接。 – 2014-06-23 13:04:58

+1

同樣在這裏,這是唯一對我有用的東西。非常感謝@ ali-hashemi – mtchuente 2017-05-18 14:36:49

2

今天我遇到了這個問題。這些答案都沒有提供修復。我需要爲我的mysql服務執行以下命令(這裏找到https://stackoverflow.com/a/20141146/633107)開始:

140319 11:58:21 InnoDB: Completed initialization of buffer pool 
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes 
InnoDB: than specified in the .cnf file 0 5242880 bytes! 
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error. 
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB 
140319 11:58:21 [ERROR] Aborting 

sudo /etc/init.d/mysql stop 
cd /var/lib/mysql/ 
ls ib_logfile* 
mv ib_logfile0 ib_logfile0.bak 
mv ib_logfile1 ib_logfile1.bak 
... etc ... 
/etc/init.d/mysql restart 

這部分是由/var/log/mysql/error.log以下錯誤指示

我也看到磁盤滿錯誤,但只有在沒有sudo的情況下運行命令時。如果權限檢查失敗,它會報告磁盤已滿(即使您的分區甚至沒有接近滿)。

6

如果一切工作就好了,你剛開始看到這個錯誤,你做任何事情之前,確保你不出來的磁盤空間:

df -h 

如果卷在的mysql.sock正在創建的在100%的使用,MySql將無法創建它,這將成爲此錯誤的原因。你需要做的就是刪除一些不需要的東西,比如舊的日誌文件。

2

CentOS 7,64位。新鮮的安裝。
在我的情況下,錯誤是因爲我沒有安裝正確的MySQL服務器和MySQL客戶端。
使用yum,我刪除了mariadb和mysql-community版本。我從official MySQL website下載了客戶端和服務器的rpm,並安裝了服務器和客戶端。

在安裝服務器時,顯示一條消息,指出MySQL根帳戶的密碼存儲在一個文件中,我可以用sudo cat /root/.mysql_secret查看該文件。

所以在安裝客戶端和服務器之後,我用命令sudo service mysql status檢查了MySQL是否正常工作(我想我是在重啓之前這樣做的),並且我得到了結果。

MySQL的運行(2601)[OK]

我登錄到MySQL從.mysql_secret文件中使用的密碼:
mysql -uroot -pdxM01Xfg3DXEPabpf。請注意,dxM01Xfg3DXEPabpf是.mysql_secret文件中提到的密碼。

,然後鍵入在mysql的提示符下輸入以下命令來更改根密碼:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

一切正常從那時起。

+1

RHEL6U6服務器版本爲5.6.23-enterprise-commercial-advanced。 – 2016-05-13 14:08:06

3

對於那些任何解決方案沒有奏效,試一下:

cd /etc/mysql 

檢查,如果我。CNF存在

nano my.cnf 

,並確保你只有一個綁定地址如下:

綁定地址127.0.0.1 =

如果沒有,那可能是問題,只需退出nano並保存文件即可。

service mysql start

請注意,如果您還沒有納米(它是一個文本編輯器),就在剛剛壓力機apt-get install nano安裝它,一旦按Ctrl + X退出,不要忘了說Y保存和使用相同的文件)

+0

不幸的是,這沒有奏效。這基本上只是說只有本地機器才能訪問mysql。沒有遠程連接。 – surfer190 2017-05-31 08:10:25

5
sudo service mysql start 

這應該只是爲你服務。有可能你改變了一些影響mysql配置的命令。

+0

或'systemctl start mariadb.service'在Fedora 22或RedHat 7中。之後可以設置root密碼。 – 2015-06-29 13:14:59

0

我刪除了mysql.sock文件,它工作。把權利放在它上面根本不起作用。無論是重啓,或任何...

4

嘗試-H(主機)和-P(端口):

mysql -h 127.0.0.1 -P 3306 -u root -p

+0

爲我工作。原來我的mysql服務器在localhost/127.0.0.1上找不到。謝謝! – JohnnyQ 2016-10-21 10:52:15

1

我用127.0.0.1的-h而不是本地主機,一切都OK。在其他情況下有什麼 - 上面的錯誤。

+0

嗯,127.0.0.1也在這裏爲我工作..不知道怎麼回事。也許是因爲我在做一些碼頭工? – theicfire 2015-10-08 05:37:20

0

嘗試運行以下命令:

sudo /etc/init.d/mysql start 
8

正如這裏的很多答案可以看到,有很多的,可能導致此錯誤消息,當您啓動MySQL服務的問題。問題是,如果你只是查看適當的日誌文件,MySQL通常會告訴你到底發生了什麼問題。

例如,在Ubuntu上,您應該檢查/var/log/syslog。由於許多其他事情可能也會記錄到此文件中,因此您可能希望使用grep來查看mysql消息,而使用tail來查看最近的消息。總之,這可能是這樣的:

grep mysql /var/log/syslog | tail -50

不要盲目更改您的配置,因爲別人說「這個工作對我的系統。」找出你的系統實際存在的問題,你會更快地得到更好的結果。

+2

+1爲了退後一步,指出許多其他答案都沒有考慮到的問題 - 實際上看到應用程序可能報告的問題是一種更好的方法,而不是盲目衝入並進行更改甚至不適用...! – SlySven 2016-03-20 01:18:15

+0

明智的答案,謝謝亞光 – 2016-09-15 20:33:15

+0

啊,所以它使用了錯誤的'.cnf'。這解釋了它。現在我可以停止嘗試隨機事件並解決實際問題。謝謝。 – Synetech 2018-01-28 05:26:35

2
sudo service mysqld start 

爲我工作,我使用的Centos

+0

即時通訊使用ubuntu – 2016-09-15 16:50:50

-1

編輯您的配置文件/etc/mysql/my.cnf

[client] 
host  = 127.0.0.1 
port  = 3306 
socket  =/var/run/mysql/mysql.sock 
3

這並不直接回答你的問題,但它的一個子集,即使用PythonAnywhere。在尋找修補程序時,我一直在這個問題上磕磕絆絆,所以我在這裏添加它,希望它能幫助其他人解決我的問題。


PythonAnywhere決定更改數據庫連接的主機名,以提高效率和可靠性,爲detailed here

你應該用於連接到您的帳戶的 MySQL數據庫實例中使用的正式主機名具有從mysql.server更改爲 yourusername .mysql.pythonanywhere-services.com。這繞過了我們基礎設施的一部分,該部分已經開始在最近的 周出現問題,並且它應該比舊的 方式更加高效和可靠。

因此,您需要將您的主機名更新爲上面突出顯示的值。

1

當我嘗試啓動服務器時,我也遇到了這個問題,所以很多剛纔說的啓動服務器的答案都不起作用。你可以做的第一件事是執行以下操作,看看是否有任何配置錯誤:

/usr/sbin/mysqld --verbose --help 1>/dev/null 

我確實有一個錯誤出現了:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ... 
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead. 
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled. 
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296' 
160816 19:24:33 [ERROR] Aborting 

簡單grep -HR "innodb-online-alter-log-max-size" /etc/mysql/向我展示了什麼文件包含有問題的行,所以我從文件中刪除了該行。

然後,檢查我的/var/log/mysql/error.log文件我有:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 
InnoDB: than specified in the .cnf file 0 671088640 bytes! 
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error. 
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB 
160816 22:46:46 [ERROR] Aborting 

基於this question接受的解決方案是行不通的,因爲我甚至不能獲得服務器開始,所以我遵循的一些評論說:並刪除了我的/var/lib/mysql/ib_logfile0/var/lib/mysql/ib_logfile1文件。

這使得服務器開始,我是能夠連接和執行查詢,但檢查我的錯誤日誌文件,它很快就得到有幾萬行充滿了這樣的:

160816 22:52:15 InnoDB: Error: page 1415 log sequence number 82039318708 
InnoDB: is in the future! Current system log sequence number 81640793100. 
InnoDB: Your database may be corrupt or you may have copied the InnoDB 
InnoDB: tablespace but not the InnoDB log files. See 
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html 
InnoDB: for more information. 

基礎的根據here的建議,爲了解決這個問題,我做了一個mysqldump並恢復所有數據庫(請參閱其他幾個解決方案的鏈接)。

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql 
$ mysql -u root -p < backup-all-databases.sql 

一切似乎現在按預期工作。

3

對於這個問題,很多解決方案,但我的情況,我只是需要更正機/服務器(的Ubuntu 16.04服務器)上DATE

i)檢查服務器的日期並更正它。

ii)跑sudo /etc/init.d/mysql restart

應該得到它開始那。

4

當我爲我的文件設置cron作業時出現此錯誤。我將文件的權限更改爲,但它仍然不適用於我。最後我得到了解決方案。可能會對別人有幫助。

嘗試使用這個命令:

的MySQL -h 127.0.0.1 -P 3306 -u根-p

記住-h意味着主機和-p表示端口

+0

強制通過TCP/IP而不是使用套接字的連接效率低下(並且要求您打開服務器上的本地主機TCP/IP支持,按照[此前的答案](http://stackoverflow.com /一個/19068分之36390449))。從2011年接受的答案是更好的:配置服務器,以便您可以正確使用套接字。 – Quentin 2016-12-01 15:09:22

+3

'-p'並不意味着*端口*,它表示**密碼**,您已經將它與'-P'相混淆 – Quentin 2016-12-01 15:09:31

+0

這似乎或多或少是[此早期答案]的副本(http ://stackoverflow.com/a/30938253/19068) – Quentin 2016-12-01 15:11:42

1

對我來說 - 這只是花費很長的時間來加載的MySQL的情況。在我的一個數據庫中有超過100,000個表,它最終開始了,但在這種情況下顯然需要很長時間。

0

如果有人找Intialization錯誤

無法連接到數據庫 「/var/run/mysql/mysql.sock」

當運行civicrm & Drupal的只是更改低於

的settings.php和civicrm.settings.php

僅在您嘗試建立數據庫CON地方nection

本地主機爲127.0.0.1 #local自安裝

相關問題