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

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

MySQL はローカルでしか動作していなかったため、MySQL へのリモート アクセスを許可しようとしていました。

私はこのガイドに従いました http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

チュートリアルから次のようなコマンドを使用しました:

mysql> update user set Host='202.54.10.20' where user='root';

これにより、ローカルの mysql が台無しになったと思います。

現在、次の方法ではログインできません:

$ mysql -u root -p

このエラーが発生します:

ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードの使用: はい)

以前は機能していたので、パスワードが正しいことはわかっています。しかし、誤ってロックアウトされてしまいました。

もう何をしたらいいのか分からない。

サーバーで使用される OS は Ubuntu です。

答え1

通常の回復手順を試すことができます:

  1. MySQLサービスを停止する
  2. 次を使用してサービスを実行します。

    sudo mysqld_safe --skip-grant-tables &
    
  3. 接続(パスワードは必要ありません):

    mysql -uroot
    
  4. 変更を元に戻します (今回は注意してselect現在の状態を確認してください。ホストは次のようになります202.54.10.20):

    use mysql;
    update user set Host='localhost' where user='root';
    flush privileges;
    
  5. 通常の方法でMySQLを再起動する

答え2

次のコマンドを試してください:

SHOW GRANTS FOR 'root'@'localhost';

適切な権限がない場合にも、この現象が発生することがあります。その場合は、次のコマンドを入力することもできます。

GRANT ALL PRIVILEGES ON `%`.* TO '[user]'@'[hostname]' IDENTIFIED BY '[password]' WITH GRANT OPTION;

答え3

私も同じ問題を抱えていました (virtualmin からユーザー ホストを誤って更新しました)。@techraf の回答と同様の手順で修正しましたが、can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'ubuntu 16.04 でのエラーを回避するために、このサイトの同様の手順に従いました。

https://coderwall.com/p/j9btlg/reset-the-mysql-5-7-root-password-in-ubuntu-16-04-lts

パスワードではなくホストを更新する手順を変更しました。

# Stop MySQL
sudo service mysql stop
# Make MySQL service directory.
sudo mkdir /var/run/mysqld
# Give MySQL user permission to write to the service directory.
sudo chown mysql: /var/run/mysqld
# Start MySQL manually, without permission checks or networking.
sudo mysqld_safe --skip-grant-tables --skip-networking &
# Log in without a password.
mysql -uroot mysql

次に、mysql で:

select user, host from mysql.user; --just to check
UPDATE mysql.user SET host='localhost' WHERE User='root' AND Host='202.54.10.20'; --CHANGE the host to the one you see in the query
select user, host from mysql.user; --check again 
commit;
exit;

そしてコンソールで次の操作を実行します。

# Turn off MySQL.
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
# Start the MySQL service normally.
sudo service mysql start

答え4

Workbench でこのエラーが発生した場合は、次の手順に従ってください。

まず、現在のパスワードでログインします。

sudo mysql -u root -p

強度の低いパスワードを使用するとエラーが発生することがあるため、パスワードを変更してください。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

その後、終了して、新しいパスワードで再度ログインします。

quit

sudo mysql -u root -p

ログインに成功したら、次のコマンドを入力します。

use mysql;

「データベースが変更されました」のようなメッセージが表示されるので、次のように入力します。

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

その後、次のように入力します:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

次に次のように入力します:

FLUSH PRIVILEGES;

次に、単に終了します。

quit

次に、WORKBENCH で新しいパスワードを使用してログインしてみてください。うまくいくことを願っています。ありがとうございます。

関連情報