MySQL 8.0 リファレンスマニュアル


4.2.2.2 オプションファイルの使用

ほとんどの MySQL プログラムは、オプションファイル (構成ファイルとも呼ばれる) から起動オプションを読み取ることができます。 オプションファイルは、よく使用されるオプションを指定するための便利な方法を提供し、プログラムを実行するたびにコマンド行で入力する必要がなくなります。

プログラムがオプションファイルを読み取るかどうかを判断するには、--help オプションを使用してプログラムを呼び出します。 (mysqld では、--verbose および --help を使用します。) プログラムがオプションファイルを読み取る場合は、どのファイルを探すのか、およびどのオプショングループを認識するのかが、ヘルプメッセージに示されます。

注記

--no-defaults オプションを使用して起動された MySQL プログラムは、.mylogin.cnf 以外のオプションファイルを読み取りません。

persisted_globals_load システム変数を無効にして起動されたサーバーは、mysqld-auto.cnf を読み取りません。

多くのオプションファイルはプレーンテキストファイルで、任意のテキストエディタを使用して作成されます。 例外は次のとおりです:

  • ログインパスオプションを含む .mylogin.cnf ファイル。 これは、mysql_config_editor ユーティリティによって作成される暗号化ファイルです。 セクション4.6.7「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。 ログインパスは、特定のオプションのみを許可するオプショングループです: host, user, password, port および socket。 クライアントプログラムは、.mylogin.cnf からどのログインパスを読み取るのかを、--login-path オプションを使用して指定します。

    代替ログインパスファイル名を指定するには、MYSQL_TEST_LOGIN_FILE 環境変数を設定します。 この変数は mysql-test-run.pl テストユーティリティーが使用しますが、mysql_config_editor および mysqlmysqladmin、などの MySQL クライアントによっても認識されます。

  • データディレクトリ内の mysqld-auto.cnf ファイル。 この JSON 形式ファイルには、永続化されたシステム変数設定が含まれています。 これは、SET PERSIST または SET PERSIST_ONLY ステートメントの実行時にサーバーによって作成されます。 セクション5.1.9.3「永続化されるシステム変数」を参照してください。 mysqld-auto.cnf の管理はサーバーに残しておく必要があり、手動では実行しないでください。

オプションファイルの処理順序

MySQL は、次の説明に従ってオプションファイルを検索し、存在するものを読み取ります。 使用するオプションファイルが存在しない場合は、前述の適切な方法を使用して作成します。

注記

NDB Cluster プログラムで使用されるオプションファイルについては、セクション23.3「NDB Cluster の構成」 を参照してください。

Windows では、MySQL プログラムは、次のテーブルに示すファイルから起動オプションを指定された順序で読み取ります (最初にリストされたファイルが最初に読み取られ、後で読み取られたファイルが優先されます)。

表 4.1 Windows システムで読み取られるオプションファイル

ファイル名 目的
%WINDIR%\my.ini, %WINDIR%\my.cnf グローバルオプション
C:\my.ini, C:\my.cnf グローバルオプション
BASEDIR\my.ini, BASEDIR\my.cnf グローバルオプション
defaults-extra-file --defaults-extra-file で指定されたファイル (存在する場合)
%APPDATA%\MySQL\.mylogin.cnf ログインパスオプション (クライアントのみ)
DATADIR\mysqld-auto.cnf SET PERSIST または SET PERSIST_ONLY で永続化されるシステム変数 (サーバーのみ)

前述のテーブルで、%WINDIR% は Windows ディレクトリの場所をテーブルしています。 これは一般には C:\WINDOWS です。 次のコマンドを使用して、WINDIR 環境変数の値から正確な場所を判断します:

C:\> echo %WINDIR%

%APPDATA% は、Windows アプリケーションデータディレクトリの値を示します。 次のコマンドを使用して、APPDATA 環境変数の値から正確な場所を判断します:

C:\> echo %APPDATA%

