はじめに
MYSQLインストールの際、
rootユーザの初期パスワードの設定間違いという痛恨のミスをしてしまった。
パスワード再設定時の実行コマンドに不明点が多く大変な時間がかかってしまった。
以下にトライ&エラーの経緯を記録しておく。
【重要】
2025/05/26時点で、個人保有MACで発生した個別事象の為、
対策方法が全ユーザにとって万能な対策ではないということにご留意ください。
【前提】MySQLログイン時のrootユーザのパスワードエラー
事象
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
「rootユーザーでMySQLにログインしようとしたが、パスワードが正しくない、または権限が不足しているためアクセスが拒否された」
原因
初期パスワードの設定ミス
(キーボードの入力方式が日本語だった、あるいは単純に入力ミスの可能性が高い→入力値が非表示のため確認不可)
対策
調べた結果、rootパスワードの再設定手順は以下のとおりであった。
1. 権限チェックなしでMySQLを起動
2. パスワードなしでMySQLにログイン
3. rootパスワードの再設定
権限無しでのMySQL起動がうまくできない
1.【権限チェックなしでMySQLを起動】コマンドを実行するもエラー
参照したサイト内のコマンドをまずは実行したが、エラー。その後、トライ&エラーを繰り返す事となった。
下記に実行したコマンドとエラーをリスト化して記載する
実行コマンドとエラー詳細リスト
以下の順番にてコマンド修正とエラーを繰り返した。
実行順 | 判定 | 実行コマンド | エラー表示 | 内容 |
---|---|---|---|---|
1 | X | sudo service mysql start | sudo: service: command not found |
service コマンドはLinux用のコマンド**で、macOSには標準で存在しません
|
2 | X | brew mysqld_safe --skip-grant-tables & | Unknown command: brew mysqld_safe |
brew mysqld_safe というコマンドは存在しません。 |
3 | X | /opt/homebrew/opt/mysql/bin/mysqld_safe --skip-grant-tables & | zsh: no such file or directory: /opt/homebrew/opt/mysql/bin/mysqld_safe` | そのパスに mysqld_safe ファイルが存在しない |
4 | X | /opt/homebrew/opt/mysql/bin/mysqld_safe --skip-grant-tables --datadir=/opt/homebrew/var/mysql & | --- | macOSでHomebrew版MySQLを「--skip-grant-tables」で起動したい場合sudo をつけて実行する事 |
5 | X | sudo /opt/homebrew/opt/mysql/bin/mysqld_safe --skip-grant-tables --datadir=/opt/homebrew/var/mysql & | suspended (tty output) sudo~ | プロセスが一時停止(サスペンド)状態になっています。認証無しモードで接続しても通常通り認証が行われてしまい、パスワードなしログインができません mysqld_safe --skip-grant-tables をバックグラウンド実行(& 付き)した場合、標準出力が端末に接続されているためzsh(シェル)によって自動停止されることがあります |
6 | ☓ | フォアグラウンドでmysqld_safeを実行 | sudo: /opt/homebrew/opt/mysql/bin/mysqld_safe: command not found | そのパスに mysqld_safe ファイルが存在しないことを意味します。 |
7 | ◯ | フォアグラウンドで以下コマンドを実行/opt/homebrew/Cellar/mysql@8.4/8.4.5/bin/mysqld
|
エラー無く実行できた | ーーー |
まとめ
- [X]
service
コマンドはLinux用のコマンド**で、macOSには標準で存在しない - [X]
mysqld_safe
ではなくmysqld
を明示して実行した
⇒ インストールしたMySQLのバージョンやインストール方法(Homebrew経由かどうか) によってmysql_safe
の有無が変わる
⇒存在しない場合はmysqld
を利用する - [X] mysqldをフォアグラウンドで実行 → バックグラウンド実行だとシェルに停止されてしまいNGなため。
- [X] 作業用にもう一つターミナルを開く → そこで
MySQLに権限チェックなしログイン
が可能となるここまでクソメンドかった - [X] フォアグラウンド実行は、コマンドの処理を見ながら進めたいときや、バックグラウンド実行で問題が起きる場合に特に有効な方法
正しいパスワード変更手順
1. MySQLサーバーを停止
brew services stop mysql
2. パスワード認証をスキップしてmysqldを起動
ターミナルで下記コマンドをフォアグラウンドで実行(末尾に&をつけない場合に、フォアグラウンド実行となる):
/opt/homebrew/Cellar/mysql@8.4/8.4.5/bin/mysqld --skip-grant-tables --datadir=/opt/homebrew/var/mysql
- このコマンドを実行したターミナルはそのままにしておく
3. 新しいターミナルウィンドウを開く
-
Command + N
で新しいターミナルウィンドウを開く
4. パスワードなしでMySQLにログイン
mysql -u root
5. rootパスワードの再設定
MySQLプロンプトで次のコマンドを実行します(例:新しいパスワードを newpassword
に変更する場合):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;
6. mysqldプロセスを停止
- フォアグラウンドで動かしていたmysqldのターミナルで
Ctrl+C
を押して停止
7. MySQLサーバーを通常モードで起動
brew services start mysql
8. 新しいパスワードでログイン確認
mysql -u root -p
- ログインを確認⇒OK
終わりに
初期パスワード設定は、
『失敗のしやすさ』と『再設定の難易度の高さ』のバランスが悪い(私だけ?)。
シェルコマンド上で、入力値の見えないまま同じキーボード配列を2回繰り返し叩く操作は
ちょっと気を抜いたブラインドタッチで簡単に失敗する(私だけ??)。
それに対して、再設定の難易度は異常で、所見ではまず無理。
シェルコマンド知識や、MYSQLのインストールバージョンなどによる実行コマンドの変化
など様々な予備知識が求められる。
それらを持ち合わせていない私のような初学者はおおよそ1時間~2時間は、
容易に時間が溶けることになる。
その他エラー 指定されたMySQLのバージョンが古い
下記のしょうもないエラーにも遭遇したので併せて記載しておく
これは【Progate】の更新されていない古い内容を脳死でそのまま受け入れ実行したことに起因するエラーとなる
事象
Homebrew で mysql@5.7
をインストールしようとした際に表示された
Error: mysql@5.7 has been disabled because it is not supported upstream! It was disabled on 2024-08-01.
原因
MySQL 5.7 の公式サポートが終了し、Homebrew でも2024年8月1日をもって formula(パッケージ)が無効化されたため
対策
MySQLを新しいバージョンをインストールする
安定運用やサポートを重視して8.4系を利用