見出し画像

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. 1. 「/etc/my.cnf」
    2. 2. 「/etc/mysql/my.cnf」
    3. 3. 「SYSCONFDIR/my.cnf」
    4. 4. 「$MYSQL_HOME/my.cnf」 (MySQLのベースディレクトリ。サーバーのみ)
    5. 5. 「defaults-extra-file」
    6. 6. 「~/.my.cnf」
    7. 7. 「~/.mylogin.cnf」 (mysql_config_editorが生成。クライアントのみ)
    8. 8. 「DATADIR/mysqld-auto.cnf」 (サーバーが永続化時に自動生成。サーバーのみ)
  • Windows系OSの場合:
    1. 1. 「%WINDIR%\my.cnf」
    2. 2. 「C:\my.cnf」
    3. 3. 「BASEDIR\my.cnf」 (MySQLのベースディレクトリ)
    4. 4. 「defaults-extra-file」
    5. 5. 「%APPDATA%\MySQL\.mylogin.cnf」 (mysql_config_editorが生成。クライアントのみ)
    6. 6. 「DATADIR\mysqld-auto.cnf」 (サーバーが永続化時に自動生成。サーバーのみ)

…Windowsとそれ以外で、検索先が違うじゃんw

…さて、macOSとWindowsとで前提を揃えるなら、「MySQLのベースディレクトリ」にmy.cnfを置くか。

…それとも、「Apacheの構成ファイル置き場」と同じディレクトリにmy.cnfを置くか。

この記事が気に入ったらサポートをしてみませんか?