ほとんどの 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 および mysql、mysqladmin、などの 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 システムで読み取られるオプションファイル
ファイル名 | 目的 |
---|---|
,
|
グローバルオプション |
C:\my.ini , C:\my.cnf
|
グローバルオプション |
,
|
グローバルオプション |
defaults-extra-file |
--defaults-extra-file で指定されたファイル (存在する場合) |
|
ログインパスオプション (クライアントのみ) |
|
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 ServerPROGRAMDIR
はプログラムディレクトリ (英語バージョンの 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 |
グローバルオプション |
|
グローバルオプション |
$MYSQL_HOME/my.cnf |
サーバー固有のオプション (サーバーのみ) |
defaults-extra-file |
--defaults-extra-file で指定されたファイル (存在する場合) |
~/.my.cnf |
ユーザー固有のオプション |
~/.mylogin.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.cnf
が mysqld によって処理される場合、/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