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


255

mysqlに接続しようとすると、次のエラーが発生します。

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

このエラーの解決策はありますか?その背後にある理由は何でしょうか?


私はここにこれに答えている、下のリンクをチェックしてください:stackoverflow.com/a/35577309/4773290
Pratikパティル

回答:


222

「localhost」または「127.0.0.1」に接続していますか?「localhost」に接続するとソケットコネクタが使用されますが、「127.0.0.1」に接続するとTCP / IPコネクタが使用されることに気付きました。ソケットコネクタが有効になっていない/機能していない場合は、「127.0.0.1」を使用してみてください。


27
その場合、MYSQLサーバーが実際に実行されているかどうかを確認する必要があります。
JanThomä2014

3
ソケットパラメータを使用してソケットを強制的に使用することもでき(-Sは/ usr / bin / mysqlを使用)、ポートを指定してTCP / IPを強制する(-Pを/ usr / bin / mysqlを使用する)
Kaoru

localhost以外の完全修飾ネットワーク名を使用するとうまくいきました。クライアント側の「hosts」ファイルで宣言されていることを確認してください。
Fabien Haddadi 2016年

2
cygwinユーザーへの注意:たとえば、cygwin mysqlクライアントがローカルWAMP mysqlサーバーにフックしようとする場合は、-h <localhost以外のホスト名>を使用してください。mysql.sockファイルを作成してmy.cnfファイルで宣言しないでください。機能しません。
Fabien Haddadi 2016年

ホスト名が間違っていても、まったく同じエラーが発生しました。/etc/hostsDockerコンテナー内のファイルを見ると、MySqlホスト名がであることがわかりましたmysql。接続構成でこの同じホスト名を使用すると、問題が解決しました。
ステファン

188

mysqlサービスが実行されていることを確認します

service mysqld start

次に、以下のいずれかを試してください。

(mysqlのパスワードを設定していない場合)

mysql -u root

すでにパスワードを設定している場合

mysql -u root -p

5
Debianのの新しいリリースに:service mariadb start理由mariadb.org/debian-9-released-mariadb-mysql-variant
ザーラ

2
その男にメダルを与えます。
シラジアラム2017

これが私の答えでした。私はmariadbを使用しているので、解決策は「sudo systemctl start mariadb」を実行することでした。その後はすべて順調でした。
mohsen

@Zahraにメダルを贈る
Ahmed C

28

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

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

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

mysqladmin -u root -p status

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

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

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


それも私にとってはうまくいきますが、最新バージョンにアップグレードしてからこの問題が表示された後、なぜこれが起こるのか知っていますか?
Ben

sudo chmod -R 777 / var / lib / mysql /
Docker

23

MySQLサーバーが実行されていないか、それがそのソケットファイルの場所ではありません(my.cnfを確認してください)。


上記の問題があり、これが問題でした。ありがとう。
オシロワネン2014年

3
Homebrewのインストールはどこにありますか?
pal4life 2014

19

おそらくにmysql.sockは存在しません/var/lib/mysql/

同じファイルが別の場所にある場合は、シンボリックリンクします。

例:私はそれを持っています /data/mysql_datadir/mysql.sock

ユーザーをmysqlに切り替え、以下のように実行します。

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

それは私の問題を解決しました


mysql.sockの名前を別の名前に変更してから、mysqldを再起動し(「service mysqld restart」)、別の名前に変更してmysql.sockに戻すと、うまくいきました。この回答のわずかなバリエーションなので、ありがとうございます。
ファジー分析

この答えは、位置助けるかもしれないmysql.sockファイルを
のび太

15

最近のRHELを使用している場合は、mysql dbではなくmariadb(オープンソースのmysql db)を起動する必要がある場合があります。

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

その後、通常の方法でmysqlにアクセスできます。

mysql -u root -p

ちなみに、これはCentOS 8.1でも機能します。とをインストールmariadb-servermariadbたら、mysql_secure_installationデフォルトの安全でない設定をクリーンアップするために実行することを忘れないでください。
Dio Phung

13

私の場合、ソケットファイルを/etc/my.cnf から内の別の場所に移動し/var/lib/mysql/mysql.sockました/tmp/mysql.sock

