[MySQL] macOSで久しぶりに触るときの起動確認、設定の見方、ログイン、パスワード再設定まとめ
![[MySQL] macOSで久しぶりに触るときの起動確認、設定の見方、ログイン、パスワード再設定まとめ](/assets/note/eyecatch/mysql-homebrew-login-password-reset-macos-eyecatch.png)
illustrated by soto
この記事でやること
macOS で Homebrew 管理の MySQL を久しぶりに触ると、毎回次のあたりで止まりやすい。
- 起動方法を忘れる
rootのパスワードが分からない- どの設定ファイルを見ればよいか分からない
mysqlコマンドの実体がどこか分からない
今回は実際に確認した流れをそのまま残しつつ、最後に root パスワードの再設定方法と Homebrew の整理手順までまとめる。
対象は以下。
- macOS
- Homebrew で MySQL をインストールしている環境
まずは MySQL を起動する
最初に確認するのは、MySQL サーバーが起動しているかどうか。
MySQL を起動する:
brew services start mysql@8.4# 実行結果
==> Successfully started `mysql@8.4` (label: homebrew.mxcl.mysql@8.4)サービス一覧を見る:
brew services list# 実行結果
Name Status User File
mysql@8.4 started soto ~/Library/LaunchAgents/homebrew.mxcl.mysql@8.4.plist
nginx none
php none
postgresql@14 none
unbound none停止するとき:
brew services stop mysql@8.4mysql コマンドが存在していても、サーバーが起動していないとログインできない。最初にここを見ておくと切り分けしやすい。
ログインを試す
最初に、root でパスワードなしログインを試す。
パスワードなしでログインを試す:
mysql -u root# 実行結果
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)このエラーで分かるのは、root にパスワードが設定されていること。空パスワードでは入れない。
次にパスワードありで試す。
パスワードありでログインを試す:
mysql -u root -pパスワード入力後に次のような表示が出れば成功。
# 実行結果
Welcome to the MySQL monitor. Commands end with ; or \g.
...
mysql>終了するとき:
exit;MySQL に入ったあとによく使う確認コマンド
ログインできたあと、最初に打つことが多いコマンドをまとめる。
データベース一覧:
SHOW DATABASES;現在のユーザー確認:
SELECT USER(), CURRENT_USER();MySQL のバージョン確認:
SELECT VERSION();終了:
exit;パスワードが何か分からないときに最初に見る場所
パスワードそのものを直接表示できるとは限らないが、接続方法の手がかりは探せる。
~/.my.cnf を確認する
個人設定ファイルを見る:
cat ~/.my.cnfこのファイルがあれば、user password host socket のようなクライアント設定が入っていることがある。
# 実行結果
cat: /Users/soto/.my.cnf: No such file or directoryこの場合、ユーザーごとの MySQL 設定ファイルは存在しない。少なくともここにはパスワードは保存されていない。
シェル履歴を見る
MySQL 関連の履歴を見る:
history | grep mysql# 実行結果
1986 brew services start mysql
1987 mysql -u root -p
1988 mysql -u rootここで分かることは次の通り。
- 以前も
brew services start mysqlで起動していた rootでパスワードありログインを試していた- パスワードなし接続も試していた
ただし、履歴だけで実際のパスワード文字列まで分かることはあまりない。
mysql コマンドの実体を確認する
which mysql ではエイリアスが出ることがあるため、こちらを使う方が確実。
mysql コマンドの候補を見る:
type -a mysql# 実行結果
mysql is an alias for nocorrect mysql
mysql is /usr/local/bin/mysqlつまり、
mysqlは zsh のエイリアス経由で呼ばれている- 実体は
/usr/local/bin/mysql
ということ。
実体だけ見たい場合はこちら。
実体のパスだけを見る:
whence -p mysql# 実行結果
/usr/local/bin/mysqlディレクトリによって MySQL の情報は変わるのか
結論として、mysql -u root -p のように直接コマンドを打つ場合、基本的には変わらない。
接続先や認証に影響するのは主に以下。
- コマンド引数
- MySQL の設定ファイル
- MySQL サーバー側の設定
- 環境変数
つまり、今いるディレクトリ自体は通常関係ない。
ただし、次のようなケースではプロジェクトごとに違って見えることがある。
- Docker Compose で MySQL を起動している
.envに接続情報を書いている- 特定の設定ファイルを明示的に読み込ませている
MySQL がどの設定ファイルを読むか確認する
次に、MySQL クライアントがどの設定ファイルを探すかを確認する。
設定ファイルの参照順を見る:
mysql --help | grep -A 1 "Default options"# 実行結果
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnfこの結果から、MySQL は次の順番で設定ファイルを探す。
/etc/my.cnf/etc/mysql/my.cnf/usr/local/etc/my.cnf~/.my.cnf
~/.my.cnf がなかった場合、Homebrew 管理なら /usr/local/etc/my.cnf を見る流れになる。
Homebrew 側の設定ファイルを見る
Homebrew 側の設定ファイルを見る:
cat /usr/local/etc/my.cnf# 実行結果
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1ここで分かるのは、MySQL サーバーが 127.0.0.1 からの接続だけ受け付ける設定になっていること。
ただし、root のパスワードはここには書かれていない。つまり、このファイルで確認できるのは接続制限やサーバー設定が中心。
mysql と mysql@8.4 が混在している場合の整理
今回の環境では、最初 brew services list に mysql と mysql@8.4 が両方出ていた。
mysql error
mysql@8.4 startedこの状態では、brew services start mysql を実行すると Bootstrap failed: 5 が出ることがあった。一方で mysql@8.4 はすでに起動していたため、サービス定義が競合していた可能性が高い。
まずは両方のサービスを止める。
両方のサービスを停止する:
brew services stop mysql
brew services stop mysql@8.4# 実行結果
Stopping `mysql`... (might take a while)
==> Successfully stopped `mysql`
Stopping `mysql@8.4`... (might take a while)
==> Successfully stopped `mysql@8.4`そのうえで、使うバージョンだけを明示して起動する。
mysql@8.4 だけを起動する:
brew services start mysql@8.4
brew services list# 実行結果
==> Successfully started `mysql@8.4` (label: homebrew.mxcl.mysql@8.4)その後の brew services list はこうなった。
# 実行結果
mysql@8.4 startedHomebrew のインストール一覧も確認したところ、以前の環境では mysql mysql@5.6 mysql@8.4 mysql-client が混在していた。
不要な旧版がある場合は、使っているバージョンを確認したうえで整理しておくとよい。
インストール済みの MySQL 関連パッケージを見る:
brew list | grep mysql# 実行結果
mysql
mysql-client
mysql@5.6
mysql@8.4今回削除したのは以下。
不要な旧版を削除する:
brew uninstall mysql@5.6
brew uninstall mysql整理後、brew autoremove と brew cleanup も実行した。警告は多く出るが、今回のように最後まで完了していれば問題ない。
# 実行結果
==> This operation has freed approximately 611.9MB of disk space.整理後の状態を確認する:
brew list | grep mysql
brew services list
mysql --version# 実行結果
mysql-client
mysql@8.4# 実行結果
Name Status User File
mysql@8.4 started soto ~/Library/LaunchAgents/homebrew.mxcl.mysql@8.4.plist
nginx none
php none
postgresql@14 none
unbound none# 実行結果
mysql Ver 8.4.8 for macos14.8 on x86_64 (Homebrew)最終的に次の状態になれば分かりやすい。
mysql@8.4がインストールされているbrew services listではmysql@8.4だけがstartedmysql --versionが8.4.x
mysql-client は CLI 用に残っていても問題ない。無理に削除するより、まずはサーバーとサービス管理の対象を mysql@8.4 に揃える方が安全。
パスワードが分からないときの考え方
まずは次の順で確認すると整理しやすい。
~/.my.cnfに保存されていないかhistory | grep mysqlに手がかりがないか- 以前自分で設定したパスワードに心当たりがないか
- 見つからなければ再設定する
今回のように、設定ファイルにも履歴にも実際の文字列が残っていない場合は、保存場所から取り出すのは難しいことが多い。その場合は再設定の方が早い。
root パスワードの再設定方法
ここでは Homebrew 版 MySQL を前提にした代表的な流れをまとめる。ローカル開発環境での作業を想定。
1. MySQL を停止する
brew services stop mysql@8.42. 認証をスキップして起動する
mysqld_safe --skip-grant-tables &3. 別ターミナルでログインする
mysql -u root4. 権限テーブルを再読み込みしてパスワードを変更する
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';5. 通常起動に戻して確認する
一度認証スキップ起動の MySQL を止めてから、通常起動し直す。
brew services start mysql@8.4そのあと、新しいパスワードで接続確認する。
mysql -u root -p注意点
--skip-grant-tablesは認証を無効化する特殊な起動方法- 作業中はローカル環境で行う方が安全
- バージョンや設定によっては追加操作が必要になることがある
- 実運用サーバーでは慎重に扱う方がよい
久しぶりに触るときの最短チェックリスト
迷ったときはこの順番で見れば十分。
| # | 目的 | コマンド |
|---|---|---|
| 1 | 起動する | brew services start mysql@8.4 |
| 2 | 状態を見る | brew services list |
| 3 | パスワードなしで試す | mysql -u root |
| 4 | パスワードありで試す | mysql -u root -p |
| 5 | コマンドの実体を見る | type -a mysql / whence -p mysql |
| 6 | 設定ファイル候補を見る | mysql --help | grep -A 1 "Default options" |
| 7 | ユーザー設定を見る | cat ~/.my.cnf |
| 8 | 履歴を見る | history | grep mysql |
| 9 | Homebrew 側の設定を見る | cat /usr/local/etc/my.cnf |
まとめ
MySQL を久しぶりに触るときは、起動確認、ログイン確認、設定ファイル確認の順で見ていくと整理しやすい。
特に次の流れを覚えておくと、次回かなり楽になる。
- まず
brew services start mysql@8.4 - 次に
mysql -u rootとmysql -u root -p - そのあと
type -a mysqlとmysql --help | grep -A 1 "Default options" - 必要に応じて
~/.my.cnfと/usr/local/etc/my.cnfを確認 - パスワードが不明なら再設定に進む
久しぶりに触るときの自分用メモとしても、MySQL の最初の入り口としても使いやすい内容。


