MySQLの設定ファイル「my.cnf」は、どこに置く?
2017-02-01のrensrv.com記事「MySQLがどこの「my.cnf」を参照しているか調べる」を「Homebrewで導入した人の場合」で読み替えてみた。
そもそもMySQLは、何処に入る?
MySQLは「/usr/local/opt/mysql/」に入るけど、そいつは「/usr/local/Cellar/mysql/バージョン/」のシンボリックリンクである(正確には、そのサブディレクトリ「/bin/」の中に入るんだけど)。
MySQLから見た、「有効なmy.cnf」の所在リスト
Homebrewで入れた時点で、大概、pathは切ってる筈(「mysqlEnv」的なもので複数環境を切り替えてると話は違う?)。
ということで、「mysql --help | grep my.cnf」と入れても問題なく、結果が返ってくる筈:
先ずは、元記事に載ってるやり方。
[ユーザールート]$ /usr/local/Cellar/mysql/8.0.21_1/bin/mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
次に、pathを切ってる前提で。
[ユーザールート]$ mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
「$MYSQL_TCP_PORT」って何だっけ?
[stein@MBP15-LATE2018 ~]$ echo $MYSQL_TCP_PORT
ふむ。順番に左から探していって、見つかったらそいつが有効になるんだよね…Apacheと同様「/private/etc/」直下に置くか、「今現在ログインしてる自身専用」という意味合いでユーザールートに、dotアノテーション化するか。自宅使用だから、どっちでも良いからねぇ…cnfのバックアップを取る前提で、前者にしよう。
※元記事では「インストールディレクトリ配下の」とあるけども、残念、上記のコマンド実行結果に「/usr/local/opt/mysql/」が入ってない。
2020-10-17追記:
MySQL 8.0リファレンスマニュアル「4.2.2.2 オプションファイルの使用」→「オプションファイルの処理順序」の表4.1|Windowsシステムで読み取られるオプションファイルや表4.2|Unix及びUnixライクなシステムで読み取られるオプションファイル」に拠れば↓の順番で検索される(複数ファイルにある同オプションに対する値は、後から読み取られたものが有効になる)のだね。
- macOS等のUnix系OSの場合:
- 1. 「/etc/my.cnf」
- 2. 「/etc/mysql/my.cnf」
- 3. 「SYSCONFDIR/my.cnf」
- 4. 「$MYSQL_HOME/my.cnf」 (MySQLのベースディレクトリ。サーバーのみ)
- 5. 「defaults-extra-file」
- 6. 「~/.my.cnf」
- 7. 「~/.mylogin.cnf」 (mysql_config_editorが生成。クライアントのみ)
- 8. 「DATADIR/mysqld-auto.cnf」 (サーバーが永続化時に自動生成。サーバーのみ)
- Windows系OSの場合:
- 1. 「%WINDIR%\my.cnf」
- 2. 「C:\my.cnf」
- 3. 「BASEDIR\my.cnf」 (MySQLのベースディレクトリ)
- 4. 「defaults-extra-file」
- 5. 「%APPDATA%\MySQL\.mylogin.cnf」 (mysql_config_editorが生成。クライアントのみ)
- 6. 「DATADIR\mysqld-auto.cnf」 (サーバーが永続化時に自動生成。サーバーのみ)
…Windowsとそれ以外で、検索先が違うじゃんw
…さて、macOSとWindowsとで前提を揃えるなら、「MySQLのベースディレクトリ」にmy.cnfを置くか。
…それとも、「Apacheの構成ファイル置き場」と同じディレクトリにmy.cnfを置くか。
この記事が気に入ったらサポートをしてみませんか?