mysql ユーザー 'root'@'localhost&#39 の Access denied を修正する方法。

何かを失敗する前に、$ mysql -u root -pでログインして、データベースを表示すると、次のようになります。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| game_data          |
| test               |
+--------------------+

その後、新しいユーザーを作成しようとしたところ、PRIVILEGESに何か問題があることに気づきました。

そこで、新しいユーザーを削除したところ、誤って 'root'と 'Admin'を削除してしまったようです。

その後、再び 'root'を作成しようとしましたが、すべての権限を付与する際にAccess deniedエラーが発生しました。

mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

再度、$ mysql -u root -pでMySQLにログインし、データベースを表示すると

+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+

他のデータベースはすべて消えています。

今のMySQLを直すにはどうしたらいいですか?

データベース 'mysql'が見つからず、データベースの作成もユーザーの作成もできず、何をやってもエラーになります。

ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password: YES).

MacPortsを使ってMySQLを再インストールした方がいいのでしょうか?再インストールすると、データベースgame_dataがなくなってしまいますよね?

ソリューション

以下の手順に従ってください。

1.セキュリティ設定で--skip-grant-tablesオプションを指定して、MySQLサーバーインスタンスまたはデーモンを起動する。

    $ mysqld --skip-grant-tables

2.以下のステートメントを実行します。

    $ mysql -u root mysql
    $mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root' となります。
    $mysql> FLUSH PRIVILEGES;

上記のunknown field Passwordエラーに直面した場合は使用してください。

update user set authentication_string=password('my_password') where user='root';

3.最後に、--skip-grant-tablesオプションを付けずに、インスタンス/デーモンを再起動してください。

    $ /etc/init.d/mysql restart

これで、新しいパスワードで接続できるようになります。

$ mysql -u root -p

パスワードを入力してください: my_password

MySQLの「Unable to lock ibdata1」エラーの修正

sudo mv /usr/local/mysql/data/ibdata1 /usr/local/mysql/data/ibdata1.bak
sudo mv /usr/local/mysql/data/ib_logfile0 /usr/local/mysql/data/ib_logfile0.bak
sudo mv /usr/local/mysql/data/ib_logfile1 /usr/local/mysql/data/ib_logfile1.bak
sudo cp -a /usr/local/mysql/data/ibdata1.bak /usr/local/mysql/data/ibdata1
sudo cp -a /usr/local/mysql/data/ib_logfile0.bak /usr/local/mysql/data/ib_logfile0
sudo cp -a /usr/local/mysql/data/ib_logfile1.bak /usr/local/mysql/data/ib_logfile1
sudo /etc/init.d/mysql restart
解説 (8)
grep 'temporary password' /var/log/mysqld.log
Sort date (newest date)

このように表示されることがあります。

[root@SERVER ~]# grep 'temporary password' /var/log/mysqld.log
2016-01-16T18:07:29.688164Z 1 [Note] A temporary password is generated for root@localhost: O,k5.marHfFu
2016-01-22T13:14:17.974391Z 1 [Note] A temporary password is generated for root@localhost: b5nvIu!jh6ql
2016-01-22T15:35:48.496812Z 1 [Note] A temporary password is generated for root@localhost: (B*=T!uWJ7ws
2016-01-22T15:52:21.088610Z 1 [Note] A temporary password is generated for root@localhost: %tJXK7sytMJV
2016-01-22T16:24:41.384205Z 1 [Note] A temporary password is generated for root@localhost: lslQDvgwr3/S
2016-01-22T22:11:24.772275Z 1 [Note] A temporary password is generated for root@localhost: S4u+J,Rce_0t
[root@SERVER ~]# mysql_secure_installation

MySQL サーバの展開を保護する。

Enter password for user root: 

The existing password for the user account root has expired. Please set a new password.

New password: 

Re-enter new password:

と書かれているのを見たら

... Failed! Error: Your password does not satisfy the current policy requirements
That means your password needs to have a character such as ! . # - etc...
mix characters well, upper case, lower case, ! . , # etc...

New password: 

Re-enter new password: 
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y

New password: 

Re-enter new password: 

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done! 
[root@SERVER ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.10 MySQL Community Server (GPL)

このビデオ][1]の最後の10分を見てください、それはあなたがそれを行う方法を教えてくれます。

解説 (3)

試してみてください。

mysql --no-defaults --force --user=root --host=localhost --database=mysql 
UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root';
FLUSH PRIVILEGES;
解説 (5)