MySQLでroot権限のパスワードを変更する方法

今回はMySQLでroot権限のパスワードを変更する方法を紹介します。

環境はMac OS High Sierraで、MySQLのバージョンは8.xです。

 

例えば以下のようなエラーが出てパスワードを覚えていないときは、いっそのことパスワードを変更してしまった方がいいかもしれません。

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

 

rootのパスワードを要求しているエラーです。もしパスワードを忘れてしまったならパスワードを変更してしまいましょう。

 

パスワードをリセットする

まずはMySQLを停止します。

$ mysql.server stop

 

次にMySQLを自動起動しないようにします。

ちなみにhomebrewでMySQLを入れているなら、brew services listで自動起動を設定しているサービスを確認することができます。

$ brew services list
Name         Status  User Plist
chromedriver stopped      
mysql        stopped      
php          stopped  

 

$ brew services stopで、MySQLの自動起動停止を無効にしましょう。

$ brew services stop mysql
==> Successfully stopped `mysql`

 

次に権限テーブルは読まずにMySQLを起動します。

$ mysql.server start --skip-grant-tables
Starting MySQL
.. SUCCESS! 

 

-skip-grant-talesとは簡単にいうと権限を読まずにログインできるモードのことです。

この状態なら全てのデータベースにアクセスすることができます。

 

そうしたらMySQLにログインしましょう。

$ mysql

 

次にmysql_updateを実行します。

これはMySQLをアップデートする時にその都度打ち込む必要があるコマンドみたいです。

$ mysql_upgrade -u root -p
Enter password: (パスワード入力)
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data.
Checking system database.
...

 

ちなみにパスワードをリセットするコマンドは以下の通りですが、この方法だとエラーが出る可能性があります。

$ ALTER USER 'root'@'localhost' IDENTIFIED BY 'New Password';

 

MySQLはバージョンが8以降になると権限のシステムがかなり変わっているので、エラーになってしまうのです。

 

というわけで、mysql_updateを実行したらいよいよrootのパスワードを変更します。

$ mysql.server stop
$ mysql.server start --skip-grant-tables
$ mysql
//パスワード変更
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'New Password';

 

パスワードを無しにする場合はIDENTIFIED BY ‘’;と打ってください。シングルクォーテーションもそのまま書いてください。

 

最後にMySQLを再起動します。新しいパスワードでログインしましょう。

$ mysql.server stop
$ mysql.server start
$ mysql -u root -p

 

パスワード無しでログインする場合は3行目のコマンドは代わりに以下のコマンドを打ってください。

$ mysql -u root

 

自動起動設定も戻しておきましょう。

$ brew services start mysql
==> Successfully started `mysql` (label: homebrew.mxcl.mysql)