web-dev-qa-db-ja.com

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

$ ./mysqladmin -u root -p ' 編集済み '
パスワードを入力する:

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

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

134
Harsh Trivedi
  1. ディストリビューションに応じて、/etc/my.cnfまたは/etc/mysql/my.cnfを開いて編集します。
  2. skip-grant-tablesの下に[mysqld]を追加
  3. MySQLを再起動します。
  4. 以下のコマンドmysql -u root -pを使って、mysqlにログインできるはずです。
  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
206

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

Sudo mysql

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

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

これでrootでログインできるはずです。より多くの情報は mysqlのドキュメントにあります

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

339
user1878906

この問題を修正するために多くの手順を試しました。この問題の可能な解決策には、ナンセンスからセンスを除外するのが難しいソースが非常に多くあります。私は最終的に良い解決策を見つけました ここ

ステップ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:データベースサーバーの停止

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

MySQLでそれを行うには:

$ Sudo systemctl stop mysql

そしてMariaDBの場合:

$ Sudo systemctl stop mariadb

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

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

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

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

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

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

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

$ 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:ルートパスワードの変更

mysql> FLUSH PRIVILEGES;

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

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サーバーへの管理アクセスが復元されました。選択した新しいルートパスワードが強力で安全であることを確認し、安全な場所に保管してください。

36
Blairg23

Ubuntu/Debianユーザ向け

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

Sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
20
Fab

新しいLinuxユーザにとって、これは大変な作業です。これをmysql 8で更新してみましょう(2018年9月12日現在、最新バージョンは8.0.12です)。

  1. "/etc/mysql/mysql.conf.d/"にある "mysqld.cnf"設定ファイルを開きます。
  2. [ - mysql]テキストの次の行に skip-grant-tables を追加して保存します。
  3. 「Sudo service mysql restart」としてmysqlサービスを再起動します。これであなたのmysqlは認証を受けません。
  4. mysql -u root -p としてmysqlクライアント(mysql-Shellとも呼ばれる)に接続します。現時点で入力するパスワードはありません。
  5. sQLコマンドを実行します 特権をフラッシュします。
  6. 今すぐパスワードをリセットします。 ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'MyNewPassword';
  7. それでは、通常の状態に戻りましょう。 "mysqld.cnf"からその行 "skip-grant-tables"を削除し、サービスを再起動してください。

それでおしまい。

12
Amit Kr

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

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 =

4
Pico12

MySQLワークベンチで、左側のサイドバーに移動し、[管理]の下の[ユーザーと特権]を選択し、[ユーザーアカウント]の下の[root]をクリックします。次に[管理者ロール]タブをクリックし、チェックボックスをオンにしてアカウントにアクセス権を付与します。それが役立つことを願っています!

4
Colleen Purcell

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

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
2
Sadee

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

0
vitaly goji

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

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

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

Sudo mysql -u root -p mysql

間違った方法:

mysql -u root -p mysql
0
klor

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

0
Michael Ogala