MySQLエラー:: 'ユーザー' root '@' localhost 'のアクセスが拒否されました


264

$ ./mysqladmin -uルート-pは、 ' 編集済み '
のパスワードを入力してください:

mysqladmin: 'localhost'でサーバーに接続できませんでしたエラー:
'ユーザー' root '@' localhost 'のアクセスが拒否されました(パスワードを使用:YES)'

どうすれば修正できますか?



1
@clearlight同じ質問ではありません。この投稿はmysqladminがmysqlへのスーパー特権を獲得する際の問題です。他の投稿はソケットからの単純な接続に関する問題です。
e-info128 2018年

~/.my.cnfファイルが存在する場合は削除してください。
e-info128 2018年

11
これは古いことを知っていますが、将来の訪問者のためにこれを言いたいです。特にrootの場合、コマンド自体にmysqlパスワードを入力しないでください。入力すると、シェルの履歴に保存されます。-pオプションをそのままにしておくと、mysqlがパスワードを要求します。
スコッティC.

回答:


358
  1. ディストリビューションに応じて、[開く&編集] /etc/my.cnfまたは/etc/mysql/my.cnf
  2. skip-grant-tables下に追加[mysqld]
  3. Mysqlを再起動します
  4. これで、以下のコマンドを使用してmysqlにログインできるはずです。 mysql -u root -p
  5. 走る mysql> flush privileges;
  6. 新しいパスワードを設定 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. /etc/my.cnfに戻り、skip-grant-tables を削除/コメントします。
  8. Mysqlを再起動します
  9. これで、新しいパスワードでログインできるようになります mysql -u root -p

6
こんにちは、同じ問題がありました。上記を実行して問題を解決しましたが、CentOSを再起動するたびに、すべての手順をもう一度実行する必要があります(ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:NO)-コマンドmysql(または任意のsqlコマンド)を実行すると、再起動のたびに上記のように何度も何度も繰り返します
Eitan

19
MariaDBでこれが機能しないのは残念ですYou have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER 'root'@'localhost' IDENTIFIED BY 'NewPassword'' at line 1
Philipp Ludwig

11
私はこれが@PhilippLudwig機能することがわかっset PASSWORD FOR 'root'@'localhost' = PASSWORD('root');私はここで手順5の後にこれをしなかった私のコマンドプロンプトの出力を見てどのようである:MariaDB [(none)]> MariaDB [(none)]> set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec)
therobyouknow

3
手順3でMariaDBを再起動します。次の作品を見つけましたsudo systemctl restart mariadb
。– therobyouknow

7
一部のユーザーは/etc/mysql/my.cnfでファイルを見つける可能性があります
DSinghvi

590

私が見つけたすべての解決策は、必要以上にはるかに複雑であり、どれも私のために機能しませんでした。これが私の問題を解決した解決策です。mysqldを再起動したり、特別な権限で起動したりする必要はありません。

sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

単一のクエリで、auth_pluginmysql_native_passwordに変更し、rootパスワードをrootに 設定します(クエリで自由に変更してください)。

これで、rootでログインできるはずです。詳細については、mysqlのドキュメントをご覧ください。

Ctrl + Dまたはexitを入力してmysqlコンソールを終了します)


41
私はこれを行うことができません... "SQL構文にエラーがあります。近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください..."
TCB13 2017年

2
この回答は機能しましたが、誤って追加した投票は役に立ちません。
18

25
Ubuntu 18.04で非常にうまく機能しました
Almino Melo 2018

2
@ TCB13およびこの問題に直面している他の人。「これはできません...」SQL構文にエラーがあります。MariaDBサーバーのバージョンに対応するマニュアルで、near ... "を使用するための正しい構文を確認してください。alterコマンドを実行する前にFLUSH PRIVILEGESを使用してください
coder

3
あなたは私の日を保存します:)
xger86x

50

この問題を修正するために多くの手順を試しました。この問題の考えられる解決策には非常に多くの情報源があり、ナンセンスからセンスを取り除くのは困難です。私は最終的にここで良い解決策を見つけました:

ステップ1:データベースのバージョンを特定する

$ mysql --version

MySQLを使用すると、次のような出力が表示されます。

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

