エラー2002(HY000):ソケット '/var/run/mysqld/mysqld.sock'(2)を介してローカルMySQLサーバーに接続できません


441

LAMPUbuntu 12.04 LTS(Precise Pangolin)にインストールし、phpMyAdminに rootパスワードを設定しました。パスワードを忘れてしまい、ログインできなくなりました。端末からパスワードを変更しようとすると、次のようになります。

エラー2002(HY000):ソケット '/var/run/mysqld/mysqld.sock'(2)を介してローカルMySQLサーバーに接続できません

どうすれば修正できますか?LAMPを開いたり、アンインストールしたり、再インストールしたりできません。


おそらくそれを再インストールする方が簡単です: stackoverflow.com/a/31984482/763744
Zernel

MySQLを停止してセーフモードで起動し、-grantテーブルをスキップしてパスワードをリセットします
davejal

これを端末に入力します "sudo apt-get install mysql-server"
Humphrey

mysqlサービスを起動または再起動して確認します。sudo /etc/init.d/mysql startまたはsudo /etc/init.d/mysql restart
Jitendra Patel

systemctl start mariadb.service
Thewebus

回答:


253

私はかつてこの問題を抱えていましたが、をインストールすることで解決しましたmysql-server。そのため、mysql-serverではなく、をインストールしたことを確認してくださいmysql-client

そのエラーは、ファイル/var/run/mysqld/mysqld.sockが存在しないことを意味しますmysql-server。インストールしなかった場合、ファイルは存在しません。その場合、それをインストールします

sudo apt-get install mysql-server

しかし、mysql-serverがすでにインストールされて実行されている場合は、構成ファイルを確認する必要があります。

構成ファイルは次のとおりです。

/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf

では/etc/my.cnf、ソケットファイルの設定は次のように/tmp/mysql.sockなり/etc/mysql/my.cnfます/var/run/mysqld/mysqld.sock。ソケットファイルの設定は次のようになります。したがって、削除または名前の変更/etc/mysql/my.cnf、mysqlの使用を許可する/etc/my.cnfと、問題が解決する場合があります。


mysqlデーモンを実行してmysql-server-coreをインストールできますが、mysql-serverをインストールする必要があります。これはバイナリーであり、システムデータベースのセットアップです!
セドリック

99
sudo apt-get install mysql-servermysqlをubuntuにインストールする方法
towry

9
技術的に説明する必要がある場合は、1)を実行します。 "mysql -u <user_name> -h <MySQL_Server_address> -p"を実行している場合、実際にはmysqlクライアントを実行してmysqlサーバーにアクセスしています。「-h」で指定したアドレス/ IPアドレスにmysqlサーバーがインストールされていない場合、上記のエラーがポップアップ表示されます。これは、ソケットmysql.sockを介してMySQLサーバーに接続できないためです。2)Mysql-serverがすでにインストールされている場合は、実行されているはずです。そうでない場合も、同じエラーが発生します。指定したサーバーで実行してください。
Mayur Nagekar 2014

1
これは、データベースが保存されているディレクトリを変更しようとしたが、構成ファイルに間違ったディレクトリを入力した場合にも発生します(タイプミスなど)。typoディレクトリが存在しないことを通知する代わりに、アクセスする権限がないことを通知します。
マイケル、

4
最初のステップとして、サーバープロセスを再起動することをお勧めします(他のサーバーとクライアントの違いを参照してください)。sudo /etc/init.d/mysql restartを試してください。通常、再インストールは必要ありません。最初にログファイルを確認することをお勧めします。mysqlのログファイルだけでなく、サーバーのクラッシュが原因でmysqlが副作用として故障した可能性があるため、/ var / log / syslogも。
2017年

212

これを試して:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

また、(それが実行されているかどうかを確認する):

telnet 127.0.0.1 3306 

おそらくmy.cnf/etc/somewhereLinuxディストリビューションによっては)ファイルの構成が間違っているだけです。


1
同じエラーが発生します。チェックしたところ、メインとmy.cnfの両方のデフォルトバインドはすでに127.0.0.1に設定されています。ただし、上記のコマンドを使用すると、接続できました。「mysql」を実行するだけでエラーが発生する理由を確認するために、探し続ける必要があります。
cchiera 2013

