MySQL 5.6 リファレンスマニュアル  /  ...  /  オプションファイルの使用

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

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

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

ログインパスオプションを含む .mylogin.cnf ファイルは、mysql_config_editor ユーティリティーによって作成されます。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。ログインパスは、hostuser、および password という限定されたオプションのセットのみを許可するオプショングループです。クライアントプログラムは、.mylogin.cnf からどのログインパスを読み取るのかを、--login-path オプションを使用して指定します。

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

注記

MySQL Cluster プログラムで使用されるオプションファイルは、セクション18.3「MySQL Cluster の構成」で説明します。

Windows では、MySQL プログラムは起動オプションを次のファイルから指定された順 (トップの項目が最初に使用されます) で読み取ります。

ファイル名 目的
%PROGRAMDATA%\MySQL\MySQL Server 5.6\my.ini, %PROGRAMDATA%\MySQL\MySQL Server 5.6\my.cnf グローバルオプション
%WINDIR%\my.ini, %WINDIR%\my.cnf グローバルオプション
C:\my.ini, C:\my.cnf グローバルオプション
INSTALLDIR\my.ini, INSTALLDIR\my.cnf グローバルオプション
defaults-extra-file --defaults-extra-file=path によって指定されるファイル (ある場合)
%APPDATA%\MySQL\.mylogin.cnf ログインパスオプション

%PROGRAMDATA% は、ホスト上のすべてのユーザーのアプリケーションデータを含むファイルシステムディレクトリを示します。このパスはデフォルトで、Microsoft Windows Vista 以降では C:\ProgramData、Microsoft Windows のそれ以前のバージョンでは C:\Documents and Settings\All Users\Application Data です。

%WINDIR% は、Windows ディレクトリの場所を示します。これは一般には C:\WINDOWS です。次のコマンドを使用して WINDIR 環境変数の値から正確な場所を割り出すことができます。

C:\> echo %WINDIR%

INSTALLDIR は、MySQL のインストールディレクトリを示します。これは通常、MySQL 5.6 がインストールウィザードおよび構成ウィザードを使用してインストールされた場合には、C:\PROGRAMDIR\MySQL\MySQL 5.6 Server です。ここで、PROGRAMDIR はプログラムディレクトリ (英語バージョンの Windows では通常 Program Files) です。セクション2.3.3「MySQL Installer を使用した MySQL の Microsoft Windows へのインストール」を参照してください。

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

C:\> echo %APPDATA%

Unix、Linux、および OS X では、MySQL プログラムは起動オプションを次のファイルから指定された順 (トップの項目が最初に使用されます) で読み取ります。

ファイル名 目的
/etc/my.cnf グローバルオプション
/etc/mysql/my.cnf グローバルオプション
SYSCONFDIR/my.cnf グローバルオプション
$MYSQL_HOME/my.cnf サーバー固有のオプション
defaults-extra-file --defaults-extra-file=path によって指定されるファイル (ある場合)
~/.my.cnf ユーザー固有のオプション
~/.mylogin.cnf ログインパスオプション

~ は、現在のユーザーのホームディレクトリ ($HOME の値) を示します。

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

MYSQL_HOME はサーバー固有の my.cnf ファイルが存在するディレクトリへのパスを含む環境変数です。MYSQL_HOME がセットされていない状態で mysqld_safe プログラムを使ってサーバーを起動すると、mysqld_safe は次のように MYSQL_HOME をセットしようとします。

  • BASEDIR および DATADIR が、それぞれ MySQL ベースディレクトリとデータディレクトリのパス名を示すようにします。

  • DATADIR には my.cnf ファイルが存在し、BASEDIR には存在しない場合、mysqld_safeMYSQL_HOMEDATADIR にセットします。

  • そうでない場合は、MYSQL_HOME がセットされておらず、my.cnf ファイルが DATADIR に存在しない場合、mysqld_safeBASEDIRMYSQL_HOME をセットします。

MySQL 5.6 では、DATADIRmy.cnf の場所として使用することは非推奨です。

一般的に、DATADIR はバイナリインストールでは /usr/local/mysql/data、ソースインストールでは /usr/local/var です。これは構成時に指定されたデータディレクトリの場所であって、mysqld が起動したとき --datadir オプションで指定されるものではないということに注意してください。実行時に --datadir を使用しても、サーバーがオプションファイルを探す際に何の影響ももたらしません。これはサーバーがオプションを処理する前にオプションファイルを探すからです。

