【MySQL 8.3】rootユーザーのパスワードを忘れた際のパスワード変更方法（Windows）

# はじめに
MySQL使っていますか？
MySQLの利用においては、root以外のユーザーを使用することがほとんどであり、
rootユーザーはたまーにしか使わないかと思います。

このように使用頻度が少ないため、rootユーザーのパスワードを忘れてしまうケースがあり、この場合、rootユーザーのパスワードを変更する必要があります。
（どこかにパスワードをメモしておけばこんなことにはならないのですが、
私のようにそれをサボる人もいるわけで。。。）

Linux OSにMySQLを構築した場合、rootユーザーの初期パスワードは「/var/log/mysqld.log」に記述されているため、このファイルを参照することで確認できます。
https://qiita.com/chii-08/items/a0d41f4bb94309876763

<br>

では、Windowsの場合はどうでしょうか？
私が調べた限り、初期パスワードをどこかのファイルに記載されているといった情報は確認できませんでした。

故に、rootユーザーのパスワードを忘れ、再度このユーザーでMySQLに接続したい場合は、どうにかしてこのユーザーのパスワードを変更する必要があります。

<br>

Windowsにおけるrootユーザーのパスワード変更方法の1つとして、以下記事にあるやり方があります。
　パスワードなしで使えるモードでMySQLを起動してrootのパスワードを変更
https://tech.adseed.co.jp/20201210185248dt6
https://qiita.com/Nekonecode/items/c44896105f1c2b22630e

私もこのやり方でrootユーザーのパスワード変更を試みましたが、MySQLへのログイン（mysql -u root mysql）ができず、ここで詰まってしまいました。
```
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)
```

これを受け色々調べたところ、以下サイト記載のやり方でrootユーザーのパスワードを変更できたので、本記事ではこの手順によるrootパスワードの変更方法をご紹介したいと思います。
https://dev.mysql.com/doc/refman/8.0/ja/resetting-permissions.html


# 環境情報
Windows 10
MySQL 8.3

# パスワード変更手順
まず、Windowsのサービスマネージャーを開き、MySQLを停止します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485934/157a5977-d34d-e1c1-7615-57604412ed52.png)

<br>

停止後、MySQLを右クリック > プロパティを開き、MySQLサービスの実行ファイルパスをコピーし、どこかに控えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485934/0b21bf27-d2c7-fdf1-8a0b-053bf8861238.png)

以下は実行ファイルパスの例です。
（このパスは後述のMySQL実行に使います。）
```
"C:\Program Files\MySQL\MySQL Server 8.3\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.3\my.ini" MySQL83
```

<br>

その後、所定のフォルダにてテキストファイルを作成し、rootユーザーのパスワードを変更するSQL文を記載します。
```update-root.txt
ALTER USER 'root'@'localhost' IDENTIFIED BY '<新しいパスワード>';
```

次に、MySQLを実行するコマンドを作成します。
上記で控えた実行パスの末尾「MySQL*」を削除し、「--init-file」オプションを追加します。
このオプションに、上記のrootユーザーパスワード変更SQL文が記載されたテキストファイルのパスを指定します。
以下は、実行コマンドの例です。
```
"C:\Program Files\MySQL\MySQL Server 8.3\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.3\my.ini" --init-file=C:\data\update-root.txt
```

<br>

実行コマンドが用意できたら、コマンドプロンプトを管理者権限で実行し、
上記コマンドを実行します。
※コマンドを実行しても何も返されません。

# rootユーザーでログインできるか確認

コマンド実行後、別のコマンドプロンプトを開き、mysqlへrootユーザーでログインできるか確認します。
```cmd
mysql -u root mysql -p
```

以下のようにMySQLへログインできればOKです。
```cmd
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

<br>

ログインができたら、実行コマンドを中断します。
（rootユーザーパスワード変更テキストを削除しておきましょう。）

サービスマネージャーに戻り、MySQLを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485934/157a5977-d34d-e1c1-7615-57604412ed52.png)

実行後、再度コマンドプロンプトでrootユーザーでMySQLへログインできるか確認します。
```cmd
mysql -u root mysql -p
```

以下のようにMySQLへログインできればOKです。
```cmd
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

# 参考資料
https://qiita.com/chii-08/items/a0d41f4bb94309876763
https://tech.adseed.co.jp/20201210185248dt6
https://qiita.com/Nekonecode/items/c44896105f1c2b22630e
https://dev.mysql.com/doc/refman/8.0/ja/resetting-permissions.html