MySQLが失敗する:mysql「エラー1524(HY000):プラグイン 'auth_socket'がロードされていません」


126

私のローカル環境は:

  • 新鮮なUbuntu 16.04
  • PHP 7
  • MySQL 5.7がインストールされている

    sudo apt-get install mysql-common mysql-server

MySQLにログインしようとしたとき(CLI経由):

mysql -u root -p

私は3つのステップで循環的な問題に遭遇しました。

1)最初はいくつかのソケットの問題でした

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

解決策:PCを再起動します。

別のエラーが発生しました:

2)アクセスが拒否されました

ERROR 1698 (28000): Access denied for user 'root'@'localhost'.

考えられる問題?「root」ユーザーのパスワードが間違っています!

解決策:このチュートリアルでrootパスワードをリセットします

正しいパスワードと有効なソケットを使用すると、最後のエラーが発生します。

3)不正な認証プラグイン

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

ここで私は停止したか、どういうわけか1)に再び戻りました。


1
よろしくお願いします:)お問い合わせありがとうございます!
トマーシュVotruba

回答:


371

私は解決策を得ました!

手順2)でrootパスワードをリセットするときに、認証プラグインも次のように変更しますmysql_native_password

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';  # THIS LINE

flush privileges;
quit;

これでログインに成功しました!


完全なコードソリューション

1. bashコマンドを実行する

1.まず、これらのbashコマンドを実行します

sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql

2.次にmysqlコマンドを実行します=>手動でcliに貼り付けます

use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user

flush privileges;
quit;

3.さらにbashコマンドを実行する

sudo /etc/init.d/mysql stop 
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p 

4.ソケットの問題(コメントから)

あなたが表示されたら、ソケットエラーを、コミュニティは2つの可能な解決策に付属しています:

sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &

(@Cerinに感謝)

または

mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld  

(@Peter Dvukhrechenskyに感謝)


ブラインドパスと考えられるエッジエラー

localhostの代わりに127.0.0.1を使用する

mysql -uroot # "-hlocalhost" is default

「ファイルがありません」またはsltエラーにつながる可能性があります。

mysql -uroot -h127.0.0.1

うまく機能します。

ソケットの問題をスキップ

mysqld.sockファイルを作成したり、アクセス権を変更したり、シンボリックリンクを作成したりする方法はたくさんあります。結局問題ではなかった。

my.cnfファイルをスキップ

問題もありませんでした。わからない場合は、これが役立つことがあります


3
これありがとう。これは、mysqlルートパスをリセットする方法に関する優れた回答でもあります。そのため、ソケットの問題が発生する前にタイトルを少し編集して、タイトルが表示されるようにすることもできます。
タワー2016

1
お役に立てて嬉しいです。元のメッセージを保持するために、タイトルをどのように編集しますか?解決策ではパスワードをリセットする必要があることを理解しましたが、タイトルの問題は解決しません。これはより多くのポイントのより複雑な失敗です。rootのパスワードをリセットするために、私はここに行くと思います:stackoverflow.com/a/6401963/1348344
トマーシュVotruba

1
@matanster本当にそうではありません。これは、純粋な段階的な試行錯誤によるものです。どのOSを使用していますか?
トマーシュVotruba

8
mysqld_safe呼び出しが正しくありません。あなたは代わりに実行する必要がありますsudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin

3
ソケットの問題の可能な解決策を回答に追加してください。このように mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld誰かの時間を節約するかもしれない
ピーターDvukhrechensky

41

次のように試すことができます。

サーバーを起動します。

sudo service mysql start

次に、sockフォルダーに移動します。

cd /var/run

靴下をバックアップします。

sudo cp -rp ./mysqld ./mysqld.bak

サーバーを停止します。

sudo service mysql stop

靴下を復元します。

sudo mv ./mysqld.bak ./mysqld

mysqld_safeを起動します。

 sudo mysqld_safe --skip-grant-tables --skip-networking &

mysqlシェルを初期化します。

 mysql -u root

パスワードを変更する:

したがって、最初にデータベースを選択します

mysql> use mysql;

次の2つのクエリを入力します。

mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root'; 

今、すべてが大丈夫になります。

mysql> flush privileges;
mysql> quit;

チェック用:

mysql -u root -p

できた!