BASEDIR は、MySQL ベースのインストールディレクトリを表します。 MySQL 8.0 が MySQL Installer を使用してインストールされている場合、これは通常 C:\PROGRAMDIR\MySQL\MySQL 8.0 Server です。PROGRAMDIR はプログラムディレクトリ (英語バージョンの Windows では通常 Program Files) を表します。セクション2.3.3「MySQL Installer for Windows」 を参照してください。

DATADIR は、MySQL データディレクトリを表します。 mysqld-auto.cnf の検索に使用されるデフォルト値は、MySQL のコンパイル時に組み込まれたデータディレクトリの場所ですが、mysqld-auto.cnf の処理前に処理されるオプションファイルまたはコマンドラインオプションとして指定された --datadir によって変更できます。

Unix および Unix に似たシステムでは、MySQL プログラムは、次のテーブルに示すファイルから起動オプションを指定された順序で読み取ります (最初にリストされたファイルが最初に読み取られ、後で読み取られたファイルが優先されます)。

注記

Unix プラットフォームでは、MySQL はだれでも書き込める構成ファイルを無視します。 これはセキュリティー対策として意図的なものです。

表 4.2 Unix および Unix-Like システムで読み取られるオプションファイル

ファイル名 目的
/etc/my.cnf グローバルオプション
/etc/mysql/my.cnf グローバルオプション
SYSCONFDIR/my.cnf グローバルオプション
$MYSQL_HOME/my.cnf サーバー固有のオプション (サーバーのみ)
defaults-extra-file --defaults-extra-file で指定されたファイル (存在する場合)
~/.my.cnf ユーザー固有のオプション
~/.mylogin.cnf ユーザー固有のログインパスオプション (クライアントのみ)
DATADIR/mysqld-auto.cnf SET PERSIST または SE PERSIST_ONLY で永続化されるシステム変数 (サーバーのみ)

前述のテーブルで、~ は現在のユーザーホームディレクトリ ($HOME の値) をテーブルしています。

SYSCONFDIR は、MySQL がビルドされたときに SYSCONFDIR オプションとともに CMake に指定されたディレクトリを示します。 デフォルトでは、これはコンパイル済みのインストールディレクトリの下にある etc ディレクトリです。

MYSQL_HOME はサーバー固有の my.cnf ファイルが存在するディレクトリへのパスを含む環境変数です。 MYSQL_HOME が設定されていない場合に、mysqld_safe プログラムを使用してサーバーを起動すると、mysqld_safe によって BASEDIR(MySQL ベースのインストールディレクトリ) に設定されます。

DATADIR は、MySQL データディレクトリを表します。 mysqld-auto.cnf の検索に使用されるデフォルト値は、MySQL のコンパイル時に組み込まれたデータディレクトリの場所ですが、mysqld-auto.cnf の処理前に処理されるオプションファイルまたはコマンドラインオプションとして指定された --datadir によって変更できます。

特定のオプションの複数のインスタンスが見つかった場合は、最後のインスタンスが優先されますが、1 つの例外があります: mysqld の場合、--user オプションの first インスタンスは、オプションファイルで指定されたユーザーがコマンドラインでオーバーライドされないようにするためのセキュリティ対策として使用されます。

オプションファイル構文

次のオプションファイル構文の説明は、手動で編集するファイルに適用されます。 これにより、mysql_config_editor を使用して作成され暗号化される .mylogin.cnf と、サーバーが JSON 形式で作成する mysqld-auto.cnf が除外されます。

MySQL プログラムを実行する際にコマンド行で指定できるすべての長いオプションは、オプションファイルでも指定できます。 プログラムに対して使用可能なオプションのリストを取得するには、--help オプションを使用してそのプログラムを実行します。 (mysqld では、--verbose および --help を使用します。)

オプションファイルでオプションを指定する構文は、コマンド行構文と同様です (セクション4.2.2.1「コマンド行でのオプションの使用」を参照してください)。 ただしオプションファイルでは、先頭の 2 つのダッシュはオプション名から省略し、1 行で 1 つのオプションのみを指定します。 たとえば、コマンド行での --quick および --host=localhost は、オプションファイルでは独立した行にある quick および host=localhost として指定するようにしてください。 --loose-opt_name 形式のオプションをオプションファイルで指定するには、loose-opt_name として作成します。

