mysqldやmysqlなどのMySQLプログラムに常に使用するオプションには、 オプションファイルに指定するのが一般的です。 ここではそのオプションファイルの使い方について詳しく説明したいと思います。
MySQLのオプションの一般知識
MySQLプログラムにオプションを指定する方法はオプションファイルでの指定も含め次のものがあります。
- コマンド行でプログラム名に続けてオプションを指定する
- プログラムが起動するときに読み取るオプションファイルにオプションを指定する。
- 環境変数にオプションを設定する
もし、同じオプションが複数回指定された場合、あるいは関係するオプション、 矛盾するオプションが指定された場合は、後に指定されたオプションが優先されます。 ただし、mysqldのオプションファイルに--userオプションが指定されている場合は、 例外として最初のものが使われます。 これは安全のため、コマンドラインでオーバーライドされるのを防ぐためです。
MySQLプログラムは、環境変数、オプションファイル、コマンドラインの順にオプションを読み取ります。 したがって、コマンドラインオプションの優先度が最も高く、環境変数のオプションが最も低くなります。
オプションファイルについてヘルプで確認する
MySQLプログラムが使用するオプションファイルの詳細はヘルプで確認できます。 ヘルプで確認できる項目は次の通りです。
- どのオプションファイルをどの順番で読み取るか
- どのオプショングループを認識するか
- 使用できるオプション
プログラムのヘルプを表示するには--helpオプションを使います。 mysqldだけはオプションファイルの詳細を確認するのに--verboseの指定も必要です。
# mysql --help mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. ... Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf The following groups are read: mysql client The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file, except for login file. --defaults-file=# Only read default options from the given file #. ...
この表示では次のことがわかります。 mysqlでは/etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf、~/.my.cnf を記載された順に読み取ります。 そしれこれらのオプションファイルのmysqlとclientグループに記述されたオプションを読み取ります。
次の例はmysqldのオプションファイルを確認する例です。
$ mysqld --verbose --help mysqld Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. ... Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf The following groups are read: mysqld server mysqld-8.0 The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file, except for login file. --defaults-file=# Only read default options from the given file #. ...
一般的にシステム全体の設定は/etc/my.cnfを使い、個人的な設定は ~/.my.cnf を使います。
オプションファイルの記述方法
MySQLプログラムは先ほどのオプションファイルを順に検索し、 存在するものをすべて読み取ります。 使用したいオプションファイルが存在しない場合は、単にテキストファイルとして作成します。 ただしUnix系OSではセキュリティーの観点から、 だれでも書き込めるオプションファイルは無視されるので注意してください。
コマンドラインで指定できるすべての長いオプションは、 オプションファイルでも指定できます(ただしオプションファイルでは、先頭の2つのダッシュ不要です)。
オプションファイルに記載できる項目には次のものがあります。
- 空行
- 空行は無視されます
- コメント
- 「#」または「;」で始まる行はコメント行です。 「#」は行の途中で使用することもでき、「#」より後ろがコメントになります。
- [プログラム名またはグループ名]
-
[と]の間にプログラム名かグループ名を指定します。 この行の後から次の[と]に囲まれたセクションの開始まで、 またはファイルの最後までが、指定されたプログラムやグループのオプションになります。
プログラム名を指定すると、そのプログラムだけがオプションを読み取ります。 グループ名を指定すると、 そのグループの全てのプログラムが記載されたオプションを読み取ります。 例えばclientを指定するとmysql、mysqladmin、mysqldump などのすべてのクライアントがオプションを読み取ります。
- opt_name
- コマンドラインの--opt_nameと同等です。
- opt_name=value
- コマンドラインの --opt_name=value と同等です。 オプションファイルでは、「=」 の周囲にスペースを置くことができます。 値をシングルクォートまたはダブルクォートで囲むこともできます。 これは、値に「#」が含まれている場合、 コメント文字と解釈されないようにするときなどに使います。
以下に/etd/my.cnfなどのシステム全体の設定例を、MySQLのマニュアルから抜粋します。
[client] port=3306 socket=/tmp/mysql.sock [mysqld] port=3306 socket=/tmp/mysql.sock key_buffer_size=16M max_allowed_packet=8M [mysqldump] quick
同じくMySQLのマニュアルから ~/.my.cnf などのユーザ指定のオプション例を以下に抜粋します。
[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
おわりに
これでオプションファイルの説明はおしまいです。 いかがでしたでしょうか。 オプションファイルに指定するオプションについてはマニュアルやヘルプを参照してください。