ソケット '/var/mysql/mysql.sock'(38)を介してローカルMySQLサーバーに接続できません


385

mysqlに接続しようとして大きな問題が発生しています。私が走ると:

/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私は持っています:

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

私は使用してApacheを再起動しました sudo /opt/local/apache2/bin/apachectl restart

しかし、まだエラーがあります。

それ以外の場合、それが関連するかどうかはわかりませんが、mysql_config --socketsそうすると

--socket         [/tmp/mysql.sock]

53
MySQLは稼働していますか?
David

2
それは確かにそれに接続しようとする際のエラーを説明しています。@Romainが述べたように、MySQLのログに(実行中/var/log/mysqlまたはその周りのどこかに)なぜ実行されないのかを示す何かがあるのですか?起動しようとするとエラーが発生しますか?
デビッド

5
同じエラーが発生していましたが、私の場合、ディスクが100%いっぱいなので、mysqlが起動しないことがわかりました。/var/log/mysqld.logは役に立ちました。
yellavon

4
彼らがそれが実行されているかどうかを尋ねている理由は、おそらくサービスの開始時にソケットが作成されるためです。mysqlをインストールしましたが、サービスを開始したことがないため、.sockファイルは存在しません。入力しservice mysqld start、インストールしている場合。hth
changokun

2
以下のshimanyiの答えは私をsudo service mysql start救った
Siva

回答:


218

ファイルmy.cnf(通常は/ etc / mysql /フォルダー内)が正しく構成されている場合

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

mysqlが実行されているかどうかは、次のコマンドで確認できます。

mysqladmin -u root -p status

アクセス許可をmysqlフォルダーに変更してみてください。ローカルで作業している場合は、以下を試すことができます。

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

それは私のためにそれを解決しました


11
上記の手順を実行してmysqldサービスを再開した後、それは私を助けました。
whirlwin

11
権限を755に設定して、ディレクトリの所有者のみが書き込みできるようにするのが最適です。
codewaggle

2
私の問題は、実際には、私のWebアプリのストレージボリュームが容量不足になったことだけでした。クラシック!
James T Snell 14

3
私のopenSUSE 12.3では、my.cnfは/ etc /にあります。

/var/log/mysqld.logへのアクセス許可も変更する必要があります。ありがとう
Allahbakash.G '20

94

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)

お役に立てば幸いです。


私は自作を使用しましたが、それは魅力のように機能しました:brew install mysql
JaKXz

2
私はすでにクライアントをインストールしていたので、必要なコマンドはsudo apt-get install mysql-serverそれでよかった
ErichBSchulz

1
クライアントCan't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38) からの出力ではありませんか?接続しようとしているクライアントと失敗しているクライアントですよね?(元の質問はそれを明確にするために編集が必要だと思います)。
msouth 2014年

76

私にとってうまくいった簡単な回避策:mysql_connect()で「localhost」の代わりにローカルIPアドレス(127.0.0.1)を使用してみてください。これにより、phpがunixソケットではなくTCP / IPを介して接続するよう「強制」します。


それはうまくいきました...しかし、なぜですか?MySQLは接続しようとする前に解決localhostして取得しません127.0.0.1か?
Jaime Hablutzel、2014

3
いいえ... localhostを使用する場合、インターネットソケットは使用しません。IPCソケットを使用しています。en.wikipedia.org/wiki/Unix_domain_socket。127.0.0.1はローカルループバックです。つまり、リクエストはマシンを終了しませんが、TCP / IPを使用するため速度が低下します...
マスターヨーグルト

私もうまくいきます。私はubuntu 14.04、hhvm、nginxを使用しています。
Maykonn 2015年

1
ありがとう。これは私にとっては
うまくいき

これは、sshトンネル経由でリモートサーバーに接続する場合にも必要です
Tamm

51

次のエラーが発生しました

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

いくつかの方法を試し、最後に次の方法で解決しました