または、MariaDBに対して次のように出力します。

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

後で使用するので、実行中のデータベースとバージョンをメモしてください。次に、データベースを手動でアクセスできるように停止する必要があります。

ステップ2:データベースサーバーの停止

rootパスワードを変更するには、事前にデータベースサーバーをシャットダウンする必要があります。

あなたはMySQLのためにそれをすることができます:

$ sudo systemctl stop mysql

そしてMariaDBの場合:

$ sudo systemctl stop mariadb

ステップ3:権限チェックなしでデータベースサーバーを再起動する

ユーザー権限に関する情報をロードせずにMySQLとMariaDBを実行すると、パスワードを入力せずにroot権限でデータベースコマンドラインにアクセスできます。これにより、知らないうちにデータベースにアクセスできるようになります。

これを行うには、データベースがユーザーの特権情報を格納する許可テーブルをロードしないようにする必要があります。これはセキュリティ上のリスクがあるため、他のクライアントが接続できないように、ネットワークもスキップする必要があります。

権限テーブルをロードしたり、ネットワークを有効にしたりせずにデータベースを起動します。

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

このコマンドの最後のアンパサンドは、このプロセスをバックグラウンドで実行するため、引き続き端末を使用できます。

これで、パスワードを要求しないrootユーザーとしてデータベースに接続できます。

$ mysql -u root

代わりに、データベースシェルプロンプトがすぐに表示されます。

MySQLプロンプト

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

mysql>

MariaDBプロンプト

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

MariaDB [(none)]>

これでrootアクセスが可能になったので、rootパスワードを変更できます。

ステップ4:rootパスワードの変更

mysql> FLUSH PRIVILEGES;

これで、rootパスワードを実際に変更できます。

以下のためのMySQL 5.7.6以降だけでなく、MariaDB 10.1.20以降、次のコマンドを使用します。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

以下のためのMySQL 5.7.5およびそれ以前と同様にMariaDB 10.1.20歳以上の、使用:

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

new_password選択した新しいパスワードに置き換えてください。

注:ALTER USERコマンドが機能しない場合、通常はより大きな問題を示しています。ただし、UPDATE ... SET代わりにrootパスワードをリセットしてみることができます。

[重要]これは、私の特定の問題を修正した特定の行です。

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

この後、必ず許可テーブルをリロードしてください。

どちらの場合も、コマンドが正常に実行されたことの確認が表示されます。

Query OK, 0 rows affected (0.00 sec)

パスワードが変更されたため、データベースサーバーの手動インスタンスを停止して、以前と同じように再起動できます。

手順5:データベースサーバーを通常どおり再起動する

チュートリアルでは、データベースを再起動するためにさらにいくつかの手順を実行しますが、使用したのはこれだけです。

MySQLの場合、次を使用します: $ sudo systemctl start mysql

MariaDBの場合、次を使用します。

$ sudo systemctl start mariadb

これで、次のコマンドを実行して、新しいパスワードが正しく適用されたことを確認できます。

$ mysql -u root -p

このコマンドは、新しく割り当てられたパスワードの入力を要求するはずです。入力すると、期待どおりにデータベースプロンプトにアクセスできます。

結論

MySQLまたはMariaDBサーバーへの管理アクセスが復元されました。選択した新しいrootパスワードが強力で安全であることを確認し、安全な場所に保管してください。


1
ALTER USERステートメントは、MariaDB 10.2.0で導入されました。
Benoit Desrosiers、

2
うわー !このラインmysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';は私にとってとても命の恩人でした!
lucyjosef

35

上記の回答のいずれもこの問題を解決しなかったため、ここに私が見つけた解決策があります。

関連部分:

MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、ルートMySQLユーザーは、パスワードではなくデフォルトでauth_socketプラグインを使用して認証するように設定されています。これにより、多くの場合、セキュリティと使いやすさが向上しますが、外部プログラム(phpMyAdminなど)がユーザーにアクセスすることを許可する必要がある場合にも、状況が複雑になる可能性があります。

パスワードを使用してMySQLにrootとして接続するには、認証方法をauth_socketからmysql_native_passwordに切り替える必要があります。これを行うには、ターミナルからMySQLプロンプトを開きます。