MySQL は、前述の順序でオプションファイルを検索し、存在するものをすべて読み取ります。使用したいオプションファイルが存在しない場合は、プレーンテキストエディタで作成します。

所定のオプションが複数ある場合は、最後のインスタンスが優先されます。1 つ例外があります。mysqld では、オプションファイルで指定されたユーザーがコマンド行でオーバーライドされるのを防ぐため、安全対策として --user オプションの最初のインスタンスが使用されます。

注記

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

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

オプションファイルでオプションを指定する構文は、コマンド行構文と同様です (セクション4.2.4「コマンド行でのオプションの使用」を参照してください)。ただしオプションファイルでは、先頭の 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 5.6 を指定するとします。これはいくつかの方法で実行できます。例:

basedir="C:\Program Files\MySQL\MySQL Server 5.6"
basedir="C:\\Program Files\\MySQL\\MySQL Server 5.6"
basedir="C:/Program Files/MySQL/MySQL Server 5.6"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s5.6

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

[client] オプショングループは、すべてのクライアントプログラムによって読み取られます (しかし、mysqld には読み取られません)。このため、すべてのクライアントに適用されるオプションを指定できます。たとえば、[client] は、サーバーへの接続に使用するパスワードを指定するために使用するのに最適なグループです。(ただし、ほかの人にパスワードを知られないように、オプションファイルは必ず自分にしか読み書きできないようにしてください。)使用するすべてのクライアントプログラムが [client] グループを認識しないかぎり、オプションに置かないようにしてください。そのオプションを理解しないプログラムを実行しようとすると、そのプログラムはエラーメッセージを表示してから終了します。

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

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

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

[mysqldump]
quick

前述のオプションファイルは、key_buffer_size 変数および max_allowed_packet 変数をセットする行に var_name=value 構文を使用します。

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

[client]
# The following password will be sent to all standard MySQL clients
password="my_password"

[mysql]
no-auto-rehash
connect_timeout=2

[mysqlhotcopy]
interactive-timeout

MySQL の特定のリリースシリーズの mysqld サーバーのみに読み取らせるべきオプショングループを作成する場合は、[mysqld-5.5][mysqld-5.6]、などの名前のグループを使用することで実行できます。次のグループは、--new オプションが 5.6.x バージョン番号の MySQL サーバーのみに使用されるべきであることを示します。

[mysqld-5.6]
new

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

!include /home/mydir/myopt.cnf

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

!includedir /home/mydir

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

注記

現在、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 ディレクティブは同様に処理されますが、指名されたディレクトリ内のすべてのオプションファイルが読み取られる点が異なります。


User Comments
  Posted by chad clark on May 24, 2007
I just installed 5.1 in a directory for testing on the same machine that 4.0 runs in production. mysqld reads /etc/my.cnf but that file contains the production (4.0) configuration.

To tell the 5.1 install to not read the /etc/my.cnf being used by 4.0 run the 5.1 mysqld_safe with --defaults-file=/etc/my.cnf-5.1.18 using your new config file.

  Posted by Jonathan Dzoba on January 21, 2010
In a Windows command prompt, typing mysql --default-file=<install path> can be rather tedious. It is easier to create a shortcut to mysql.exe and add --default-file=<install path> to the end of the Target field of the shortcut's Properties.
  Posted by Hellen Zhe-L on June 1, 2010
if using binary package (.dmg insaller) to install MySQL 5.1.47 under Mac Book, no "my.cnf" is installed. There is one under <INSTALLLOCATION>/mysql/tests, which can be used as a template to create your own.

To start MySQL server on Startup using MySQL Start Item, you must create my.cnf under <INSTALLLOCATION>/mysql/data, however, it does not appear that even system root has permission to create a file under this folder. I tried to change the owner and group of mysql/data into system root first to create this file, but failed.

The conclusion is: MySQL Start Item only starts server with basic default options, if specific options need to be passed to mysqld_safe, the server has to be started from command line with --defaults-extra-file option, which specifies the location of my.cnf
  Posted by Michaela Stephens on November 8, 2010
the default MySQL that comes with Mac OS X server (version 10.4) does not seem to use any of the default options files. it has it's own startup options.

see /System/Library/StartupItems/MySQL/*

to enable networking, you need to edit /etc/mysqlManager.plist

hope this helps somebody else.
Sign Up Login You must be logged in to post a comment.