| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
4.1.1 mysqld コマンドラインオプション | ||
| 4.1.2 `my.cnf' オプション設定ファイル |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
mysqld コマンドラインオプション
通常、mysqld オプションはオプション設定ファイルから管理してください。
「4.1.2 `my.cnf' オプション設定ファイル」 節 参照 。
mysqld と mysqld.server は mysqld グループと server グループからオプションを読み込みます。
mysqld_safe は mysqld、server、mysqld_safe、safe_mysqld の各グループからオプションを読み込みます。
組み込み MySQL サーバは通常、server、embedded、および xxxxx_SERVER からオプションを読み込みます。ここで、xxxxx はアプリケーションの名前です。
mysqld には、多くのコマンドラインオプションがあります。以下、一般的なコマンドラインオプションについて説明します。
完全なオプション一覧を参照するには、mysqld --help を実行してください。
レプリケーション用のオプションについては、別のセクションで説明します。 「4.11.6 レプリケーションスタートアップオプション」 を参照してください。
--ansi
-b, --basedir=path
--big-tables
--bind-address=IP
--console
--log-error が指定されている場合でも、stderr/stdout にエラーログメッセージを書き込む。このオプションを使用した場合、Windows では mysqld によりコンソール画面が開かれたままになる。
--character-sets-dir=path
--chroot=path
mysqld デーモンを配置する。MySQL 4.0 以降の推奨セキュリティ設定(MySQL 3.23 では、完全に閉じた chroot ジェイルを提供できない)。
ただし、LOAD DATA INFILE と SELECT ... INTO OUTFILE に制約が加わる。
--core-file
mysqld が異常終了した場合に、コアファイルを作成する。システムによっては、mysqld_safe に --core-file-size を指定することも必要になる。
「4.8.2 mysqld_safe(mysqld のラッパ)」 節 参照 。
注意: --user オプションも使用している場合、Solaris などシステムではコアファイルを作成できない。
-h, --datadir=path
--debug[...]=
--with-debug でコンフィギャしている場合、このオプションを使用して mysqld の動作を示すトレースファイルを取得できる。
「E.1.2 トレースファイルの作成」 節 参照 。
--default-character-set=charset
--default-table-type=type
--delay-key-write[= OFF | ON | ALL]
DELAYED KEYS をどのように使用するか指定する。 「5.5.2 サーバパラメータのチューニング」 節 参照 。
--delay-key-write-for-all-tables(MySQL 4.0.3 では、--delay-key-write=ALL を使用)
MyISAM テーブルにおいて、書き込み間のキーバッファをフラッシュしない。
「5.5.2 サーバパラメータのチューニング」 節 参照 。
--des-key-file=filename
DES_ENCRYPT() および DES_DECRYPT() が使用するデフォルトキーをこのファイルから読み取る。
--enable-external-locking(以前は --enable-locking)
lockd が完全には機能しないシステム(Linux など)でこのオプションを使用すると、mysqld がデッドロックになる可能性が高くなる。
--enable-named-pipe
-T, --exit-info
mysqld サーバのデバッグに使用できる、複数の異なるフラグのビットマスク。完全に理解していない限り、このオプションは使用しないこと。
--flush
-?, --help
--init-file=file
-L, --language=...
-l, --log[=file]
--log-bin=[file]
--log-bin-index[=file]
--log-error[=file]
--log-isam[=file]
--log-long-format
--log-slow-queries と --log-long-format を使用している場合、インデックスを使用しないクエリも、スロークエリログに記録される。
注意: --log-long-format は MySQL バージョン 4.1 で廃止され、--log-short-format が導入されている(long log format がバージョン 4.1 以降のデフォルト設定になった)。また、MySQL 4.1 から、インデックスを使用しないクエリをスロークエリログに記録するための --log-queries-not-using-indexes オプションが利用可能になっている。
--log-queries-not-using-indexes
--log-slow-queries と一緒に使用すると、インデックスを使用しないクエリも、スロークエリログに記録される。このオプションは MySQL 4.1 で導入された。 「4.10.5 スロークエリログ」 節 参照 。
--log-short-format
--log-slow-queries[=file]
long_query_time 秒を超えたクエリをすべてログファイルに記録する。
注意: 記録されるデフォルトの情報量は MySQL 4.1 で変更された。詳細については、--log-long-format オプションおよび --log-long-format オプションの説明を参照のこと。 「4.10.5 スロークエリログ」 節 参照 。
--log-update[=file]
file.# に記録する。# は一意の番号。 「4.10.3 更新ログ」 節 参照 。
更新ログは MySQL 5.0 で廃止されるので、代わりにバイナリログ(--log-bin)を使用すること。 「4.10.4 バイナリログ」 節 参照 。
バージョン 5.0 からは、--log-update を使用すると単にバイナリログが有効になる。
--low-priority-updates
INSERT、DELETE、UPDATE)の優先順位が選択よりも低くなる。{INSERT | REPLACE | UPDATE | DELETE} LOW_PRIORITY ... を使用して 1 つのクエリだけ優先順位を低くしたり、SET LOW_PRIORITY_UPDATES=1 を使用して 1 つのスレッド内での優先順位を変更することもできる。 「5.3.2 テーブルロック関連の問題」 節 参照 。
--memlock
mysqld プロセスをロックする。これは、使用しているシステムが mlockall() システムコールをサポートしている場合(Solaris など)のみで使用可能。オペレーティングシステムが原因で mysqld のスワップが発生するという問題がある場合、その解決に役立つ。
注意: このオプションを使用するには、サーバを root として起動することが必要になるが、これはセキュリティ上好ましくない。
--myisam-recover [=option[,option...]]
DEFAULT、BACKUP、FORCE、および QUICK の任意の組み合わせ。このオプションを無効にするには、これを明示的に "" に設定する。このオプションを使用すると、mysqld はテーブルを開くときに、テーブルにクラッシュのマークが付いていないか、つまりテーブルが正しく閉じられているかどうかをチェックする
(最後のオプションは、--skip-external-locking を使用している場合だけ有効)。テーブルにクラッシュマークが付いていた場合、mysqld はテーブルをチェックする。テーブルが破損していた場合、mysqld は修復を試みる。
以下のオプションにより、修復方法が決定される。
| オプション | 説明 |
| DEFAULT | --myisam-recover でどのオプションも指定しないのと同じ。 |
| BACKUP | 修復時にデータテーブルが変更された場合、`table_name.MYD' データファイルのバックアップを `table_name-datetime.BAK' として保存する。 |
| FORCE | .MYD ファイルから複数のレコードが失われる場合でも修復を実行する。 |
| QUICK | 削除ブロックがない場合、テーブル内のレコードをチェックしない。 |
テーブルを自動的に修復する前に、MySQL はそのことをエラーログに追加する。ユーザの介入なしにほとんどすべての問題をリカバリできるようにするには、オプション BACKUP,FORCE を使用する。これにより、いくつかのレコードが削除される場合でもテーブルの修復が行われるが、古いデータファイルがバックアップとして残るので後で調べることができる。
--new
--new オプションを使用すると、特定の局面でサーバを 4.1 のように動作させることができ、簡単に 4.0 から 4.1 にアップグレードできる。
TIMESTAMP が、'YYYY-MM-DD HH:MM:SS' 形式の文字列として返る。
「6.2 カラム型」 節 参照 。
--pid-file=path
mysqld_safe によって使用される PID ファイルのパス。
-P, --port=...
-o, --old-protocol
--one-thread
--open-files-limit=
mysqld で使用可能なファイル記述子の数を変更できる。
これが設定されていないか、または 0 に設定されている場合、mysqld は、setrlimit() で使用する値を使用してファイル記述子を予約する。この値が 0 の場合、mysqld は max_connections*5 または max_connections + table_cache*2 のいずれか大きい値をファイル数として予約する。mysqld で ' Too many open files ' のエラーが出る場合、この値を大きくする。
-O, --set-variable=name=value
--help により変数一覧を表示できる。すべての変数の詳細については、このマニュアルの SHOW VARIABLES セクションを参照のこと。 「4.6.8.4 SHOW VARIABLES」 節 参照 。
これら変数を最適化する方法については、「サーバパラメータのチューニング」セクションを参照のこと。
注意: --set-variable=変数名=値 および -O 変数名=値 構文は、MySQL 4.0 で廃止。代わりに --変数名=値 を使用すること。
「5.5.2 サーバパラメータのチューニング」 節 参照 。
MySQL 4.0.2 では変数を --変数名=値 で直接設定できるので、set-variable は必要なくなった。
SET で設定可能なスタートアップオプションの最大値を制限するには、--maximum-variable-name コマンドラインオプションを使用して定義する。 「5.5.6 SET 構文」 節 参照 。
注意: 変数に値を設定すると、その値が設定可能範囲に収まるように、また使用アルゴリズムに合うように自動的に変数値が修正される。
--safe-mode
--safe-show-database
SHOW DATABASES コマンドを実行すると、そのユーザが何らかの権限を持っているデータベースのみが戻り値として返る。
バージョン 4.0.2 からすべてのユーザが SHOW DATABASES 権限を持つようになったので、このオプションは廃止され、何もしない(このオプションはデフォルトで有効)。 「4.4.1 GRANT および REVOKE の構文」 節 参照 。
--safe-user-create
mysql.user テーブルあるいはそのテーブル内のカラムへの INSERT 権限がなければ、そのユーザは GRANT コマンドを使用して新規ユーザを作成できない。
--skip-bdb
--skip-concurrent-insert
MyISAM テーブルで SELECT と INSERT を同時に実行できなくする(これは、この機能にバグがあると思われる場合だけ使用すること)。
--skip-delay-key-write
--delay-key-write=OFF を使用する。
すべてのテーブルの DELAY_KEY_WRITE オプションを無視する。
「5.5.2 サーバパラメータのチューニング」 節 参照 。
--skip-grant-tables
mysqladmin flush-privileges または mysqladmin reload を実行する)。
--skip-host-cache
--skip-innodb
--skip-external-locking(以前は --skip-locking)
isamchk または myisamchk を使用するには、サーバをシャットダウンする必要がある。 「1.2.3 MySQL の安定性」 節 参照 。
注意: MySQL バージョン 3.23 では、REPAIR および CHECK を使用して MyISAM テーブルを修復したりチェックすることができる。
--skip-name-resolve
Host カラムの値がすべて IP アドレスまたは localhost であることが必要である。 「5.5.5 MySQL の DNS の使用」 節 参照 。
--skip-networking
mysqld とのやり取りはすべて、名前付きパイプまたは Unix ソケットを介して行う必要がある。ローカルからの接続要求のみが許可されているシステムにおいて、特にこのオプションが推奨される。 「5.5.5 MySQL の DNS の使用」 節 参照 。
--skip-new
--skip-symlink
--skip-symbolic-links を使用すること。
--symbolic-links, --skip-symbolic-links
Windows でシンボリックリンクを有効にすると、実際のディレクトリへのパスが含まれる directory.sym ファイルの作成により、データベースディレクトリへのシンボリックリンクを作成できるようになる。
「5.6.1.3 Windows 上のデータベースに対するシンボリックリンクの使用」 節 参照 。
Unix でシンボリックリンクを有効にすると、CREATE TABLE ステートメントの INDEX DIRECTORY オプションまたは DATA DIRECTORY オプションで MyISAM のインデックスファイルまたはデータファイルを別ディレクトリにリンクできるようになる。テーブルを削除したり名前を変更すると、そのシンボリックリンクがポイントするファイルも削除または名前変更される。
--skip-safemalloc
--with-debug=full でコンフィギャしていれば、すべてのプログラムが、メモリの割り当て時と解放時に必ずメモリのオーバーランをチェックする。このチェックには時間がかかるため、このチェックを行わないで済むサーバに対しては、--skip-safemalloc オプションによりチェックをスキップできる。
--skip-show-database
SHOW DATABASES 権限を持っていない場合に、SHOW DATABASES コマンドを無効にする。
--skip-stack-trace
mysqld を実行するときに役立つ。システムによっては、コアファイルを取得するためにこのオプションの使用が必要な場合もある。 「E.1 MySQL サーバのデバッグ」 節 参照 。
--skip-thread-priority
--socket=path
MySQL)。
--sql-mode=value[,value[,value...]]
REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、ONLY_FULL_GROUP_BY、NO_UNSIGNED_SUBTRACTION、NO_AUTO_VALUE_ON_ZERO、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_KEY_OPTIONS、NO_DIR_IN_CREATE、MYSQL323、MYSQL40、DB2、MAXDB、MSSQL、ORACLE、POSTGRESQL、および ANSI。
リセットするには、値を空白にする(--sql-mode="")。
NO_AUTO_VALUE_ON_ZERO は、AUTO_INCREMENT カラムの処理に影響を与える。通常、NULL または 0 のいずれかをカラムに挿入することにより、カラムの次のシーケンス番号を生成する。
NO_AUTO_VALUE_ON_ZERO を指定すると、0 のこの働きが抑制されるため、NULL だけが次のシーケンス番号を生成することになる。このモードは、0 がテーブルの AUTO_INCREMENT カラムに保存されている場合に役に立つ(これは推奨されている方法ではないが)。たとえば、mysqldump でテーブルをダンプしてから再読み込みした場合、MySQL は通常、0 値に遭遇したときに新規シーケンス番号を生成するため、ダンプされたテーブルと再読み込みしたテーブルの内容が異なる結果になる。この場合、ダンプしたファイルを再読み込みする前に NO_AUTO_VALUE_ON_ZERO を有効にするとこの問題が解決する(このオプションが使用可能になった MySQL 4.1.1 以降、mysqldump によるダンプ出力には、自動的に NO_AUTO_VALUE_ON_ZERO を有効にするためのステートメントが含まれている)。
他のサーバとの互換性のために使用するオプション値もある。
これらを指定することにより、SHOW CREATE TABLE の実行結果から、以前のバージョンの MySQL または他のデータベースサーバが理解できない出力が除外される。
これらのオプション値を使用すると、CREATE TABLE ステートメントの他のサーバへの移植性が高まる。
NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_DIR_IN_CREATE、および NO_KEY_OPTIONS を使用すると、テーブルオプションや、カラムまたはインデックス定義に関するオプションが除外される。
MYSQL323 と MYSQL40 は、MySQL 3.23 と MySQL 4.0 との互換用。
DB2、MAXDB、MSSQL、ORACLE、および POSTGRESQL。
mysqldump は SHOW CREATE TABLE を使用して、ダンプ出力に含むテーブル作成ステートメントを取得するため、これらのオプションは mysqldump の出力にも影響する。
オプション値のいくつかは、値のセットまたはグループの略称なので、影響は複雑になる。
たとえば、--sql-mode=ANSI(または --ansi)オプションを使用して、サーバに ANSI モードで実行するように命令できる。これは以下のコマンドラインオプションを両方指定するのと同じ。
--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY --transaction-isolation=SERIALIZABLE |
注意: この方法で ANSI モードを指定すると、トランザクション分離レベルを設定することにもなる。 ANSI モードでのサーバの実行については、 「1.8.2 ANSI モードでの MySQL の実行」 を参照のこと。
他の "グループ" 値は、DB2、MAXDB、MSSQL、ORACLE、および POSTGRESQL。
これらのいずれの値を指定しても、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、および NO_KEY_OPTIONS 値が有効になる。
--sql-mode オプションは MySQL 3.23.41 で追加された。
NO_UNSIGNED_SUBTRACTION 値は 4.0.0 で追加された。
NO_DIR_IN_CREATE は 4.0.15 で追加された。
NO_AUTO_VALUE_ON_ZERO、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_KEY_OPTIONS、MYSQL323、MYSQL40、DB2、MAXDB、MSSQL、ORACLE、POSTGRESQL、および ANSI は 4.1.1 で追加された。
--temp-pool
--transaction-isolation={ READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE }
SET TRANSACTION 構文」 節 参照 。
-t, --tmpdir=path
/tmp ディレクトリがある場合、このオプションが役に立つ。
MySQL 4.1 以降、複数のパスの指定が可能になっている。これらのパスはラウンドロビン方式で使用される。Unix ではコロン(`:')を、Windows ではセミコロン(`;')を使用してパスを区切る。
メモリベースのファイルシステムを指すように tmpdir を設定することは可能。ただし、MySQL サーバがスレーブの場合はできない。スレーブの場合、マシンがリブートしてもテンポラリテーブルのレプリケーションまたは LOAD DATA INFILE のレプリケーション処理を続行するためのテンポラリファイルが必要となる。そのため、マシンのリブートで消去されるメモリベースの tmpdir は適しない。ディスクベースの tmpdir が必要。
-u, --user={user_name | user_id}
mysqld サーバを、ユーザ名 user_name またはユーザ ID user_id を持つユーザとして実行する
(ここでの "ユーザ" は、権限テーブルにリストされた MySQL ユーザではなく、システムログインアカウントを指す)。
このオプションは、mysqld を root アカウントで起動する場合、必須である。
起動シーケンス中にサーバがそのユーザ ID を変更し、root ではなく、その特定のユーザとして実行する。
「4.3.2 MySQL のクラッカー対策」 節 参照 。
MySQL 3.23.56 および 4.0.12 以降では、
ユーザが --user=root オプションを `my.cnf' ファイルに追加するという(結果、サーバは root として稼動)セキュリティホールを回避するため、mysqld は指定された最初の --user オプションだけを使用し、複数の --user オプションがあった場合は警告を出力する。`/etc/my.cnf' および `datadir/my.cnf' 内のオプションは、コマンドラインオプションの前に処理されるため、--user オプションを `/etc/my.cnf' に含めて root 以外の値を指定することを推奨する。`/etc/my.cnf' 内のオプションは他の --user オプションより先に検出され、サーバは確実に root 以外のユーザとして実行され、他の --user オプションが検出されると警告が出力される。
-V, --version
-W, --log-warnings
Aborted connection... などの警告を `.err' ファイルに出力する。レプリケーションを使用する場合は、このオプションを有効にすることを推奨する(ネットワークエラーや再接続に関するメッセージなど、現在何が起こっているかについての情報をより多く取得できる)。 「A.2.10 通信エラー/Aborted connection」 節 参照 。
このオプションは以前の --warnings。
実行中のサーバに対して、ほとんどの値を SET コマンドで変更できます。 「5.5.6 SET 構文」 節 参照 。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL ではバージョン 3.22 以降、サーバとクライアントのデフォルトスタートアップオプションをオプション設定ファイルから読み取ることができるようになっています。
Windows では、MySQL はデフォルトオプションを以下のファイルから読み取ります。
| ファイル名 | 用途 |
windows-directory\my.ini | グローバルオプション |
C:\my.cnf | グローバルオプション |
windows-directory は Windows ディレクトリの保存場所です。
Unix では、MySQL はデフォルトオプションを以下のファイルから読み取ります。
| ファイル名 | 用途 |
/etc/my.cnf | グローバルオプション |
DATADIR/my.cnf | サーバ固有オプション |
defaults-extra-file | --defaults-extra-file=path で指定されたファイル |
~/.my.cnf | ユーザ固有オプション |
DATADIR は MySQL データディレクトリです(通常、バイナリインストールの場合は `/usr/local/mysql/data'、ソースインストールの場合は `/usr/local/var')。
注意: これは、コンフィギャ時に指定されたディレクトリです。mysqld 起動時に --datadir で指定したディレクトリではありません。サーバはコマンドラインの引数を処理する前にオプション設定ファイルを探すため、--datadir による指定は、サーバがオプション設定ファイルを探す場所に影響しません。
注意: Windows では、オプション設定ファイル内のすべてのパスを `\' ではなく、`/' で指定してください。`\' は MySQL の エスケープ文字であるため、`\' を使用する場合は 2 回指定する必要があります。
MySQL は、オプション設定ファイルを上記の順序で読み取ろうとします。複数のオプション設定ファイルが存在する場合、後で読み取られたファイルに指定されているオプションの方が、先に読み取られたファイル内の同一オプションより優先されます。コマンドラインで指定されたオプションは、オプション設定ファイルで指定されたオプションよりも優先されます。オプションによっては、環境変数を使用して指定できるものもあります。 コマンドラインまたはオプション設定ファイルで指定されたオプションの方が、環境変数値よりも優先されます。 「F. 環境変数」 節 参照 。
オプション設定ファイルをサポートするプログラムは、mysql、mysqladmin、mysqld、mysqld_safe、mysql.server、mysqldump、mysqlimport、mysqlshow、mysqlcheck、myisamchk、および myisampack です。
バージョン 4.0.2 より、loose プリフィックスをコマンドラインオプション(または my.cnf のオプション)に使用できます。オプションの前に loose を付けると、オプションが未知の場合でも、それを読み取ったプログラムはエラー終了せず、以下の警告を出力します。
shell> mysql --loose-no-such-option |
MySQL プログラム実行時にコマンドラインで指定できる長いオプションは、オプション設定ファイルで指定できます(ダッシュ2つを前に付けない)。使用可能なオプションの一覧を表示するには、--help オプション付きでそのプログラムを実行してください。
オプション設定ファイルには、以下の形式の行を含めることができます。
#comment
[group]
group は、オプションを設定するプログラムまたはグループの名前。グループ行の後の option行または set-variable 行はすべてそのグループに適用される。これは、オプション設定ファイルの最後、または他のグループ行が指定されるまで有効。
option
--option と同等。
option=value
--option=value と同等。注意: オプションの引数にコメント文字が含まれる場合、引数を二重引用符で囲む必要がある。
set-variable = name=value
--set-variable=name=value と同等。
注意: --set-variable は MySQL 4.0 で廃止された。MySQL 4.0 では、プログラム変数名をオプション名として使用できる。コマンドラインでは、--name=value を使用する。オプション設定ファイルでは、name=value を使用する。
[client] グループにより、すべての MySQL クライアント(mysqld ではなく)に適用されるオプションを指定できます。これは、サーバに接続する際に使用するパスワードを指定するための理想的なグループです(ただし、管理者以外のユーザがオプション設定ファイルを読み書きできないようにしてください)。
特定のバージョンの mysqld サーバだけが読み取れるオプションを作成するには、[mysqld-4.0]、[mysqld-4.1] などを使用します。
[mysqld-4.0] new |
上記の new オプションは、MySQL サーババージョン 4.0.x でのみ使用されます。
注意: オプションおよび値に対して、その前後にある空白は自動的に削除されます。エスケープシーケンス `\b'、`\t'、`\n'、`\r'、`\\'、および `\s' を値文字列に使用することができます(`\s' == blank)。
次に、一般的なグローバルオプション設定ファイルの例を示します。
[client] port=3306 socket=/tmp/mysql.sock [mysqld] port=3306 socket=/tmp/mysql.sock set-variable = key_buffer_size=16M set-variable = max_allowed_packet=1M [mysqldump] quick |
次に、一般的なユーザオプション設定ファイルの例を示します。
[client] # 以下のパスワードは、標準の MySQL クライアント全てに使用されます password="my_password" [mysql] no-auto-rehash set-variable = connect_timeout=2 [mysqlhotcopy] interactive-timeout |
ソースディストリビューションがあれば、`my-xxxx.cnf' という名前の設定ファイルのサンプルが `support-files' ディレクトリに含まれています。
バイナリディストリビューションの場合は、`DIR/support-files' ディレクトリにあります。ここで、DIR は MySQL インストールディレクトリのパスです(通常、`C:\mysql' または `/usr/local/mysql')。現在、小、中、大、および特大システム用のサンプル設定ファイルが用意されています。`my-xxxx.cnf' を自分のホームディレクトリにコピーして、名前を `.my.cnf' に変更し、このファイルを使用してみてください。
オプション設定ファイルをサポートする MySQL プログラムはすべて、以下のオプションをサポートします。
| オプション | 説明 |
--no-defaults | オプション設定ファイルを一切読み取らない。 |
--print-defaults | プログラム名と、取得するすべてのオプションを出力する。 |
--defaults-file=full-path-to-default-file | 指定された設定ファイルだけを使用する。 |
--defaults-extra-file=full-path-to-default-file | グローバル設定ファイルを読み取った後、ユーザ設定ファイルの前にこの設定ファイルを読み取る。 |
注意: これらのオプションは、コマンド行の最初に置く必要があります。ただし、--print-defaults だけは、--defaults-file または --defaults-extra-file の直後に置くことができます。
開発者向け注意: オプション設定ファイルの処理としては、コマンドライン引数を処理する前に、オプション設定ファイル内のすべての合致するオプション(該当グループのオプション)が処理されるようになっています。複数回指定されているオプションの最後のインスタンスを使用するプログラムにとっては、この処理で問題ありません。複数回指定されているオプションを処理するが、オプション設定ファイルは読み取らない旧式のプログラムについては、2 行追加するだけでその機能を装備できます。 その方法については、標準 MySQL クライアントのいずれかのソースコードを確認してください。
シェルスクリプトで、my_print_defaults コマンドを使用してオプション設定ファイルを解析することができます。以下の例は、[client] グループと [mysql] グループに属すオプションの表示要求があった場合に、my_print_defaults が生成する可能性のある出力です。
shell> my_print_defaults client mysql --port=3306 --socket=/tmp/mysql.sock --no-auto-rehash |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
| 4.2.1 Windows 上で複数のサーバを実行する | ||
| 4.2.2 Unix 上で複数のサーバを実行する | ||
| 4.2.3 複数サーバ環境でクライアントプログラムを使用する |
場合によっては、同じマシン上で複数の mysqld サーバを実行することが必要になります。たとえば、既存の稼働環境のままにして、新しい MySQL リリースをテストしたい場合が考えられます。
また、ユーザごとに異なる mysqld サーバへのアクセス権を与える場合などもあります(たとえば、顧客ごとに独立した MySQL インストールを提供するインターネットサービスプロバイダなど)。
単一のマシン上で複数のサーバを実行するには、いくつかのパラメータでサーバ固有の値を設定する必要があります。これらはコマンドラインまたはオプション設定ファイルで設定できます。
「4.1.1 mysqld コマンドラインオプション」 および 「4.1.2 `my.cnf' オプション設定ファイル」 を参照してください。
少なくとも以下のオプションはサーバごとに異なります。
--port=port_num
--socket=path
--shared-memory-base-name=name(Windows のみ、MySQL 4.1 で導入)
--pid-file=path(Unix のみ)
--port は、TCP/IP 接続のポート番号を制御します。
--socket は、Unix ではソケットファイルパスを、Windows では名前付きパイプの名前を制御します(名前付きパイプ接続をサポートしているサーバに対してのみ、Windows 上で一意のパイプ名を指定する必要があります)。
--shared-memory-base-name は、Windows サーバが使用する共有メモリ名を指定します。これにより、クライアントはその共有メモリを介して接続できるようになります。
--pid-file は、Unix サーバがプロセス ID を書き込むファイルの名前を示します。
以下のオプションを使用する場合、サーバごとに異なる値を設定する必要があります。
--log=path
--log-bin=path
--log-update=path
--log-error=path
--log-isam=path
--bdb-logdir=path
パフォーマンスを高めるには、以下のオプションをサーバごとに個別に設定し、負荷を複数のディスクに分散します。
--tmpdir=path
--bdb-tmpdir=path
複数のテンポラリディレクトリを上記のように設定し、どの MySQL サーバにどのテンポラリファイルが属するのかわかりやすくしておくことを推奨します。
一般的に、データディレクトリについても、各サーバが異なるディレクトリを使用するようにします。これは --datadir=path オプションで指定します。
警告: 2 つのサーバから同じデータベースのデータを更新しないようにしてください。使用しているオペレーティングシステムが障害からの保護をおこなうようなシステムロックをサポートしていない場合、予期しない事態が発生する可能性があります。また、複数のサーバが同じデータディレクトリを使用し、ログが有効になっている場合、適切なオプションを使用して各サーバに異なるログファイル名を指定する必要があります。そうしないと、サーバは同じファイルにログしてしまいます。
サーバ間でのデータディレクトリ共有に関するこの警告は、NFS 環境にも当てはまります。NFS 環境で複数の MySQL サーバに同じデータディレクトリへのアクセスを認めることは避けてください。
lockd デーモンによって処理されるが、現在のところ、どのような状況でも 100% の信頼性でロックを実行できるプラットフォームは存在しない。
簡単な方法を選択してください。NFS で複数のサーバにデータディレクトリを共有させるアイデアは良いアイデアではありません。 また、複数の CPU を持つ 1 台のコンピュータを用意し、スレッドを効率的に処理するオペレーティングシステムを使用することを推奨します。
複数の MySQL インストールを異なるロケーションで行う場合、--basedir=path オプションを使用して各サーバに対してベースディレクトリを指定し、各サーバがそれぞれ別のデータディレクトリ、ログファイル、および PID ファイルを使用するようにできます(これらの値のデフォルトは、ベースディレクトリに相対して決定されます)。その場合、他に指定する必要があるオプションは --socket と --port だけです。たとえば、`.tar' ファイルバイナリディストリビューションを使用して MySQL の複数のバージョンをインストールするとします。これらは別々のロケーションにインストールされるので、対応するベースディレクトリ以下で ./bin/mysqld_safe コマンドを使用して、各インストールのサーバを起動することができます。
mysqld_safe が、mysqld に渡す適切な --basedir オプションを特定するので、--socket オプションと --port オプションを mysqld_safe に設定するだけで済みます。
以下のセクションで説明するように、環境変数の設定または適切なコマンドラインオプションの指定により、追加サーバを起動することが可能です。ただし、より永続的に複数のサーバを実行する必要がある場合には、オプション設定ファイルを使用して各サーバ固有のオプション値を指定する方法が便利です。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
適切なパラメータを使用し、コマンドラインからサーバを手動で起動することにより、Windows 上で複数のサーバを実行することができます。Windows NT ベースのシステムでは、複数のサーバを Windows サービスとしてインストールし、Windows サービスとして実行する方法もあります。コマンドラインから、またはサービスとして MySQL サーバを実行する方法についての一般的な説明は、 「2.6.1 Windows の注意事項」 に記載されています。このセクションでは、データディレクトリなど、サーバ固有であることが必要なスタートアップオプション値をサーバごとに設定してサーバを起動する方法について説明します(これらのオプションについては、 「4.2 同じマシン上で複数の MySQL サーバを実行する」 を参照してください)。
| 4.2.1.1 コマンドラインから複数の Windows サーバを起動する | ||
| 4.2.1.2 複数の Windows サーバをサービスとして起動する |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
コマンドラインから手動で複数のサーバを起動するには、コマンドラインまたはオプション設定ファイルで必要なオプションを指定します。オプション設定ファイルでオプションを設定する方が便利ですが、各サーバに独自のオプションセットを確実に設定する必要があります。これを行うには各サーバ用のオプション設定ファイルを作成し、サーバ起動時に --defaults-file を使用してそのサーバにファイル名を指定します。
たとえば、mysqld を、データディレクトリ `C:\mydata1' を使用してポート 3307 で実行し、mysqld-max を、データディレクトリ `C:\mydata2' を使用してポート 3308 で実行するとします。このためには、2 つのオプション設定ファイルを作成します。たとえば、以下のような `C:\my-opts1.cnf' ファイルを作成します。
[mysqld] datadir = C:/mydata1 port = 3307 |
次に、以下のような 2 つ目のファイル `C:\my-opts2.cnf' を作成します。
[mysqld] datadir = C:/mydata2 port = 3308 |
そして、それぞれのオプション設定ファイルを使って各サーバを起動します。
shell> mysqld --defaults-file=C:\my-opts1.cnf shell> mysqld-max --defaults-file=C:\my-opts2.cnf |
Windows NT では、サーバがフォアグラウンドで起動するため、2 つのコマンドを別々のコンソールウィンドウで実行する必要があります。
サーバをシャットダウンするには、該当するポート番号に接続する必要があります。
shell> mysqladmin --port=3307 shutdown shell> mysqladmin --port=3308 shutdown |
この例のように設定されているサーバは、クライアントに対して TCP/IP 接続を許可します。名前付きパイプ接続も可能にするには、mysqld-nt サーバまたは mysqld-max-nt サーバを使用し、名前付きパイプを有効にするオプションを指定し、その名前を指定します(名前付きパイプ接続をサポートするサーバは、それぞれ固有のパイプ名を使用することが必要です)。たとえば、`C:\my-opts1.cnf' ファイルを以下のように修正します。
[mysqld] datadir = C:/mydata1 port = 3307 enable-named-pipe socket = mypipe1 |
そして、サーバを次のように起動します。
shell> mysqld-nt --defaults-file=C:\my-opts1.cnf |
2 つ目のサーバで使用する `C:\my-opts2.cnf' も同様に修正します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Windows NT ベースのシステムでは、MySQL サーバを Windows サービスとして実行できます。単一の MySQL サービスのインストール、制御、および削除の手順については、 「2.1.1.7 Windows NT、2000、または XP での MySQL の起動」 を参照してください。
MySQL 4.0.2 より、複数のサーバをサービスとしてインストールできるようになっています。 その場合、各サーバが異なるサービス名を使用することが必要です。また、サーバごとに一意であることが必要なその他のパラメータにも注意が必要です。
以下の手順は、`C:\mysql-4.0.8' および `C:\mysql-4.0.17' にインストールされた 2 つの異なる MySQL バージョンから mysqld-nt サーバを実行する場合を想定しています(たとえば、本稼働サーバとして 4.0.8 を実行しているときに、アップグレード前に 4.0.17 をテストする場合など)。
--install オプションで MySQL サービスをインストールする場合、以下の原則が当てはまります。
MySQL のデフォルトサービス名を使用し、標準オプション設定ファイルの [mysqld] グループからオプションを読み取る。
--install オプションの後でサービス名を指定すると、サーバは [mysqld] オプショングループを無視し、サービスと同じ名前のグループからオプションを読み取る。サーバは、標準オプション設定ファイルからオプションを読み取る。
--defaults-file オプションを指定すると、サーバは標準オプション設定ファイルを無視し、指定ファイルの [mysqld] グループからのみオプションを読み取る。
これらの原則は、--install-manual オプションを使用してサーバをインストールした場合にも当てはまります。
以上の情報に基づいて、複数のサービスをセットアップする方法はいくつかあります。 次に、いくつかの例を示します。いずれを試す場合でも、最初に既存の MySQL サービスをシャットダウンして削除しておくことが必要です。
mysqld-nt を mysqld1 のサービス名で実行し、4.0.17 mysqld-nt を mysqld2 のサービス名で実行する場合、
4.0.8 には [mysqld1] グループを、4.0.17 には [mysqld2] グループを使用できる。
たとえば、以下のように `C:\my.cnf' をセットアップできる。
# options for mysqld1 service [mysqld1] basedir = C:/mysql-4.0.8 port = 3307 enable-named-pipe socket = mypipe1 # options for mysqld2 service [mysqld2] basedir = C:/mysql-4.0.17 port = 3308 enable-named-pipe socket = mypipe2 |
Windows が各サービス用の正しい実行可能プログラムを登録できるように、サーバのフルパス名を指定して、以下のようにサービスをインストールする。
shell> C:\mysql-4.0.8\bin\mysqld-nt --install mysqld1 shell> C:\mysql-4.0.17\bin\mysqld-nt --install mysqld2 |
サービスを開始するには、サービスマネージャを使用するか、適切なサービス名で NET START を使用する。
shell> NET START mysqld1 shell> NET START mysqld2 |
サービスを停止するには、サービスマネージャを使用するか、適切なサービス名で NET STOP を使用する。
shell> NET STOP mysqld1 shell> NET STOP mysqld2 |
注意: MySQL 4.0.17 より前のバージョンでは、デフォルトサービス名(MySQL)を使用してインストールされたサーバか、mysqld のサービス名で明示的にインストールされたサーバだけが、標準オプション設定ファイルの [mysqld] グループを読み取ります。4.0.17 以降では、他のサービス名を使用してインストールされたサーバでも、標準オプション設定ファイルを読み取るサーバであればすべて、[mysqld] グループを読み取ります。これにより、すべての MySQL サービスに適用するオプション用に [mysqld] グループを使用し、各サービスの名前が付けられたオプショングループを、そのサービス名でインストールされたサーバ用に使用できます。
--defaults-file を使用して、各サーバにどのファイルを使用するか指定する。このとき、各ファイルに [mysqld] グループを使用してオプションをリストアップすることが必要。
この方法で 4.0.8 mysqld-nt のオプションを指定するには、以下のような `C:\my-opts1.cnf' ファイルを作成する。
[mysqld] basedir = C:/mysql-4.0.8 port = 3307 enable-named-pipe socket = mypipe1 |
4.0.17 mysqld-nt に対しては、以下のような `C:\my-opts2.cnf' ファイルを作成する。
[mysqld] basedir = C:/mysql-4.0.17 port = 3308 enable-named-pipe socket = mypipe2 |
以下のようにサービスをインストールする(各コマンドは 1 行で入力)。
shell> C:\mysql-4.0.8\bin\mysqld-nt --install mysqld1
--defaults-file=C:\my-opts1.cnf
shell> C:\mysql-4.0.17\bin\mysqld-nt --install mysqld2
--defaults-file=C:\my-opts2.cnf
|
MySQL サーバをサービスとしてインストールする際に --defaults-file オプションを使用するには、オプションの前にサービス名を付ける必要がある。
サービスのインストール後、起動と停止は前の例と同じように行う。
複数のサービスを削除するには、mysqld --remove を使用して 1 つずつ削除します。削除するサービスがデフォルト名でない場合は、--remove オプションの後にサービス名を指定します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
複数のサーバを Unix 上で実行する最も簡単な方法は、異なる TCP/IP ポートとソケットファイルを使用するようにしてサーバをコンパイルし、それぞれが別のネットワークインタフェースで接続するようにすることです。また、各インストールを別々のベースディレクトリでコンパイルすることにより、データディレクトリ、ログファイル、および PID ファイルの場所をサーバ別にすることができます。
既存サーバがデフォルトのポート番号とソケットファイルでコンフィギャされているとします。新しいサーバを別のパラメータでコンフィギャするには、以下のように configure コマンドを使用します。
shell> ./configure --with-tcp-port=port_number \
--with-unix-socket-path=file_name \
--prefix=/usr/local/mysql-4.0.17
|
ここで、port_number と file_name に、デフォルト以外のポート番号とソケットファイルのパス名を指定します。および、--prefix の値も、既存の MySQL インストールの場所とは別のインストールディレクトリを指定します。
MySQL サーバが特定のポート番号をリッスンしている場合、以下のコマンドを使用して、ベースディレクトリやソケット名など、重要な変数の値を確認できます。
shell> mysqladmin --host=host_name --port=port_number variables |
このコマンドで表示される情報により、追加サーバを設定するときにどのオプション値を使用してはいけないかがわかります。
注意: "localhost" をホスト名として指定すると、mysqladmin は TCP/IP ではなく、Unix ソケット接続をデフォルト使用します。
MySQL 4.1 では、--protocol={TCP | SOCKET | PIPE | MEMORY} オプションを使用して、使用する接続プロトコルを明示的に指定できます。
別のソケットファイルおよび TCP/IP ポート番号で起動するために、新たに MySQL サーバをコンパイルする必要はありません。実行時に値を指定することも可能です。これを行う 1 つの方法として、コマンドラインオプションの使用があります。
shell> /path/to/mysqld_safe --socket=file_name --port=port_number |
2 番目のサーバに別のデータベースディレクトリを使用するため、--datadir=path オプションを mysqld_safe に渡します。
同様の効果を得る別の方法として、環境変数を使用してソケット名とポート番号を設定することもできます。
shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock shell> MYSQL_TCP_PORT=3307 shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT shell> scripts/mysql_install_db shell> bin/mysqld_safe & |
この方法を使用すると、テスト用に 2 つ目のサーバをすばやく起動できます。この方法の長所は、上記のシェルから呼び出したどのクライアントプログラムにもこの環境変数が適用される点です。そのため、これらのクライアントの接続は自動的に 2 つ目のサーバにダイレクトされます。
「F. 環境変数」 に、mysqld を制御する他の環境変数の一覧が記載されています。
自動サーバ実行では、ブート時に実行されるスタートアップスクリプトにより、サーバごとに以下のコマンドが 1 回ずつ実行される必要があります。その際、各コマンドに対して適切なオプション設定ファイルのパスを設定します。
mysqld_safe --defaults-file=path-to-option-file |
各オプション設定ファイルには、特定のサーバに固有のオプション値が含まれていることが必要です。
Unix では、mysqld_multi スクリプトを使用して複数のサーバを開始することもできます。
「4.8.3 mysqld_multi(複数の MySQL サーバを管理するプログラム)」 節 参照 。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
クライアントにコンパイルされたネットワークインタフェース以外のネットワークインタフェースをリッスンしている MySQL サーバにそのクライアントから接続するには、以下のいずれかの方法を実行します。
--host=host_name --port=port_number でクライアントを開始する。Unix ソケットまたは Windows の名前付きパイプを使用してローカルホストに接続する場合は --host=localhost --socket=file_name でクライアントを開始する。
--protocol=tcp を、Unix ソケットを使用する場合は --protocol=socket を、名前付きパイプを使用する場合は --protocol=pipe を、共有メモリを使用する場合には --protocol=memory を指定してクライアントを開始する。TCP/IP 接続では、--host オプションと --port オプションを指定することが必要な場合もある。他の接続タイプでは、場合によっては、--socket オプションでソケットまたは名前付きパイプ名を指定したり、--shared-memory-base-name オプションで共有メモリ名を指定することが必要になる。
MYSQL_UNIX_PORT 環境変数と MYSQL_TCP_PORT 環境変数を設定して Unix ソケットおよび TCP/IP ポート番号を指定する。
特定のソケットまたはポートを永続的に使用する場合、これらの環境変数を設定するコマンドを `.login' ファイルに置いて、ログインのたびにこれらの環境変数が適用されるようにできる。
「F. 環境変数」 節 参照 。
[client] グループにデフォルトソケットと TCP/IP ポートを指定する。たとえば、Windows では `C:\my.cnf' を、Unix ではホームディレクトリの `.my.cnf' ファイルを使用できる。
「4.1.2 `my.cnf' オプション設定ファイル」 節 参照 。
mysql_real_connect() の呼び出しで指定できる。また、mysql_options() を呼び出して、プログラムにオプション設定ファイルを読み取らせることもできる。
「11.1.3 C API 関数の説明」 節 参照 。
DBD::mysql モジュールを使用している場合、MySQL オプション設定ファイルからオプションを読み取ることができる。次に例を示す。
$dsn = "DBI:mysql:test;mysql_read_default_group=client;"
. "mysql_read_default_file=/usr/local/mysql/data/my.cnf";
$dbh = DBI->connect($dsn, $user, $password);
|
「11.5.2 DBI インタフェース」 節 参照 。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL には、非標準ですが、上級のセキュリティおよび権限システムがあります。このセクションでは、その機能について説明します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
インターネットに接続されたコンピュータで MySQL を使用するユーザはすべて、このセクションを読んで、頻発しているセキュリティ侵害を回避するようにしてください。
盗聴傍受、改ざん、再生、サービス妨害など、あらゆるタイプの攻撃に対して、MySQL サーバだけでなく、サーバホスト全体を、最大限の努力をもって保護することが必要です。ここでは、可用性および耐障害性のすべてについてはカバーしていません。
MySQL では、すべての接続、クエリなど、ユーザが実行する可能性のある操作に対して、そのセキュリティを、アクセス制御リスト(ACL)をベースにして保護しています。MySQL クライアントとサーバ間の SSL 暗号化接続もサポートしています。ここで説明する概念の多くは、MySQL 固有ではありません。ほとんどすべてのアプリケーションに当てはまります。
MySQL を実行する際には、可能な限り以下のガイドラインに従ってください。
root ユーザ以外のだれにも mysql データベースの user テーブルへのアクセス権を与えないこと。これは非常に重要である。
MySQL では、暗号化されたパスワードが実際のパスワードである。
user テーブル内のリストに含まれているパスワードを知り得、そのアカウントのリストに含まれているホストに対するアクセス権を持つ者はだれでも、簡単にそのユーザとしてログインできる。
GRANT コマンドと REVOKE コマンドを使用する。必要以上の権限をユーザに設定しないこと。すべてのホストに対する権限は決して与えないこと。
チェックリスト
mysql -u root を試す。パスワードなしでサーバに正常に接続できるようだと問題がある。この場合、すべての権限を持つ root ユーザとして、MySQL サーバに接続できるということである。
特に root パスワードの設定に関する項目に注意して、MySQL インストール手順を見直すこと。
SHOW GRANTS コマンドを使用して、だれが何にアクセスできるかをチェックする。REVOKE コマンドを使用して不要な権限を削除する。
MD5()、SHA1()、または別の一方向ハッシング関数を使用する。
チェックリスト
nmap などのツールを使用して、インターネットから自分のポートをスキャンしてみる。MySQL はデフォルトでポート 3306 を使用する。このポートは、信頼されていないホストからアクセスできてはいけない。他にも、MySQL ポートが開いているかどうか確かめる簡単な方法として、リモートコンピュータから以下のコマンドを実行するという方法がある。ここで、server_host は MySQL サーバのホスト名である。
shell> telnet server_host 3306 |
接続できて意味不明な文字が返ればポートが開いている。開いておく正当な理由がない限り、ファイアウォールまたはルータで閉じておく。telnet がハングするか、接続が拒否されれば正常である。つまり、ポートは閉じている。
; DROP DATABASE mysql;" などのような入力をしても、アプリケーションが安全に保たれるようにしなければならない。これは極端な例であるが予防策を講じておかないと、クラッカーによる同様の手段によって、重大なセキュリティリークやデータの紛失が発生する可能性がある。
また、数値データもチェックすること。文字列だけを保護するのは、よくあるミスである。公開されているデータのみのデータベースは保護する必要がないという考えもよくある考えだが、これも間違っている。そのようなデータベースにも、サービス妨害タイプの攻撃が可能である。このタイプの攻撃を防ぐ最もシンプルな方法は、数値定数をアポストロフィで囲むこと。SELECT * FROM table WHERE ID=234 ではなく、SELECT * FROM table WHERE ID='234' のようにする。
MySQL は自動的のこの文字列を数値に変換し、非数値記号を削除する。
チェックリスト
%22(`"')、%23(`#')、および %27(`'')を追加して動的 URL の修正を試みる。
addslashes() 関数をチェックする。
PHP 4.0.3 より、mysql_escape_string() 関数が利用可能になっている。これは、MySQL C API の同じ名前の関数をベースにしている。
mysql_real_escape_string() API 呼び出しをチェックする。
escape および quote の修飾子をチェックする。
quote() メソッドをチェックするか、プレースホルダを使用する。
PreparedStatement オブジェクトおよびプレースホルダを使用する。
tcpdump ユーティリティおよび strings ユーティリティの使用法を理解すること。ほとんどの場合、以下のようなコマンドで、MySQL データストリームが暗号化されているかどうかをチェックできる。
shell> tcpdump -l -i eth0 -w - src or dst port 3306 | strings |
これは、Linux システムで有効。他のシステムでも、少し修正するだけで使用できる。 警告: データを見ることができなくても、必ずしも実際に暗号化されているとは限らない。高度なセキュリティが必要な場合は、専門家に相談すること。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL サーバに接続するとき、通常はパスワードを使用します。パスワードはテキスト形式で送信されるわけではありませんが、暗号化アルゴリズムはそれほど強力なものではありません。クライアントとサーバ間のトラフィックを盗聴できれば、クラッカーは少しの努力でパスワードを探り当てることができます。クライアントとサーバ間の接続が信頼されていないネットワークを通る場合には、SSH トンネルを使用して通信を暗号化してください。
その他の情報はすべてテキストとして転送されるので、その接続を見ることができる人はだれでもそれらの情報を読むことができます。これに不安を感じる場合は、圧縮プロトコル(MySQL バージョン 3.22 以降)を使用してトラフィックの解読をより困難にすることができます。セキュリティをさらに高めるには、ssh を使用してください。オープンソース の ssh クライアントは http://www.openssh.org/ に、商用 ssh クライアントは http://www.ssh.com/ にあります。これを使用すると、MySQL サーバと MySQL クライアント間で暗号化 TCP/IP 接続を利用できます。
MySQL 4.0 を使用している場合、内部 OpenSSL サポートも利用できます。 「4.4.10 安全な接続の使用」 節 参照 。
MySQL システムのセキュリティを確保するためには、以下の事項を強く推奨します。
other_user にパスワードが設定されていなければ、だれでも mysql -u other_user db_name として簡単に他人になりすましてログインできる。クライアント/サーバ型のアプリケーションでは、クライアント側で任意のユーザ名を指定できるのが一般的。mysql_install_db スクリプトを実行前に編集することにより、すべてのユーザのパスワードを変更できる。また、MySQL root ユーザのパスワードのみ変更するには、以下のように行う。
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
-> WHERE user='root';
mysql> FLUSH PRIVILEGES;
|
root アカウントで実行しないこと。このことは、FILE 権限のあるユーザであればだれでも root(たとえば ~root/.bashrc)としてファイルを作成できてしまうので、非常に危険である。これを防ぐため、--user=root オプションを使用して直接指定された場合を除き、mysqld は root として実行することを拒否するようになっている。
mysqld は、普通の権限なしユーザとして実行できる。
新しい Unix アカウント mysql を作成してさらにセキュリティを高めることもできる。別の Unix アカウントで mysqld を実行する場合、user テーブル内の root ユーザ名を変更する必要はない。MySQL ユーザ名と Unix アカウント名はお互い関係ない。別の Unix アカウントで mysqld を開始するには、サーバのデータディレクトリにある `my.cnf' または `/etc/my.cnf' のオプション設定ファイルの [mysqld] グループに、アカウント名を指定する user 行を追加する。次に例を示す。
[mysqld] user=mysql |
これで、サーバを手動で起動した場合も、mysqld_safe または mysql.server を使用して起動した場合でも、指定のアカウントでサーバが起動する。
詳細については、 「A.3.2 一般ユーザで MySQL を実行する方法」 を参照のこと。
--skip-symlink オプションで無効にできる)。このことは、root で mysqld を実行する場合、mysqld データディレクトリへの書き込み権限があるすべてのユーザが、システムのすべてのファイルを削除できることになるので、特に重要である。
「5.6.1.2 Unix 上のテーブルに対するシンボリックリンクの使用」 節 参照 。
mysqld を実行する Unix アカウントだけに、データベースディレクトリの読み取り権限と書き込み権限があることを確認する。
PROCESS 権限をすべてのユーザには与えない。mysqladmin processlist の出力には、現在実行中のクエリのテキストが表示される。そのため、このコマンドを実行できるユーザは、UPDATE user SET password=PASSWORD('not_secure') クエリを実行する他のユーザを特定できる可能性がある。
mysqld は、PROCESS 権限を持つユーザ用に特別接続枠を予約しているので、すべての通常接続が使用中の場合でも、MySQL root ユーザはログインしてサーバの状態をチェックできる。
FILE 権限をすべてのユーザには与えない。この権限を持つユーザは、mysqld デーモンの権限でファイルシステムのどの場所にでもファイルを書き込める。安全対策として、SELECT ... INTO OUTFILE で生成されるファイルについてはだれでも書き込み可能だが、既存のファイルには書き込めないようになっている。
FILE 権限は、サーバを実行している Unix ユーザがアクセスできるすべての読み取り可能ファイルを読む場合にも使用される。また、ユーザが何らかの権限を持っているカレントデータベースに任意のファイルを読み込むことができる。
これは、不正使用される可能性がある。たとえば、LOAD DATA を使用して `/etc/passwd' をテーブルにロードし、SELECT で読むことができる。
mysqld で max_user_connections 変数を設定する。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
mysqld スタートアップオプション
セキュリティに影響する mysqld オプションは以下のとおりです。
--local-infile[=(0|1)]
--local-infile=0 を使用すると、LOAD DATA LOCAL INFILE を使用できなくなる。
--safe-show-database
SHOW DATABASES コマンドで、そのユーザが何らかの権限を持っているデータベースのみが返される。
現在は、SHOW DATABASES 権限が存在するため、バージョン 4.0.2 以降、このオプションは廃止されており、何もしない(デフォルトで有効になっている)。 「4.4.1 GRANT および REVOKE の構文」 節 参照 。
--safe-user-create
mysql.user テーブルへの INSERT 権限がなければ、そのユーザは GRANT コマンドを使用して新規ユーザを作成できない。ユーザが事前設定された権限で新規ユーザを作成できるようにするには、そのユーザに以下の権限を設定することが必要である。
mysql> GRANT INSERT(user) ON mysql.user TO 'user'@'hostname'; |
これで、ユーザは権限カラムを直接変更できないが、GRANT コマンドを使用して他のユーザに権限を与えることができるようになる。
--skip-grant-tables
mysqladmin flush-privileges 、 mysqladmin reload または FLUSH PRIVILEGES; を実行すればよい。
--skip-name-resolve
Host カラム値はすべて IP アドレスか localhost でなければならない。
--skip-networking
mysqld への接続をすべて Unix ソケットで行う。
このオプションは、3.23.27 より前の MySQL バージョンで MIT-pthreads パッケージを利用しているものには適さない。その当時、Unix ソケットは MIT-pthreads によってサポートされていなかったからである。
--skip-show-database
SHOW DATABASES 権限のないユーザに SHOW DATABASES コマンドの使用を認めない。バージョン 4.0.2 から、このオプションは必要なくなった。現在では、SHOW DATABASES 権限が割り当てられることでコマンドを使用できるようになっている。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
LOAD DATA LOCAL のセキュリティ関連事項
MySQL 3.23.49 および MySQL 4.0.2(Windows では 4.0.13)で、LOAD DATA LOCAL に関するセキュリティ対策としていくつかの新しいオプションが追加されました。
このコマンドには次のような潜在的な問題が 2 つあります。
ファイルの読み取りがサーバ側から開始されるため、理論的には、改悪した MySQL サーバを作成しておけば、クライアントがテーブルに対してクエリを実行した時に、そのクライアントコンピュータ上に存在する全てのファイル(カレントユーザが読み取り権を持つ)を、改悪した MySQL サーバが読み取れるということになります。
クライアントが Web サーバから接続する Web 環境では、ユーザは LOAD DATA LOCAL を使用して、Web サーバプロセスが読み取りアクセス権を持つどのファイルでも読み取ることができます(ユーザが SQL サーバに対してすべてのコマンドを実行できる場合)。
これには 2 つの解決方法があります。
MySQL を --enable-local-infile でコンフィギャしていなければ、mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0) を呼び出さないクライアントは LOAD DATA LOCAL を使用できません。
「11.1.3.40 mysql_options()」 節 参照 。
mysql コマンドラインクライアントに対しては、--local-infile[=1] オプションで LOAD DATA LOCAL を有効にでき、--local-infile=0 オプションで無効にできます。
デフォルトでは、すべての MySQL クライアントとライブラリが --enable-local-infile でコンパイルされ、MySQL 3.23.48 以前との互換性が保たれるようになっています。
MySQL サーバですべての LOAD DATA LOCAL コマンドを無効にするには、mysqld を --local-infile=0 で開始します。
LOAD DATA LOCAL INFILE がサーバまたはクライアントで無効になっている場合、次のエラーメッセージ(1148)が表示されます。
The used command is not allowed with this MySQL version |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL 権限システムは、主に、任意のホストから接続したユーザを認証し、そのユーザを、データベース上に登録されている権限(SELECT、INSERT、UPDATE、DELETE)と関連付けます。
さらに、匿名ユーザを作成し、LOAD DATA INFILE や管理操作機能など MySQL 固有の機能を実行するための権限を設定します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL 権限システムは、すべてのユーザがそれぞれ許可された操作だけを実行できるようにします。MySQL サーバに接続すると、ユーザの ID は接続元のホストおよび指定したユーザ名によって特定されます。権限システムは、ユーザ ID と行いたい操作に応じて権限を設定します。
MySQL では、ホスト名とユーザ名を使用してユーザを認証します。1 つのユーザ名がインターネット上のどこででも同じユーザを示しているという保証がないためです。たとえば、office.com から接続したユーザ joe は、elsewhere.com から接続した joe と同一人物とは限りません。
MySQL では、同じユーザ名でも異なるホストから接続するユーザ間で区別することにより、このことを処理しています。joe に対して、office.com から接続した場合の権限セットと、elsewhere.com から接続した場合の権限セットを別々に設定できます。
MySQL のアクセス制御には 2 段階があります。
SELECT 権限があるかどうか、あるいはデータベースの DROP 権限があるかどうかをサーバがチェックする。
注意: 接続中に権限が変更された場合(ユーザ自身または第三者によって)、必ずしもその変更は次のクエリに反映されません。詳細については、 「4.4.3 権限の変更はいつ反映されるか」 を参照してください。
サーバはアクセス制御の両方の段階で、mysql データベースの user、db、host の各テーブルを使用します。これらの権限テーブルのフィールドを以下に示します。
| テーブル名 | user | db | host |
| スコープフィールド | Host | Host | Host
|
User | Db | Db |
|
Password | User | ||
| 権限フィールド | Select_priv | Select_priv | Select_priv
|
Insert_priv | Insert_priv | Insert_priv |
|
Update_priv | Update_priv | Update_priv |
|
Delete_priv | Delete_priv | Delete_priv |
|
Index_priv | Index_priv | Index_priv |
|
Alter_priv | Alter_priv | Alter_priv |
|
Create_priv | Create_priv | Create_priv |
|
Drop_priv | Drop_priv | Drop_priv |
|
Grant_priv | Grant_priv | Grant_priv |
|
References_priv | References_priv | References_priv |
|
Reload_priv | |||
Shutdown_priv | |||
Process_priv | |||
File_priv | |||
Show_db_priv | |||
Super_priv | |||
Create_tmp_table_priv | Create_tmp_table_priv | Create_tmp_table_priv |
|
Lock_tables_priv | Lock_tables_priv | Lock_tables_priv |
|
Execute_priv | |||
Repl_slave_priv | |||
Repl_client_priv | |||
ssl_type | |||
ssl_cypher | |||
x509_issuer | |||
x509_cubject | |||
max_questions | |||
max_updates | |||
max_connections |
アクセス制御の 2 段階目(要求確認)で、要求がテーブルに関連するものである場合、サーバがさらに tables_priv テーブルおよび columns_priv テーブルを参照することがあります。これらのテーブルのフィールドを以下に示します。
| テーブル名 | tables_priv | columns_priv |
| スコープフィールド | Host | Host |
Db | Db |
|
User | User |
|
Table_name | Table_name |
|
Column_name |
||
| 権限フィールド | Table_priv | Column_priv |
Column_priv | ||
| その他のフィールド | Timestamp | Timestamp |
Grantor |
各権限テーブルには、スコープフィールドと権限フィールドがあります。
スコープフィールドは、テーブルの各登録の範囲を特定します。たとえば、Host と User の値が 'thomas.loc.gov' および 'bob' である user テーブルエントリは、thomas.loc.gov ホストからサーバに接続しようとする bob を認証します。同様に、Host、User、Db の各フィールドの値が 'thomas.loc.gov'、'bob'、および 'reports' である db テーブルエントリは、thomas.loc.gov ホストから reports データベースに接続しようとする bob を認証します。tables_priv テーブルおよび columns_priv テーブルには、各エントリに許可されているテーブルまたはテーブルとカラムの組み合わせを示すスコープフィールドが含まれています。
アクセスをチェックする目的において、Host 値は大文字と小文字の区別がありません。User、Password、Db、および Table_name の値については大文字と小文字が区別されます。
Column_name 値は、MySQL バージョン 3.22.12 以降では大文字と小文字が区別されなくなっています。
権限フィールドは、テーブル内のエントリごとに設定されている権限、つまり何の操作を実行できるかを示します。サーバはさまざまな権限テーブルの情報を組み合わせて、ユーザの権限についての完全な記述を生成します。 この動作に適用されるルールについては、 「4.3.10 アクセス制御の段階 2: 要求確認」 を参照してください。
スコープフィールドは文字列です。ここで示されているように、それぞれのデフォルト値は空の文字列です。
| フィールド名 | 型 | 注意 |
Host | CHAR(60) | |
User | CHAR(16) | |
Password | CHAR(16) | |
Db | CHAR(64) | (tables_priv テーブルおよび columns_priv テーブルでは CHAR(60)) |
Table_name | CHAR(60) | |
Column_name | CHAR(60) |
user、db、host の各テーブルでは、すべての権限フィールドが ENUM('N','Y') として宣言されます。それぞれの値は 'N' または 'Y' で、デフォルト値は 'N' です。
tables_priv テーブルおよび columns_priv テーブルでは、権限フィールドは SET フィールドとして宣言されます。
| テーブル名 | フィールド名 | 設定可能な要素 |
tables_priv |
Table_priv
| 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'
|
tables_priv |
Column_priv
| 'Select', 'Insert', 'Update', 'References'
|
columns_priv |
Column_priv
| 'Select', 'Insert', 'Update', 'References'
|
以下、サーバが権限テーブルをどのように使用するか簡潔に説明します。
user テーブルのスコープフィールドにより、着信した接続を許可するか拒否するか決定する。許可された接続について、user テーブルに設定されている権限はいずれも、そのユーザのグローバル(スーパーユーザ)権限になる。
これらの権限は、サーバのすべてのデータベースに適用される。
db テーブルと host テーブルは一緒に使用される。
db テーブルのスコープフィールドにより、どのユーザがどのホストからどのデータベースにアクセスできるかを決定する。権限フィールドから、何の操作が許可されているか判断する。
host テーブルは、任意の db テーブルエントリをいくつかのホストに適用する場合、db テーブルを補完するものとして使用される。たとえば、1 人のユーザにネットワーク内のいくつかのホストからデータベースへアクセスすることを許可する場合、ユーザの db テーブルエントリの Host 値を空白のままにしておき、それらのホストの各エントリを host テーブルに入力する。このメカニズムの詳細については、 「4.3.10 アクセス制御の段階 2: 要求確認」 を参照のこと。
tables_priv テーブルおよび columns_priv テーブルは db テーブルに似ているが、より詳細な設定が可能。データベースレベルではなく、テーブルおよびカラムレベルで適用される。
注意: 管理者権限(RELOAD、SHUTDOWN など)は、user テーブルでのみ指定します。管理操作はデータベース固有ではなく、サーバそのもので行う操作なので、この権限を他の権限テーブルで設定する必要はありません。実際、管理操作を実行できるかどうか決定する際には、user テーブルを参照するだけで済みます。
FILE 権限も user テーブルだけで指定します。
これは管理者権限ではありませんが、サーバホスト上でのファイルの読み書きは、アクセスしているデータベースに依存しません。
mysqld サーバは権限テーブルの内容を、起動時に 1 回読み取ります。権限テーブルへの変更の反映については、 「4.4.3 権限の変更はいつ反映されるか」 を参照してください。
権限テーブルの内容を変更する場合、その変更によって、目的の権限が適切に設定されていることを確認してください。問題診断のヘルプについては、 「4.3.12 Access denied エラーの原因」 を参照してください。セキュリティに関するアドバイスについては、 「4.3.2 MySQL のクラッカー対策」 を参照してください。
便利な診断ツールとして、mysqlaccess スクリプトがあります。これは、Yves Carlier が MySQL ディストリビューション用に提供したものです。このツールの動作を確認したい場合には、mysqlaccess を --help オプションで起動してください。
注意: mysqlaccess は user、db、および host テーブルだけを使用してアクセスをチェックします。テーブルまたはカラムレベルの権限はチェックしません。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
ユーザ権限に関する情報は、mysql データベース(mysql という名前のデータベース)の user、db、host、tables_priv、columns_priv の各テーブルに保存されています。MySQL サーバは起動時と、 「4.4.3 権限の変更はいつ反映されるか」 で説明されている状況下において、これらのテーブルを読み取ります。
以下、このマニュアルで使用されている MySQL バージョン 4.0.2 提供の権限名を、それに関連付けられているテーブルカラム名およびその適用範囲とともに示します。各権限の意味については、 「4.4.1 GRANT および REVOKE の構文」 を参照してください。
| 権限 | カラム | 適用範囲 |
ALTER | Alter_priv | テーブル |
DELETE | Delete_priv | テーブル |
INDEX | Index_priv | テーブル |
INSERT | Insert_priv | テーブル |
SELECT | Select_priv | テーブル |
UPDATE | Update_priv | テーブル |
CREATE | Create_priv | データベース、テーブル、またはインデックス |
DROP | Drop_priv | データベースまたはテーブル |
GRANT | Grant_priv | データベースまたはテーブル |
REFERENCES | References_priv | データベースまたはテーブル |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | サーバ管理 |
EXECUTE | Execute_priv | サーバ管理 |
FILE | File_priv | サーバ上のファイルアクセス |
LOCK TABLES | Lock_tables_priv | サーバ管理 |
PROCESS | Process_priv | サーバ管理 |
RELOAD | Reload_priv | サーバ管理 |
REPLICATION CLIENT | Repl_client_priv | サーバ管理 |
REPLICATION SLAVE | Repl_slave_priv | サーバ管理 |
SHOW DATABASES | Show_db_priv | サーバ管理 |
SHUTDOWN | Shutdown_priv | サーバ管理 |
SUPER | Super_priv | サーバ管理 |
SELECT、INSERT、UPDATE、DELETE の各権限は、データベース上の既存テーブルのレコードに対する各操作を許可するものです。
SELECT ステートメントは、テーブルからレコードを実際に取り出す場合のみ、SELECT 権限が必要となります。サーバのデータベースへのアクセス権がなくても実行できる SELECT ステートメントもあります。たとえば、mysql クライアントをシンプルな計算機として使用するような場合です。
mysql> SELECT 1+1; mysql> SELECT PI()*2; |
INDEX 権限では、インデックスを作成または破棄(削除)できます。
ALTER 権限では、ALTER TABLE を使用できます。
CREATE および DROP 権限では、新規データベースおよびテーブルの作成、既存データベースおよびテーブルの破棄(削除)を行えます。
注意: ユーザに mysql データベースに対する DROP 権限を与えると、そのユーザは MySQL アクセス権限が保存されているデータベースを破棄できるということになるので注意が必要です。
GRANT 権限では、ユーザが所有している権限を他のユーザに与えることができます。
FILE 権限では、LOAD DATA INFILE および SELECT ... INTO OUTFILE ステートメントを使用してサーバ上でファイルの読み書きを行えます。この権限を与えられたユーザはだれでも、MySQL サーバによってアクセス可能な読み取り可能ファイルをすべて読むことができ、また MySQL サーバによって書き込めるどのディレクトリにも新規読み取り可能ファイルを作成できます。
このユーザはまた、カレントデータベースディレクトリ内のすべてのファイルを読むことができます。
ただし、既存ファイルの変更はできません。
これら以外の権限は、mysqladmin プログラムを使用して実行される管理操作用に使用されます。以下の表で、どの管理権限でどの mysqladmin コマンドを実行できるかを示します。
| 権限 | 実行可能なコマンド |
RELOAD | reload、refresh、flush-privileges、flush-hosts、flush-logs、flush-tables |
SHUTDOWN | shutdown |
PROCESS | processlist |
SUPER | kill |
reload コマンドは、権限テーブルを再読み込みするようにサーバに命令します。refresh コマンドは、すべてのテーブルをフラッシュし、ログファイルを開いて閉じます。flush-privileges は reload のシノニムです。他の flush-* コマンドも refresh と同様の機能を果たしますが、範囲が限られており、状況によって使い分けてください。たとえば、ログファイルだけをフラッシュするには、refresh の代わりに flush-logs を使用します。
shutdown コマンドはサーバをシャットダウンします。
processlist コマンドは、サーバで実行中のスレッドに関する情報を表示します。kill コマンドはサーバスレッドを強制終了します。ユーザはいつでも自分のスレッドを表示および強制終了することができますが、他のユーザによって開始されたスレッドを表示するには PROCESS 権限が、強制終了するには SUPER 権限が必要です。 「4.6.7 KILL 構文」 節 参照 。
一般的な指針として、ユーザにはそのユーザが必要とする権限だけを与えてください。また、以下の権限を与える際には注意が必要です。
GRANT 権限は、ユーザが自分の権限を他のユーザに与えることができる。2 人のユーザが異なる権限を持ち、両方とも GRANT 権限がある場合、お互いの権限を組み合わせることができる。
ALTER 権限は、テーブルの名前を変更することにより、権限システムを崩壊させることができる。
FILE 権限を悪用すれば、サーバの読み取り可能ファイルまたはカレントデータベースディレクトリのファイルをデータベーステーブルに読み込んで、SELECT を使用してその内容にアクセスできる。
SHUTDOWN 権限を悪用すれば、サーバを終了して、他のユーザへのサービス妨害を行うことができる。
PROCESS 権限は、パスワードの設定や変更を行うクエリなども含め、現在実行中のクエリのプレーンテキストを表示することができる。
mysql データベースの権限があれば、パスワードおよびその他のアクセス権限情報を変更することができる(パスワードは暗号化されて保存されているため、悪意のあるユーザが単に読み取ってもテキスト形式のパスワードを知ることはできない)。mysql.user パスワードカラムにアクセスできれば、それを使用して特定ユーザの MySQL サーバにログインできる(必要とされる権限を持っていれば、そのユーザはパスワードを書き換えることもできる)。
MySQL 権限システムでは達成できないこともいくつかあります。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL クライアントでは通常、MySQL サーバにアクセスする際、接続先のホスト、ユーザ名、パスワードといった接続パラメータを指定する必要があります。たとえば、mysql クライアントは以下のように開始することができます(オプション引数は `[' と `]' で囲んであります)。
shell> mysql [-h host_name] [-u user_name] [-pyour_pass] |
-h、-u、および -p オプションの別の形として、--host=host_name、--user=user_name、および --password=your_pass があります。注意: -p または --password= とそれに続くパスワードの間にスペースは入りません。
注意: コマンドラインでパスワードを指定するのは安全ではありません。
同じシステム内のどのユーザでも、ps auxww のようなコマンドを使用してパスワードを知ることができてしまいます。 「4.1.2 `my.cnf' オプション設定ファイル」 節 参照 。
mysql は、コマンドラインで指定されなかった接続パラメータに以下のデフォルト値を使用します。
localhost。
-p が指定されなければ、パスワードは無しになる。
したがって、Unix ユーザ joe では、以下のコマンドがいずれも同じ意味になります。
shell> mysql -h localhost -u joe shell> mysql -h localhost shell> mysql -u joe shell> mysql |
他の MySQL クライアントでも同様です。
Unix システムでは、接続時に別のデフォルト値を使用するように設定することができます。これにより、クライアントプログラムを起動するたびにコマンドラインで指定する必要がなくなります。設定方法は 2 つあります。
[client] セクションで接続パラメータを指定する。このセクションは以下のようになる。
[client] host=host_name user=user_name password=your_pass |
「4.1.2 `my.cnf' オプション設定ファイル」 節 参照 。
mysql のホストは、MYSQL_HOST を使