sudo mysql

次に、次のコマンドを使用して、各MySQLユーザーアカウントが使用する認証方法を確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;

出力

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

この例では、rootユーザーが実際にauth_socketプラグインを使用して認証を行っていることがわかります。パスワードで認証するようにrootアカウントを構成するには、次のALTER USERコマンドを実行します。パスワードは、選択した強力なパスワードに変更してください。このコマンドは、ステップ2で設定したrootパスワードを変更することに注意してください。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

次に、FLUSH PRIVILEGESを実行して、許可テーブルをリロードし、新しい変更を有効にするようサーバーに指示します。

FLUSH PRIVILEGES;

各ユーザーが採用している認証方法を再度確認して、rootがauth_socketプラグインを使用して認証されなくなったことを確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;

出力

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

この出力例では、ルートMySQLユーザーがパスワードを使用して認証するようになっていることがわかります。自分のサーバーでこれを確認したら、MySQLシェルを終了できます。

exit


27

Ubuntu / Debianユーザーの場合

他のディストリビューション、特にdebianベースのディストリビューションで動作する可能性があります)

次のコマンドを実行してroot(パスワードなしで)接続します

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

--defaults-fileとして接続するたびに追加したくない場合は、ホームディレクトリにrootコピーできます/etc/mysql/debian.cnf

sudo cp /etc/mysql/debian.cnf ~/.my.cnf

その後:

sudo mysql

2
これがすべてでした。どうやら、デフォルトでは、Ubuntuでは「ルート」は「ルート」ではありません。
Chaim Eliyah 2018年

21

他のすべての答えを試した後、これは最終的に私のために働いたものです

sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;

私はこの投稿で答えを見つけました:https : //medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06


1
このプラグインラインは本当に便利です。私は多くの組み合わせを試しましたが、これはLinux(x86_64)のVer 14.14 Distrib 5.7.27でのみ機能しました
AlexNikonov

2
これはmysql 5.7でも役立ちました。そうではないだけに適用mariadbため
podarok

私はこれをMySQL 8 Ubuntu 20.04で使用したところ、うまくいきました。skip-grant-table(my.confまたはmysqlコマンドで)他の回答が機能しませんでした。サービスアカウント(askubuntu.com/a/120769/169836)を使用して取得できましたが、機能UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root';しませんでした。プラグイン部分を使用するときにのみ、物事が機能しました。おかげで〜
hamx0r

16

新しいLinuxユーザーにとって、これは困難な作業になる可能性があります。これをmysql 8で更新しましょう(現在利用可能な最新バージョンは12-Sep-2018のように8.0.12です)

  1. 「/etc/mysql/mysql.conf.d/」にある「mysqld.cnf」構成ファイルを開きます。
  2. [mysql]テキストの次の行にskip-grant-tablesを追加して保存します。
  3. mysqlサービスを「sudo service mysql restart」として再起動します。これで、mysqlには認証がありません。
  4. mysqlクライアント(別名mysql-shell)にmysql -u root -pとして接続します。現在のところ、入力するパスワードはありません。
  5. SQLコマンドのフラッシュ特権を実行します。
  6. ここで、ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'MyNewPassword'としてパスワードをリセットします
  7. では、通常の状態に戻りましょう。「mysqld.cnf」から「skip-grant-tables」という行を削除して、サービスを再起動します。

それでおしまい。


5

MySQLワークベンチで、左側のサイドバーに移動し、[管理]で[ユーザーと権限]を選択し、[ユーザーアカウント]でrootをクリックし、右側のセクションで[アカウントの制限]タブをクリックして、最大クエリ、更新などを増やします。次に、[管理者の役割]タブをクリックし、チェックボックスをオンにして、アカウントにアクセス権を付与します。お役に立てば幸いです。


4

OSxでのMySQLの初期設定でルートパスワードを設定するためにこれを行いました。端末を開きます。

sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'

ターミナルを閉じて、新しいターミナルを開きます。また、Linuxではrootパスワードを設定するために以下が機能します。

sudo /usr/local/mysql/support-files/mysql.server stop
sudo mysqld_safe --skip-grant-tables