mysqldサービスを再起動した後でも、接続しようとするとエラーメッセージが表示されます。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

問題は、クライアントの構成方法にあります。診断を実行すると、実際には正しいソケットパスが表示されます。例えばps aux | grep mysqld

作品:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

動作しません:

mysql -uroot -p
mysql -uroot -p -hlocalhost

mysql config内のセクションの下に同じソケット行を追加することにより、この問題を修正できます[client]


13

/etc/my.cnf 次の行を追加して編集するだけですmy.cnf

[mysqld]

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

[client]

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

mysqlを再起動して再度接続します

mysql -u user -p password database -h host;


唯一の正解。なぜ賛成票が足りないのかしら。
CentAu

11

mysqldサービスが実行されているかどうかを確認し、実行されていない場合はサービスを開始します。

問題が解決しない場合は/etc/my.cnf、次のように探して変更します。ここで、で始まる行が表示されsocketます。この更新を行う前に、そのファイルのバックアップを取ってください。

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

への変更

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
こんにちはSekar、「find / -name my.cnf」と入力して、2つの場所を取得しました。1)/opt/lampp/etc/my.cnf 2)/etc/mysql/my.cnf。だから、使用する1 ..私はここに質問を... stackoverflow.com/questions/32437796/...
ナナPartykar

7

MySQLのコミュニティ開発フォークであるMariaDBは、多くのディストリビューションでMySQLのデフォルト実装になっています。

だからまず始めに、

$ sudo systemctl start mariadb

これが失敗した場合は、

$ sudo systemctl start mysqld

次に、mysqlを起動します。

$ mysql -u root -p

現在のところ、Fedoraではパッケージの名前が付けられmariadb 、Ubuntuでは名前が付けられていますmariadb-serverます。

したがって、システムにまだインストールされていない場合は、インストールする必要があります。


7

に十分なスペースがあることを確認してください/var。Mysqlデーモンがドライブに追加情報を書き込めない場合、mysqlサーバーは起動せず、エラーが発生しますCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

使用を検討してください

expire_logs_days = 10
max_binlog_size = 100M

これにより、ディスク使用量を抑えることができます。


おかげで、oracle virtualboxでmysqlを実行しています。bdのダンプを作成したときにスペースが足りなくなり、mysqlサーバーを起動できませんでした。ダンプファイルを削除すると、mysqlサーバーを再起動できました。
JayCee 2013年

1
これで解決しました。本番環境ではinnodb_buffer_pool_sizeを非常に高い値に設定していたため、仮想マシンでmysqlがクラッシュしました。
ベンジャミンブリッツィ2014

1
ファブリケータを使用しているときにこの問題があり、解決策はで変更innodb_buffer_pool_sizeすることmy.cnfでした。のような小さな値に設定することinnodb_buffer_pool_size = 50Mは、この仮説を破棄するための良いテストです;)
Yercalamarino

それはひどい問題でした、ディスク容量以外のすべてをチェックしました。/ varからスペースを解放しました、戻ってきました!
Nadjib Mami 2017

5

これが私のために働いたものです:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart


4

サーバーを起動したことを確認します。

mysql.server start

次に、rootユーザーで接続します。

mysql -uroot

3

mysqlが以前は機能していて突然停止した場合は、サーバーを「再起動」するだけです。

私のCentOS VPSでこの問題に直面していました。->

常に得ていた

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

すべてのテクニックを試し、最後にサーバーを再起動すると問題が修正されました->

shutdown -r now

お役に立てれば !!



3

/ var / lib / mysqlのファイルを変更する場合(コピーまたは置換など)、ファイルの所有者をmysqlに設定する必要があります。mariadb.serviceの再起動が失敗した場合、これは非常に重要です

chown -R mysql:mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *


2

最初に「service mysqld start」と入力してログインします


何を言いたいの?ここで質問する前にFAQをお読みください
Freak

この質問は3年前に無事に回答されました。この正確な答えは昨年より完全に与えられました。
ケアナーボン2013年

2

MySQLサーバーが正しくインストールされていることを確認してください。このエラーに何度も遭遇し、ソケットからのデバッグは複雑だと思います。つまり、再インストールする方が簡単かもしれません。

CentOS 7を使用している場合、正しいインストール方法は次のとおりです。

