[MySQL] macOSで久しぶりに触るときの起動確認、設定の見方、ログイン、パスワード再設定まとめ

[MySQL] macOSで久しぶりに触るときの起動確認、設定の見方、ログイン、パスワード再設定まとめ

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.4
info

mysql コマンドが存在していても、サーバーが起動していないとログインできない。最初にここを見ておくと切り分けしやすい。

ログインを試す

最初に、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 は次の順番で設定ファイルを探す。

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/etc/my.cnf
  4. ~/.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 のパスワードはここには書かれていない。つまり、このファイルで確認できるのは接続制限やサーバー設定が中心。

mysqlmysql@8.4 が混在している場合の整理

今回の環境では、最初 brew services listmysqlmysql@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     started

Homebrew のインストール一覧も確認したところ、以前の環境では 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 autoremovebrew 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 だけが started
  • mysql --version8.4.x
info

mysql-client は CLI 用に残っていても問題ない。無理に削除するより、まずはサーバーとサービス管理の対象を mysql@8.4 に揃える方が安全。

パスワードが分からないときの考え方

まずは次の順で確認すると整理しやすい。

  1. ~/.my.cnf に保存されていないか
  2. history | grep mysql に手がかりがないか
  3. 以前自分で設定したパスワードに心当たりがないか
  4. 見つからなければ再設定する

今回のように、設定ファイルにも履歴にも実際の文字列が残っていない場合は、保存場所から取り出すのは難しいことが多い。その場合は再設定の方が早い。

root パスワードの再設定方法

ここでは Homebrew 版 MySQL を前提にした代表的な流れをまとめる。ローカル開発環境での作業を想定。

1. MySQL を停止する

brew services stop mysql@8.4

2. 認証をスキップして起動する

mysqld_safe --skip-grant-tables &

3. 別ターミナルでログインする

mysql -u root

4. 権限テーブルを再読み込みしてパスワードを変更する

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';

5. 通常起動に戻して確認する

一度認証スキップ起動の MySQL を止めてから、通常起動し直す。

brew services start mysql@8.4

そのあと、新しいパスワードで接続確認する。

mysql -u root -p

注意点

warning
  • --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 rootmysql -u root -p
  • そのあと type -a mysqlmysql --help | grep -A 1 "Default options"
  • 必要に応じて ~/.my.cnf/usr/local/etc/my.cnf を確認
  • パスワードが不明なら再設定に進む

久しぶりに触るときの自分用メモとしても、MySQL の最初の入り口としても使いやすい内容。

[Zsh] Supabaseの接続先(local/remote)をターミナルに表示して切り替える

[remark] remark-directiveでZenn風のcalloutブロック(:::message / :::info / :::warn / :::alert)を自作した