mysqlでflush privileges;をし忘れてrootでログインできなくなった件

# やり忘れると滅茶苦茶めんどくさい
Zabbixサーバーを構築していてflush privileges;を打ち忘れてrootでパスワードログインできなくなるというポカをやったので、備忘録として記載しておく。

# どうやんねんこれ
実際入れ忘れると次のような応答が返ってくる

```shell-session
root@zabbix:~# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
root@zabbix:~#
```
上の場合パスワード入ってねーぞタコ！と怒られていますがパスワード入れた場合"(using password: YES)"で出ます。
で、今回自分の場合どうやって直したかというと次のような感じで直してます。
ただし、手前でセーフモードで起動していたりしていたのでそれも記載しておきます。

```shell-session
# ナニワトモアレmysqlを止める
root@zabbix:~# systemctl stop mysql
root@zabbix:~# 

# 上で書いたようにセーフモードで起動している場合はpsでpid特定してkillします
root@zabbix:~# ps aux | grep mysql | grep -v grep
root       13962  0.0  0.0   2888  1732 ?        S    04:11   0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables
mysql      14119  0.3 19.2 1333056 389924 ?      Sl   04:11   0:05 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=zabbix.system-v.jp.pid
mysql      14307  2.8  8.4 1118624 170964 pts/1  Sl+  04:28   0:08 mysqld --initialize
root@zabbix:~# kill 14119
root@zabbix:~# ps aux | grep mysql | grep -v grep
mysql      14307  2.6  8.7 1123980 176628 pts/1  Sl+  04:28   0:08 mysqld --initialize
root@zabbix:~#
# で上の場合だと実行ユーザがmysqlのプロセスをkillしてます。あとこの後投入するコマンドもプロセスに出ていますが気にしないでください

# /var/lib/mysql/配下のDirectoryを全削除して初期化コマンドを実行
root@zabbix:~# rm -rf /var/lib/mysql/*
root@zabbix:~# mysqld --initialize

# 初期パスワードを取得
root@zabbix:~# cat /var/log/mysql/error.log  | grep -i pass
2023-01-08T03:25:14.062309Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2023-01-08T04:31:08.733555Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: cwQ?Z#s2hqE_
root@zabbix:~#

# プロセスを起動してパスワードなしで起動
root@zabbix:~# systemctl start mysql
root@zabbix:~# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31-0ubuntu0.22.04.1

Copyright (c) 2000, 2022, 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> ALTER USER 'root'@'localhost' IDENTIFIED  BY 'password';
Query OK, 0 rows affected (0.65 sec)

# 必ず実行する
mysql> flush privileges;
Query OK, 0 rows affected (0.19 sec)

mysql> 
```

別ウインドウとかでrootで入れるか確認
```shell-session
root@zabbix:~# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2022, 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> 
```
入れたらOK

# 参考サイト
https://takuya-1st.hatenablog.jp/entry/2021/07/12/230136