まず、mysqlコミュニティソースを追加します
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

次に、それをインストールすることができます yum install mysql-community-server

systemctlで起動します。 systemctl start mysqld


1

私の問題は、mysqlを正常にインストールし、それが正常に機能することでした。

しかし、ある日、同じエラーが発生しました。

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

また、mysql.sockファイルは存在しませんでした。

この解決策で問題が解決し、mysqlが再び稼働しました。

rootとしてログインします。

sudo su -

実行:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

ルートとしてテスト:

mysql -u root -p

これで、mysqlが稼働しているはずです。

これが他の誰かにも役立つことを願っています。


1

mysqlはmy.cnfファイルからソケットファイルの場所の情報を読み取りますが、mysql_secure_installationプログラムはそれを正しく行わない場合があることに注意してください。

あなたが私のようなもので、インストール時に物事をシャッフルした場合、mysqlでデータベースにうまく接続できる状況に入る可能性がありますが、物事は保護されません(とにかくそのスクリプトを使用しません)。

これを修正するには、sreddyからの提案が適切に機能します。スクリプトがソケットを期待する場所から実際の場所へのソフトリンクを作成します。例:

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

(私は/ tmp /をソケットのデフォルトの場所として使用しています)


1

次の変更を加えるとうまくいきました

[mysqld]とmy.cnfの[client]に同じソケットのパスが記述されている場合は、mysqlを再起動します

[mysqld] socket = / var / lib / mysql / mysql.sock

[クライアント] socket = / var / lib / mysql / mysql.sock


1

このエラーを再現する1つの方法:外部サーバーに接続するつもりでしたが、存在しないローカルサーバーに接続する場合:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

したがって、次のようにホストを指定する必要があります。

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

これは愚かな提案かもしれませんが、DBがlocalhostでホストされていることを100%確認してください。たとえば、ネットワーク管理者がAmazon DBホスティングを選択(または変更)した場合、代わりにそのホスト名が必要になります。


ホスティングプロバイダー1and1を使用していますが、ホストにssh-ingした後にこのエラーが発生しました。修正は単にホスト名「mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520」を提供することでした
rob

1

私の場合、新しいデータベースをインポートしていましたが、その後再び接続できませんでした。ようやく宇宙の問題だと気づきました。

したがって、最後のデータベースを削除して、ハードドライブを拡張するか、私が行ったことで、仮想マシンのスナップショットを復元できます。

誰かがそれが便利だと思ったときのために


0

SSHクライアントでmysqlを接続しようとしているときにこの問題に遭遇しました。ソケット間の切り替えが必要な場合、コマンドにソケットパスを追加すると役立つことがわかりました。

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

これは、ディスク領域が不足している場合に問題になります。解決策は、HDDから一部のスペースを解放することです。

説明を読むためにもっと読んでください:

LinuxでMySQLを実行している場合は、disk freeコマンドでHDDの空き容量を確認します。

 df 

あなたがそのようなものを手に入れているなら:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

その後、これが問題であり、今あなたは解決策を持っています!

mysql.sockはルートフォルダーの下にあるmysqlフォルダーに作成されるため、スペースが不足しているため、ルートフォルダーを作成できません。

mysqlディレクトリの下で定期的にlsコマンドを実行している場合(openSUSE 11.1は/ var / lib / mysqlにあります)、次のようになります。

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

mysql.sockファイルが頻繁に表示されたり消えたりします(lsで割り当てて、mysql.sockファイルがフォルダにあるインスタンスにヒットする必要があります)。

これは、十分なディスク領域がないために発生しました。

私はいくつかの人々を助けることを願っています!!!! ありがとう!


0

explicit_defaults_for_timestampmy.cnf から無効にする必要がありました。


0

最初の2、3の解決策を試してください。エラーはスタイルポップアップです&見つけることができない場合/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

/ var /で利用可能なスペースを確認します

df

ディレクトリがいっぱいの場合、いくつかの使用されていないファイル/ディレクトリを削除します

rm /var/cache/*

おそらくあなたの問題は今ソートされます。


0

sf.netのシェルにいる場合は、以下を試してください:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

プロジェクト管理者プロファイルのMySQLデータベースに表示されているように、{LETTER}と{GROUP ID}を変更します。

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