sudo gksu gedit /etc/mysql/my.cnf

修正

#bind-address       = 127.0.0.1

bind-address        = localhost

そして再開した

sudo /etc/init.d/mysql restart

動いた


同様の問題がありました。イーサネット(192.168.220.11)からwifi(192.168.220.12)に移動しましたが、バインドアドレスがイーサネットIPにハードコーディングされていました。localhostそれを修正した。
Chris G

30

mysqldを実行していることを確認します。 /etc/init.d/mysql start


3
またはsudo service mysql start|restartUbuntuの場合。
Wtower 2016

18

この問題が発生しないようにするには、サーバーの電源を切るのではなく、コマンドラインからサーバーを正常にシャットダウンする必要があります。

shutdown -h now

これにより、マシンの電源を切る前に実行中のサービスが停止します。

Centosに基づいて、この問題が発生したときに再び元に戻すための追加の方法は、mysql.sockを移動することです。

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

service mysqld start

サービスを再起動すると、mqsql.sockという新しいエントリが作成されます


14

ファイルにcronジョブを設定すると、このエラーが発生しました。ファイルのアクセス許可を777に変更しましたが、それでも機能しませんでした。最後に私は解決策を得ました。他の人の役に立つかもしれません。

このコマンドで試してください:

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

-hはホストを意味し、-Pはポートを意味し、-pはパスワードを意味することに注意してください。


ソケットを使用する代わりにTCP / IPを介して接続を強制することは非効率的です(この以前の回答に従って、サーバーでlocalhost TCP / IPサポートをオンにする必要があります)。2011年から受け入れられた回答の方が優れています。サーバーを構成して、ソケットを適切に使用できるようにします。
クエンティン

10
-pポートを意味するのではなく、パスワードを意味します。混乱しました-P
Quentin

これは、多かれ少なかれ、この以前の回答の
Quentin

私にとっては、正しいホストを定義するだけの問題でした mysql -h 127.0.0.1 -u root -p
。– kghbln

12

ここでの多くの回答からわかるように、MySQLサービスを開始したときにこのエラーメッセージが発生する可能性がある多くの問題があります。問題は、適切なログファイルを見るだけで、MySQLは通常、何が問題なのかを正確に通知するということです。

たとえば、Ubuntuでは、を確認する必要があります/var/log/syslog。他にも多くのものがこのファイルにログを記録している可能性があるgrepため、mysqlメッセージtailを確認し、最新のものだけを確認したい場合があります。まとめると、次のようになります。

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

他の誰かが「これは私のシステムで機能した」と言ったので、設定を盲目的に変更しないでください。実際にシステムの何が問題になっているのかを理解すると、より良い結果がより早く得られます。


5
+1一歩下がって、他の多くの回答が考慮すらできないことを指摘するために-アプリケーションが問題として報告したかもしれないものを実際に確認することは、盲目的に急いで変更しないよりもはるかに優れたアプローチですさえ適用される...!
SlySven 2016年

ああ、それで間違っ.cnfたを使っている。なるほどね。これで、ランダムなことをやめ、実際の問題に取り組むことができます。ありがとう。
Synetech 2018年

11

別の回避策は、/ etc / my.cnfを編集して、[client]セクションにホストを含​​めることです。

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

次に、mysqlサービスを再起動します。

この回避策は、サーバーバージョン:5.5.25a-logソース配布でテストされました。


まだmy.cnfにない場合は、[client]セクションを追加することをお勧めします
Cris

7

私は同じ問題を抱えていましたが、それはmysqlサーバーの実行中にmysqlドライバーの更新が原因で発生しました。mysqlとapache2の両方を再起動するだけで修正しました。

sudoサービスmysql停止

sudoサービスmysql start

sudoサービスapache2停止

sudoサービスapache2開始


私の場合、mysql実行されていませんでした。走ったsudo service mysql start後で走っsudo service mysql statusていなかったことを確認するために走った。
Tass