1
telnetが表示されます:リモートホストに接続できません:telnetコマンドの結果、接続が拒否されました。ただし、ローカルホストを開くことができるため、Apacheは引き続き実行されます
Rishi Dua

@cchieraご存知のように、私は以前このエラーに遭遇していませんでした。しかし、sshトンネルを使用してiOSアプリ経由で自分のデータベースに接続したい場合、この2013エラーが発生しました。それを解決するために、私/etc/my.cnf#bind-address = 127.0.0.1 リファレンス1 リファレンス2を編集してコメントしなければなりませんでした。その後、接続できます。この後、私は2002年のエラーが発生していることに気づき、この答えに私を連れて行きましたが、今は再び機能しています。間違いmysqlなく-h、入力せずにエラーをスローしない理由についての説明を得ることで、あなたに同意します。
Pathros

注:mysql -h localhost機能しません。必ずmysql -h 127.0.0.1回答のとおりに使用してください。
vadasambar

この回答のコマンドでログインした場合、どうすればこれを解決できますか?
Carlos A. Jimenez Holmquist

128

私はこれらの答えのすべてを見ていますが、どれもオプション提供しない、パスワードをリセットし、無受け入れ答えを。実際の質問、パスワードを忘れたため、リセットする必要があります。これらの回答のほとんどが示すように、パスワードが実行されているかどうか(インストールされているかどうか)を確認する必要はありません。


パスワードをリセットするには

次の手順に従ってください(本当にパスワードを忘れており、現在その状況にいない場合でも、いつでもそれを試すことができる場合に役立ちます)。

  1. やめる mysql

    sudo /etc/init.d/mysql stop

    または、他の配布バージョンの場合:

    sudo /etc/init.d/mysqld stop
  2. MySQLをセーフモードで起動します

    sudo mysqld_safe --skip-grant-tables &
  3. rootを使用してMySQLにログインします

    mysql -uroot
  4. 使用するMySQLデータベースを選択します

    use mysql;
  5. パスワードをリセットする

    -- MySQL version < 5.7
    update user set password=PASSWORD("mynewpassword") where User='root';
    
    -- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
    
    update user set authentication_string=password('mynewpassword') where user='root';
    
  6. 特権をフラッシュする

    flush privileges;
  7. サーバーを再起動します

    quit
  8. サーバーを停止して再起動します

    UbuntuとDebian:

    sudo /etc/init.d/mysql stop
    ...
    sudo /etc/init.d/mysql start
    

    CentOS、Fedora、RHELの場合:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start
    
  9. 新しいパスワードでログイン

    mysql -u root -p
  10. 新しいパスワードを入力して、何も起こらなかったようにサーバーをもう一度楽しんでください

これは、MySQL rootパスワードのリセットから取得されました。


ユーザーのパスワードを更新してもうまくいきませんでしたが、MySQLモニターにログインしてmysqlデータベースを使用すると、repair table user use_frmこの問題を解決することができました。- stackoverflow.com/questions/4297592/...
クレイグ・バンTonderの

20
MySQL 5.7では、mysql.userテーブルフィールドのパスワードフィールドが削除され、フィールド名は「authentication_string」になりました。そのため、(5)はupdate user set authentication_string=password('mynewpassword') where user='root';
Daniel

これをbashスクリプトにする方法を知っていますか?ボックスを再起動するたびに必要になるようです。
vphilipnyc 2017

何か回避策が必要だと言われますが、実際に毎回これを行う必要がある理由を見つけて修正する必要があります。スクリプトについては、新しい質問を投稿して、既に試した内容を投稿してください。おそらく他の人が助けになるかもしれません
davejal

2
これは私のために素晴らしい仕事が、私は最初にこのソリューションを実装する必要がありました:stackoverflow.com/questions/42153059/...
アンドリュー・フォックス

68

私は次の手順を試しました:

  1. としてログインsuper userまたは使用sudo
  2. gedit/etc/mysql/my.cnfを使用して開く
  3. を検索しbind-address、その値をデータベースサーバーホストマシンのIPアドレスに変更します。私にとってはlocalhost127.0.0.1
  4. ファイルを保存して閉じます。
  5. ターミナルに戻って実行します sudo service mysql start