オプションファイルの空の行は無視されます。 空でない行は次のいずれかの形式を取ることができます。

  • #comment, ;comment

    コメント行は#または;で始まります。 # を使用するコメントは、行の途中で開始することもできます。

  • [group]

    group はオプションを設定するプログラムまたはグループの名前です。 グループ行のあと、すべてのオプション設定行は、オプションファイルが終了するか、または別のグループ行が指定されるまで、名前を指定したグループに適用されます。 オプショングループ名では、大文字と小文字は区別されません。

  • opt_name

    これは、コマンド行の --opt_name と同等です。

  • opt_name=value

    これは、コマンド行の --opt_name=value と同等です。 オプションファイルでは、= 文字の周囲にスペースを置くことができます。これはコマンド行ではできません。 オプションで、値を一重引用符または二重引用符で囲むことができます。これは、値に#コメント文字が含まれている場合に役立ちます。

先頭および末尾のスペースは、自動的にオプション名および値から削除されます。

オプション値にエスケープシーケンス\b, \t, \n, \r, \\および\s を使用して、バックスペース、タブ、改行、改行、バックスラッシュおよび空白文字を表すことができます。 オプションファイルでは、次のエスケープルールが適用されます:

  • バックスラッシュとそれに続く有効なエスケープシーケンス文字は、シーケンスで表される文字に変換されます。 たとえば、\s はスペースに変換されます。

  • バックスラッシュの後に有効なエスケープシーケンス文字が続くことは変更されません。 たとえば、\S はそのままです。

前述のルールは、リテラルのバックスラッシュを\\または\(有効なエスケープシーケンス文字が続く場合) として指定できることを意味します。

オプションファイルにおけるエスケープシーケンスのルールは、SQL ステートメントにおける文字列リテラルのエスケープシーケンスのルールとは若干異なります。 後者のコンテキストでは、x が有効なエスケープシーケンス文字でない場合、\ x \ x ではなく x になります。 セクション9.1.1「文字列リテラル」を参照してください。

オプションファイル値のエスケープのルールは、\ をパス名区切り文字として使用する Windows パス名に特に関係します。 Windows パス名の区切り文字は、エスケープシーケンス文字が続く場合は \\ と記述する必要があります。 そうでない場合は、\\または\として記述できます。 または、/を Windows パス名で使用でき、\として扱われます。 オプションファイルでベースディレクトリ C:\Program Files\MySQL\MySQL Server 8.0 を指定するとします。 これはいくつかの方法で実行できます。 例:

basedir="C:\Program Files\MySQL\MySQL Server 8.0"
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0"
basedir="C:/Program Files/MySQL/MySQL Server 8.0"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0

オプショングループ名がプログラム名と同じである場合、グループ内のオプションは特にそのプログラムに適用されます。 たとえば、[mysqld] グループおよび [mysql] グループは、それぞれ mysqld サーバーおよび mysql クライアントプログラムに適用されます。

[client]オプショングループは、MySQL ディストリビューションで提供されるすべてのクライアントプログラムによって読み取られます (mysqld によってではありません)。 C API を使用するサードパーティのクライアントプログラムでオプションファイルを使用する方法を理解するには、mysql_options() の C API ドキュメントを参照してください。

[client]グループを使用すると、すべてのクライアントに適用するオプションを指定できます。 たとえば、[client]は、サーバーに接続するためのパスワードの指定に使用する適切なグループです。 (ただし、他のユーザーが自分のパスワードを検出できないように、オプションファイルに自分でのみアクセスできることを確認してください。) 使用するすべてのクライアントプログラムが [client] グループを認識しないかぎり、オプションに置かないようにしてください。 そのオプションを理解しないプログラムを実行しようとすると、そのプログラムはエラーメッセージを表示してから終了します。