N.B, After login please change the password again from phpmyadmin

今チェック hostname/phpmyadmin

Username: root

Password: 123456

詳細については、Ubuntuで忘れたパスワードphpmyadminをリセットする方法を確認してください


2
これだけが私にとってうまくいきます!バックアップと復元のソケットはかなりスマートです
touhid udoy 2018

1
エラー1045(28000): "done!"の前に、ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)あなたの答えでライン123456でログインしよう
trainoasis

phpmyadminで説明されている手順を実行することで解決しました(つまり、パスワードの変更、プラグインの変更)。何らかの理由で 'set authentication_string = password(...)'が機能しなくなりました(エラー1045(28000):アクセスが拒否されました...)。
フィル

12

このmysqlコマンドは、デフォルトでUNIXソケットを使用してMySQLに接続します。

MariaDBを使用している場合は、サーバー側でUnixソケット認証プラグインをロードする必要があります。

これを行うには、次の[mysqld]ように構成を編集します。

[mysqld]
plugin-load-add = auth_socket.so

配布に応じて、設定ファイルは通常、/etc/mysql/またはにあります/usr/local/etc/mysql/


1
これです。他のすべての回答は、エラーを回避する方法を説明しています。これはそれを解決する方法を説明します。
招待

MariaDB 10.4.3以降を使用している場合、デフォルトでunix_socket authプラグインをインストールする必要がありますが、「user」を更新するときにplugin = "unix_socket"ではなく、plugin = "auth_socket"として誤って参照すると、このやや誤解を招くメッセージが表示されます。私の答えは、私がこれを台無しにした方法について詳しく述べています。
Rohn Adams

9

次のいくつかの手順を試すことができます。

Mysqlサービスを最初に停止 sudo /etc/init.d/mysql stop

パスワードなしでrootとしてログイン sudo mysqld_safe --skip-grant-tables &

mysql端末にログインした後、さらにコマンドを実行する必要があります。

use mysql;

UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';

flush privileges;

sudo mysqladmin -u root -p -S /var/run/mysqld/mysqld.sock shutdown

mysqlサーバーを再起動した後も引き続きエラーが発生する場合は、次のURLにアクセスする必要があります。MySQL 5.7ルートパスワードのリセットUbuntu 16.04


8

Ubuntu 18.04およびmysql 5.7の場合

  • ステップ1: sudo mkdir /var/run/mysqld;

    ステップ2: sudo chown mysql /var/run/mysqld

    ステップ3:sudo mysqld_safe --skip-grant-tables&終了(スタックした場合は終了を使用)

パスワードなしでmysqlにログイン

  • ステップ4: sudo mysql --user=root mysql

    ステップ5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    ステップ6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

今すぐログイン

  • mysql -u root -p <root>

1
しかし、どのステップでルートのパスを設定できますか?私が試した$ mysql -u root -pがアクセスはまだ拒否されたため。Access denied for user 'root'@'localhost' (using password: YES)「はい」のパスワードを入力しようとした
AlexNikonov

4

試してみてください:sudo mysql_secure_installation

Ubuntu 18.04での作業


1

私がしたのと同じ間違いをした後に誰かがここに着いた場合:

  1. plugin="mysql_native_password"一時的に切り替えました。私のタスクを実行しました。
  2. 「auth_socket」プラグインに切り替えようとしましたが、誤ってそれを参照したためplugin="auth_socket"mysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. この間違いを修正するためのログイン方法がないmysql_safeため、適切なプラグインに切り替えるために、mysqlを停止して認証をバイパスする必要がありました。plugin="unix_socket"

うまくいけば、彼らは元のポスターのエラーメッセージが表示されている場合、これは誰か、いくつかの時間を節約できますが、真の原因はによるとこれは、実際に自分自身をプラグイン「auth_socket」の存在を欠いていない、プラグイン名をflubbingたMariaDBのドキュメント

MariaDB 10.4.3以降では、unix_socket認証プラグインがデフォルトでインストールされ、デフォルトで「root」@「localhost」ユーザーアカウントによって使用されます。


-7

以下のコマンドで試すことができます:

hduser@master:~$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
hduser@master:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.

それをさらに説明できますか?サーバーを再起動すると、表示されたエラーメッセージはどのように解決されますか?
Nico Haase
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.