6

私の場合、私はCentos 5.5を使用していました。問題は、mysqlサービスが何らかの方法で停止されたことが原因であることがわかりました。だから私はコマンドでmysqlサービスを開始しました:

 /etc/init.d/mysqld start

だから..愚かな間違い。


6

すべてが正常に機能し、このエラーが発生し始めた場合は、他に何もする前に、ディスク領域が不足していないことを確認してください。

df -h

mysql.sockが作成されているボリュームが100%使用されている場合、MySqlはそれを作成できず、これがこのエラーの原因になります。古いログファイルなど、不要なものを削除するだけです。



5
sudo service mysql start

これはうまく機能するはずです。mysql設定に影響するいくつかのコマンドを変更した可能性があります。


またはsystemctl start mariadb.serviceFedora 22またはRedHat7。その後、rootパスワードを設定することができます。
ジュニアメイヘ2015年

5

そこにこの問題に多くのソリューションがありますが、私の状況のために、私は修正するために必要DATEマシン/サーバー(上のUbuntu 16.04サーバ)。

i)サーバーの日付を確認して修正します。

ii)実行 sudo /etc/init.d/mysql restart

それはそれを始めるはずです。


4

MAMPを実行していて、.sockファイルが別の場所にあったため、エラーが発生しました。アプリが実際にどこにあるかを指し示すべきであるとアプリが考えた場所にシンボリックリンクを追加したところ、それは魅力のように機能しました。


アプリがそれが実際にどこにあるかを指し示すべきであると考えたところにシンボリックリンクをどのように追加できますか?
Gilberto Ibarra

4

また、これは権限の問題であることがわかりました。私は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* 

4

私にとっては、これは単にMySQLのロードに時間がかかるケースでした。データベースの1つに100,000を超えるテーブルがあり、最終的には起動しましたが、この場合は明らかに長い時間がかかります。


3

AWS(Amazon Web Services)マイクロバージョンを使用している場合は、メモリの問題です。私が走ったとき

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を再起動することができました。


AWSサーバーの「マイクロ」インスタンスで同じ問題があり、スワップファイルをDIDにすると「エラー2002(HY000):ソケット/ var / run / mysqld / mysqldを介してローカルMySQLサーバーに接続できません」を修正することを確認できます.sock '(111) "問題。@ jth_92ありがとうございます!
コナラス

3

次の--socketようなオプションを使用してmysql.sockファイルの場所を指定することで、いつでもmysqlサーバーを起動できます。

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

これは、ソケットファイルの場所がmy.cnfファイルの別の場所で指定されている場合でも機能します。


3

解決策がうまくいかない人のために、試してください:

cd /etc/mysql

my.cnfが存在するかどうかを確認します

nano my.cnf

次のように、バインドアドレスが1つだけであることを確認します。

bind-address = 127.0.0.1

そうでない場合は、それが問題である可能性があります。nanoを終了してファイルを保存してください。

そして service mysql start

nano(そのテキストエディター)がない場合はapt-get install nano、それをインストールし、Ctrl + Xを押して終了するだけです。同じファイルを保存して使用するには、Yと言うことを忘れないでください。


残念ながらこれはうまくいきませんでした。これは基本的に、ローカルマシンのみがmysqlにアクセスできることを示しています。リモート接続はありません。
スティーブン2017年

3

サーバーを起動しようとしたときにもこの問題が発生したため、サーバーを起動するだけでよいという回答の多くが機能しませんでした。最初にできることは、次のコマンドを実行して、構成エラーがないかどうかを確認することです。

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

表示されたエラーが1つありました。

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

基づいて、この質問、私はコメントのいくつかは言って、私の削除何続くので、私もサーバは、始めることができなかったために認められソリューション動作しないでしょう/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.

ここからの提案に基づいて、これを修正するために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

現在、すべてが期待どおりに機能しているようです。