より一般的なオプショングループを最初にリストし、より具体的なグループを後でリストします。 たとえば、[client]グループはすべてのクライアントプログラムによって読み取られるのに対し、[mysqldump]グループは mysqldump によって読取り専用であるため、より一般的です。 後で指定したオプションは、オプショングループを[client][mysqldump]の順に配置するため、mysqldump 固有のオプションで[client]オプションをオーバーライドできます。

一般的なグローバルオプションファイルを次に示します。

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=128M

[mysqldump]
quick

一般的なユーザーオプションファイルを次に示します。

[client]
# The following password is sent to all standard MySQL clients
password="my password"

[mysql]
no-auto-rehash
connect_timeout=2

特定の MySQL リリースシリーズから mysqld サーバーによって読み取り専用になるオプショングループを作成するには、[mysqld-5.7][mysqld-8.0]などの名前のグループを使用します。 次のグループは、8.0.x のバージョン番号を持つ MySQL サーバーでのみ sql_mode 設定を使用する必要があることを示しています:

[mysqld-8.0]
sql_mode=TRADITIONAL
オプションファイルのインクルード

オプションファイルで、!include ディレクティブを使用してほかのオプションファイルをインクルードしたり、!includedir を使用して特定のディレクトリでオプションファイルを検索したりできます。 たとえば、/home/mydir/myopt.cnf ファイルをインクルードするには、次のディレクティブを使用します。

!include /home/mydir/myopt.cnf

/home/mydir ディレクトリを検索してそこで見つかったオプションファイルを読み取るには、次のディレクティブを使用します。

!includedir /home/mydir

MySQL では、ディレクトリ内のオプションファイルが読み取られる順序は保証されません。

注記

Unix オペレーティングシステムで !includedir ディレクティブを使用して検出およびインクルードするファイルには、.cnf で終わるファイル名が必要です。 Windows においては、このディレクティブは .ini または .cnf 拡張子を持つファイルをチェックします。

インクルードされるオプションファイルの内容は、ほかのオプションファイルと同様に記述します。 すなわち、オプションのグループを含み、それぞれの前にオプションが適用されるプログラムを示す [group] 行があるようにしてください。

インクルードされるファイルの処理中、現在のプログラムが検索するグループ内のオプションのみが使用されます。 その他のグループは無視されます。 my.cnf ファイルに次の行が含まれるとします。

!include /home/mydir/myopt.cnf

また、/home/mydir/myopt.cnf は次のようであるとします。

[mysqladmin]
force

[mysqld]
key_buffer_size=16M

my.cnfmysqld によって処理される場合、/home/mydir/myopt.cnf 内の [mysqld] グループのみが使用されます。 このファイルが mysqladmin によって処理される場合、[mysqladmin] グループのみが使用されます。 このファイルがその他のプログラムによって処理される場合、/home/mydir/myopt.cnf のオプションは使用されません。

!includedir ディレクティブは同様に処理されますが、指名されたディレクトリ内のすべてのオプションファイルが読み取られる点が異なります。

オプションファイルに !include または !includedir ディレクティブが含まれている場合、それらのディレクティブによって指定されたファイルは、ファイル内のどこに指定されていても、オプションファイルが処理されるたびに処理されます。

包含ディレクティブが機能するには、ファイルパスを引用符で囲まず、エスケープシーケンスを使用しないでください。 たとえば、my.ini で提供されている次のステートメントは、オプションファイル myopts.ini を読み取ります:

!include C:/ProgramData/MySQL/MySQL Server/myopts.ini
!include C:\ProgramData\MySQL\MySQL Server\myopts.ini
!include C:\\ProgramData\\MySQL\\MySQL Server\\myopts.ini

Windows では、!include /path/to/extra.ini がファイルの最後の行である場合、末尾に改行が追加されていることを確認してください。それ以外の場合、行は無視されます。


関連キーワード:  プログラム, mysqld, グループ, サーバー, ディレクトリ, 処理, コマンド, テーブル, 文字, 起動