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
通常の回復手順を試すことができます:
- MySQLサービスを停止する
次を使用してサービスを実行します。
sudo mysqld_safe --skip-grant-tables &
接続(パスワードは必要ありません):
mysql -uroot
変更を元に戻します (今回は注意して
select
現在の状態を確認してください。ホストは次のようになります202.54.10.20
):use mysql; update user set Host='localhost' where user='root'; flush privileges;
通常の方法で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 で新しいパスワードを使用してログインしてみてください。うまくいくことを願っています。ありがとうございます。