チェック/var/log/mysql/error.logは私の場合に役立ちました。[ERROR] Can't init tc log次の回答を使用してすぐに修正されたものがありました:dba.stackexchange.com/a/185006/163583
Juraj.Lorinc

2

追加

--protocol=tcp 

あなたのつながりにあるプラマーターのリストに私のために働いた。



2

今日、この問題に遭遇しました。これらの答えのどれも修正を提供しませんでした。mysqlサービスを開始するには、次のコマンド(https://stackoverflow.com/a/20141146/633107にあります)を実行する必要がありました。

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の次のエラーによって部分的に示されました。

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なしでコマンドを実行した場合のみです。権限チェックが失敗した場合、ディスクがいっぱいであることを報告します(パーティションがいっぱいに近くない場合でも)。


2

CentOS 7、64ビット。新規インストール。
私の場合、エラーは、適切なMySQLサーバーとMySQLクライアントがインストールされていなかったことが原因でした。
を使用してyummariadbmysql-communityエディションを削除しました。MySQL公式Webサイトからクライアントとサーバーのrpmをダウンロードしました、サーバーとクライアントをインストールしました。

サーバーのインストール時に、MySQLのrootアカウントのパスワードが、で表示できるファイルに保存されているというメッセージが表示されましたsudo cat /root/.mysql_secret

クライアントとサーバーをインストールした後、MySQLが機能しているかどうかを確認し(そうする前に再起動したと思います)、コマンドsudo service mysql statusを実行して結果を得ました。

MySQL実行中(2601)[OK]

.mysql_secretファイルのパスワードを使用してMySQLにログインしました
mysql -uroot -pdxM01Xfg3DXEPabpf。ご了承くださいdxM01Xfg3DXEPabpf .mysql_secretファイルに記載されたパスワードです。

次に、mysqlプロンプトで次のコマンドを入力してrootのパスワードを変更します。

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

それ以来、すべてがうまくいきました。


1
サーバーバージョンのRHEL6U6の同じケース:5.6.23-enterprise-commercial-advanced。
HCDは2016年


2

これはあなたの質問に直接答えるのではなく、そのサブセット、つまりPythonAnywhereを使用します。私は修正を探すときにこの質問に出くわし続けたので、私の状況で他の人を助けることを期待してここに追加します。


PythonAnywhereは、効率と信頼性を向上させるために、データベース接続のホスト名を変更することを決定しました

アカウントのMySQLデータベースインスタンスへの接続に使用する公式のホスト名がmysql.serverからyourusername .mysql.pythonanywhere-services.comに変更され ました。これにより、ここ数週間で問題が発生し始めたインフラストラクチャの一部が迂回され、従来の方法よりもはるかに効率的で信頼性が高くなるはずです。

したがって、ホスト名を上記で強調表示された値に更新する必要があります。


2

この問題が発生しました。最後に確認した1日の後、答えがわかりました。MariaDBの起動時にmysql.sockファイルが作成され、MariaDBのシャットダウン時に削除されます。MariaDBが実行されていない場合は存在しません。MariaDBをインストールしなかったのかもしれません。以下の指示に従ってくださいhttps : //www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST


1

このソケットエラーが発生し、MySQLが実行されていないことが原因でした。新規インストールを実行する場合は、必ず1)システムパッケージと2)パネルインストーラー(mysql.prefPane)をインストールしてください。パネルインストーラーを使用すると、システム環境設定に移動してMySQLを開き、インスタンスを実行できます。

新規インストールでは、変更を適切に有効にするためにコンピューターをリセットする必要があったことに注意してください。再起動後、新しいインスタンスが実行され、問題なくlocalhostへの接続を開くことができました。

また、MySQLの以前のバージョンがインストールされているようですが、パネルが削除されているため、Macユーザー向けにMySQLのインスタンスを簡単に実行できます。

この再インストールプロセスの適切なリンク:http : //www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.