そしてそれは私のために働いた。


4
これから、私はsudo service mysql restartを実行しただけで動作しました。
Orane

私の場合はエラーがIPは、私のセットバインドアドレス= localhostを変更しました
ニコラス・アリアス

@rshahriar /etc/my.cnfにbind-addressと呼ばれるものはありません。フィールドを追加することをお勧めします
RCBian

@SilvioDelgado sshトンネリングを介して接続する必要がない場合。ここでの説明
Pathros

mysqlサービスを再起動することも私にとってはうまくいきましたが、原因を
特定

41

次のコマンドを実行してこの問題を修正しました。

mysql.server start

Macでbrewを使用してmysqlをインストールする場合は、次のように使用します。

brew services start mysql

35

同様の問題がありました。mysqlが起動しません。

sudo service mysql start
start: Job failed to start

apparmorを無効にした場合:

sudo aa-complain /etc/apparmor.d/*

問題はなくなりました。問題は、mysqldが/run/mysqld/mysqld.sockにアクセスしようとしたが、apparmorプロファイルが/var/run/mysqld/mysqld.sockにのみ許可を与えたことでした(/ var / runは/ runにシンボリックリンクされているため、これらは実際に同じ)。mysqldがすべての構成ファイルで設定されているvarパスを使用していない理由はわかりませんが、/ etc / apparmor.d / usr.sbin.mysqldに以下を追加することで問題を修正できます。

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,

「sudo service mysql start」を呼び出さなければならないことを知りませんでした。MySQLをUbuntuに前回インストールしたとき、インストール時に自動的に起動したと思います。Manjaro上のMariaDBでは、インストール後にサービスを明示的に開始する必要があります。
dmiller309 2014

31

私の場合、ディスクがいっぱいで、mysqldが起動できなくなったことが原因でした。

mysqlサービスを再起動してみてください。

> service mysql restart

または

> service mysql stop

> service mysql start

stopコマンドを認識しない場合、それは間違いなくディスク領域です。パーティションmysqlに割り当てられたスペースを作るか、ディスクを大きくしてください。

ディスク容量を確認する

> df -h

2
同じことが私にも起こりました-ディスク全体。一部のスペースをクリーンアップして再起動し、問題は解消しました。
ダレン、

2
それが実行の問題である場合: "/etc/init.d/mysqld start"はディスクパーティションがいっぱいであることを示します
Tickon

私も同じです、ディスク100%。スペース
ヒューゴ

28

私はmysqlプロセスを殺すことでこれを解決しました:

ps -ef | grep mysql
kill [the id]

そして、私は再びサーバーを起動しました:

sudo /etc/init.d/mysql restart

しかしstart、同様に動作します:

sudo /etc/init.d/mysql start

次に、としてログインしadmin、完了しました。


まあ、実際にはmysqlがクラッシュする前に中止していた。次に、「* Syslogを見てください。」と表示されます。および「ERROR 2002(HY000):Ca n't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'(111)」。最後に、自分自身を回復しようとしていることに気付いたので、それを強制終了して再起動します。
cwhsu

「まれに」「mysql start」が失敗する状況があるため、「restart」引数を使用する必要があります。デーモンプロセスをkillする必要がある場合は、killコマンドの代わりに「stop」引数を使用することをお勧めします。ただし、killallコマンドは、killコマンド(killall mysqld)よりも便利です。
2017年

MySQLのプロセスを強制終了してから再起動MySQLは、私のために素敵な勤務
ヴィシャルシェティ

21

どういうわけか、MySQLサーバープロセスがソケットを作成しなかったか、クライアントが間違った場所でソケットを探しています。

私の最初の提案は、MySQLサーバーが実行されているかどうかを確認することです。2番目の提案は、MySQLサーバーが別のホストで実行されているかどうかです。その場合-h <hostname>は、ターミナルでMySQLクライアントにフラグを追加します。

MySQLが実際に実行されており、ローカルで実行されている場合は、my.cnfファイルを確認してください。次のような行があるはずです

socket = /var/run/mysqld/mysqld.sock

投稿で述べたソケットの場所と一致しているかどうかを確認してください。

経験から、最も可能性の高いシナリオは、MySQLサーバーがまったく実行されていないか、ターミナルからMySQLクライアントを実行しているのと同じホスト上で実行されていないことです。


19

本番サーバーを再起動する必要があった後、同じ問題が発生しました。DigitalOceanドロップレットでDebian 8.1(Jessie)を実行しています。

これは私の問題を解決するために私がしたことです:

  1. ファイル/var/run/mysqld/mysqld.sockが存在するかどうかを確認してください。そうでない場合は、入力して手動で作成しますtouch /var/run/mysqld/mysqld.sock(これは私がしなければならなかったことです)。

  2. MySQLプロセスはこのファイルを使用できます。と入力して、ファイルの所有権を変更しますchown mysql /var/run/mysqld/mysqld.sock

  3. 「2」が完了したら、service mysql restartまたはを入力してMySQLサービスを再起動します/etc/init.d/mysql restart

上記の手順を実行した後、私の問題は解決しました。私はめったにこの問題を抱えておらず、おそらくもっと良い方法があるので、必要に応じて建設的なフィードバックを提供してください:)。


1
ファイルが存在しないことに気づき、mysqlサーバーを再起動しました。それは自動的にファイルを作成し、うまく起動しました。リードをありがとう。
Sojurn

15

mysql-serverが実行されていない可能性があります。mysql.server start端末に入力して実行することを確認します。


15

"bind-adress"my.cnf のパラメーターを確認します。

または、次のコマンドを試してください。

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h 127.0.0.1(つまり、host )

  • -P(大文字の-Pは大文字に注意)3306、つまりMySQLのデフォルトのポート


11

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

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

これによりリンクが作成されます。


私にはうまくいきませんでした:(これにより、2つのフォルダ間でシンボリックリンクが作成されますaskubuntu.com/a/56340/242873
Michael

11

Amazon EC2を使用していて、インスタンスでこの問題が発生している場合は、次のことだけを行う必要があります。

sudo yum install mysql-server
sudo service mysqld restart

Amazon EC2にはサーバーがインストールされていない(クライアントのみがインストールされている)ため、インスタンスにサーバーをインストールする必要がある場合は、その後

 mysql -u root -p

それが機能したかどうかを確認します。


mysqld.serviceの再起動に失敗しました:ユニットmysqld.serviceが見つかりません。Ubuntu 16.04
Ketav Chotaliya

9

エラーが発生するたびに

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

まず、mysqlデーモンが実行されているかどうかを確認することをお勧めします...ほとんどの場合、デーモンはデフォルトでは実行されません。で確認でき/etc/init.d/mysqld statusます。

実行されていない場合は、最初に起動します。

.../etc/init.d/mysqld start.

私はそれが110%の仕事になると思います。


9

localhostを使用する代わりに:

mysql -u myuser -pmypassword -h localhost mydatabase

127.0.0.1を使用

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

(また、-pとmypasswordの間にスペースがないことに注意してください)

楽しい :)


次の行を使用して、セキュリティのためにコマンドラインからパスワードを含めることもできません。mysql -u myuser -p -h 127.0.0.1 mydatabase MySQLはパスワードを尋ね、エコーしません。
DDay、

1
これで解決しました。しかし、なぜ127.0.0.1機能localhostしないのになぜ機能しないのでしょうか。
not2savvy 2017年

9

重要なデータベースのバックアップがあることを確認してから、MySQL関連のものをアンインストールしてみてください

apt-get remove --purge mysql\*

次に、もう一度インストールします。

apt-get install mysql-server mysql-client

これは私にとってはうまくいき、データは保持されました。

PHP MySQLがエラーを表示する場合、PHP MySQLを再インストールする必要があるかもしれません:

apt-get install php5-fpm php5-mysql

それは致命的な武器だと思います。私はすべてを試しましたが、あなたの提案だけが私を助けました。ありがとうございました !
メッソ

9

同じ問題に直面していますmysql serverが、デフォルトで実行されていない場合にも発生します。数秒後に再び停止$ sudo service mysql start するため、わかっている場合は変更できる()コマンドを再度実行します。

その使用コマンド

$ sudo service mysql start   

(を使用するため、必要に応じてユーザーのパスワードを入力しますsudo)、そして実行

$ sudo mysql -u root -p          (put user password if required )

今、あなたはあなたのデータベースを得ました


7

最近のインストールの場合、インストールがSERVER -... mysql-server-5.5としてインストールされているかどうかを確認する必要があります。「mysql」のみをインストールした可能性があります。これはサーバーではなくクライアントのみです。


7

LinuxマシンにXAMPPインストールされている場合は、my.cnfファイルをから/opt/lampp/etc/my.cnfにコピーしてみてください/etc/my.cnf

次に、mysql -u rootもう一度実行します...これで正しいソケットが作成され、MySQLクライアントを実行できるようになります。


7

私もこの問題を抱えていましたが、私はちょうどしました:

sudo service mysql restart 

それは私のために働いた。


7

私は解決策を見つけました

コマンドを実行する前にmysql_secure_installation

  • ステップ1: sudo systemctl stop mariadb
  • ステップ2: sudo systemctl start mariadb
  • ステップ3: mysql_secure_installation

次に、ルートパスワードを要求します。Enter キー押すだけで、新しいルートパスワードを設定できます。


6

私の場合、デフォルトのポート3306は他のプロセスによって使用されていたため、起動していませんでした。他のサービスを停止して実行したところsudo service mysql start、問題なく動作しました。ところで、sudo lsof -Pn -iTCP:3306ポートを使用している可能性がある人を確認するようなものを使用できます。


6

私の場合、それはいくつかのR&Dを行うことで機能しました:

を使用してMySQLに接続できます

root-debian#mysql -h 127.0.0.1 -u root -p

ただし、では機能しませんmysql -u root -p

my.cnfには何も見つかりませんでしbind-addressた。そのため、ログインの問題の原因となっているパラメーターについてコメントしました。socket=/var/lib/mysql/mysqld.sockmy.cnf

サービスを再起動した後、うまくいきました:

root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)

6

私はmysqlを再起動してこの問題を解決しました

/etc/init.d/mysql stop

そして

/etc/init.d/mysql start

それでおしまい。


5

経験上、サーバーが稼働しているかどうかを確認してから、MySQLの設定を試す必要があると私は言います。最後の解決策は、MySQLを再インストールすることです。


5

ターミナルを開き、次のように入力します。

sudo apt-get purge mysql-client-core-5.6

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get install mysql-client-core-5.5

sudo apt-get install mysql-server  

MySQLデータベースコアクライアントとMySQLサーバーパッケージの両方が同じバージョン5.5になります。MySQLクライアント5.5およびMySQLサーバー5.5は、パッケージメンテナーによって決定された、Ubuntu 14.04におけるこれらのパッケージの現在の「最良の」バージョンです。

MySQLクライアント5.6およびMySQLサーバー5.6をインストールする場合は、Ubuntuソフトウェアセンターでmysql-client-core-5.6およびmysql-server-5.6パッケージを見つけることもできます。重要なことは、クライアントとサーバーのバージョン番号がどちらの場合でも一致することです。

これでうまくいきました。


5

正しい権利があるかどうかを確認します。

sudo chmod 755 /var/lib/mysql/mysql

私は同じ問題を抱えていましたが、これでうまくいきました。これを行った後、MySQLを起動することができました。


5

私の場合、実行すると、mysqlプロセスを本当に殺すことができなかったようです

sudo service mysql stop
ps -ef | grep mysql

mysqlプロセスは常にそこにあり、ソケットファイルをブロックしていたようで、新しいmysqlプロセスはそれ自体を作成できませんでした。

だからこれは助けた

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

今使用してデータベースにログインすることができます

mysql -u root

次に、ルートパスワードを更新します。

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

PS:ルートパスワードの更新に問題がありました。「auth_socket」プラグインに問題があるようです。そのため、完全な権限を持つ新しいユーザーを作成する必要がありました。

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";

これにより、パスワードのない「スーパー」ユーザーが作成され、次に接続できます mysql -u super


回答ありがとうございます。mysqlにログインできましたが、データベースにユーザーテーブルがありません。
John Joe

このソリューションは機能します。ただし、sqlステートメントを実行してrootのパスワードを変更する前に、データベースを選択する必要があります。次のステートメント<br> use mysql;<br>を実行すると、<br>を使用できるようになりますUPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
Charle K.

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