(sudo mysqld_safe --skip-grant-tables:これは私にとって最初は機能しませんでした。しかし、2回目の試行で成功しました。)

次にMySQLにログインします

mysql -u root

FLUSH PRIVILEGES;

次にパスワードを変更します。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

MySQLを再起動します。

sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server start

3

Debian 10での私の場合、エラー

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

(GOOD WAY)によって解決されました

sudo mysql -u root -p mysql

間違った方法:

mysql -u root -p mysql

3

うーん、何もうまくいきませんでした!CentOS 7.4マシンでmariadb 5.5.64を実行しています。

私がしなければならなかったのは、yumからmariadbをインストールした直後です。

# systemctl restart mariadb
# mysql_secure_installation

mysql_secure_installation含む、ステップの数によってお連れします「を設定し、rootのパスワード?[Y / N]」。「y」と言ってパスワードを入力するだけです。必要に応じて他の質問に答えます。

次に、あなたはあなたのパスワードを使って入ることができます

# mysql -u root -p

生き残る

# systemctl restart mariadb

キー

次に、/bin/mysql_secure_installationソースコードをチェックして、どのようにしてルートパスワードを魔法のように変更することができ、他の回答ではこれを変更できないかを確認しました。インポートビットは次のとおりです。

do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"

...言うSET Password=...でないSET authentication_string = PASSWORD...。したがって、このバージョン(5.5.64)の適切な手順は次のとおりです。

login using mysql -u root -p , using the password you already set.
Or, stop the database and start it with:
mysql_safe --skip-grant-tables --skip-networking &

mysql>プロンプトから:

use mysql;
select host,user,password from user where user = 'root';
(observe your existing passwords for root).
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root' AND host = 'localhost';
select host,user,password from user where user = 'root';
flush privileges;
quit;

実行中のmysqld_safeを終了します。mariadbを再起動します。rootとしてログイン:mysql -u -p。新しいパスワードを使用してください。

必要に応じて、すべてのrootパスワードを一度に設定できます。これは賢明だと思います:

mysql -u root -p
(login)
use mysql;
select host,user,password from user where user = 'root';
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root';
select host,user,password from user where user = 'root';
flush privileges;
quit;

これにより、すべてのルートパスワードの更新が実行されます。つまり、「localhost」、「127.0.0.1」、「:: 1」

将来的には、RHEL8にアクセスするとき、/ bin / mysql_secure_installationを確認して、このOSのmariadbを構成した人たちがどのように実行したかを忘れないようにしてみます。


2

私のようで、上記の提案がすべて失敗した場合は、マシン上のmysqlのすべてのバージョンをアンインストールし、このコマンドsudo find / -name "mysql"を使用して残りのmysqlファイルをすべて検索し、それにrm -rfmysql名が添付されているすべてのファイルまたはディレクトリを検索します(関連するファイルをスキップする必要があります)プログラミング言語ライブラリに)。MySQLの新しいバージョンをインストールしてお楽しみください。注意:すべてのデータが失われるため、最初にオプションを比較検討してください。


1

十分な権限がない場合に発生する可能性があります。と入力しsu、rootのパスワードを入力して、再試行してください。


1

わかりました。これは古いスレッドですが、私と同じようにGoogle経由でこのページにアクセスし、上記の解決策がどれも機能しない場合、エラーの原因は100%愚かでした。サーバーに接続していません。接続されると、すべてがスムーズに航行しました。

私のセットアップを理解するのに役立つ場合は、Sequel Proを使用していて、NPMパッケージmysqlを使用してNodeに接続しようとしています。アプリから既に接続しているため、実際に接続する必要があるとは思いませんでした(Sequel Proを実行する以外)。

ここに画像の説明を入力してください


0

解決: あきらめてください!

私の話を聞いて、MySQLがうまく機能しないようにするために約2日間費やしましたが、常にアクセス許可エラーで止まっていました。このエラーは、このスレッドの回答で修正されませんでした。続けたら狂ってしまうと思ったほどでした。

これを機能させるための忍耐力から、SQLiteをインストールするコマンドを450KBのみを使用して送信しました。

聖人の忍耐力がない場合は、SQLiteを使用して、時間、労力、労力、およびストレージスペースを大幅に節約してください。

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