無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 4 データベース管理 :: 4.2 mysqld ? MySQL サーバ :: 4.2.4 システム変数の使用
« 4.2.3 システム変数

4.2.4.1 構造化システム変数 »
Section Navigation      [Toggle]
  • 4.2 mysqld ? MySQL サーバ
  • 4.2.1 オプションと変数のリファレンス
  • 4.2.2 コマンド オプション
  • 4.2.3 システム変数
  • 4.2.4 システム変数の使用
    • 4.2.4.1 構造化システム変数
    • 4.2.4.2 動的システム変数
  • 4.2.5 ステータス変数
  • 4.2.6 SQL モード
  • 4.2.7 シャットダウン プロセス
  • 4.2.8 サーバ サイド ヘルプ

4.2.4. システム変数の使用

[+/-]

4.2.4.1. 構造化システム変数
4.2.4.2. 動的システム変数

mysql サーバは、様々なシステム変数を保有し、その変数をどのように設定したかを示します (項4.2.3. 「システム変数」 を参照のこと)。それぞれのシステム変数にはデフォルト値があります。システム変数はサーバ起動時に、コマンドラインまたはオプション ファイルなどを使用してセットできます。大抵の場合、SETコマンドを使用して実行中のサーバで動的に変更できます。つまり、サーバを停止または再起動せずに変更できます。プログラミング式でシステム変数の値を参考にしてください。

サーバには 2 種類のシステム変数があります。グローバル変数はサーバの全体的なオペレーションに影響し、セッション変数はそれぞれのクライアント接続でのオペレーションに影響します。与えられた変数はグローバルとセッション、両方の値を持つこともあります。グローバルおよびセッション変数は次のように関係しています。

  • サーバが起動するとき、すべてのグローバル変数をデフォルト値に初期化する。このデフォルト値はコマンド ラインまたはオプション ファイルなどで指定できる。オプションに関しては、項3.3. 「プログラム・オプションの指定」 を参照のこと。

  • サーバにはクライアントが接続するセッション変数の組み合わせがある。クライアントのセッション変数は、グローバル変数に呼応するカレント値を使用して接続タイムで初期化する。たとえば、クライアントの SQL モードは、セッション sql_mode 値で制御し、クライアントが sql_mode のグローバル値に接続するときに初期化する。

システム変数はサーバ起動時にコマンドラインまたはオプションファイルを使用してグローバル設定できます。起動オプションを使用して値を設定するときは、数値を使用し、値には K (キロバイト)、M (メガバイト)、G (ギガバイト) などのサフィックスで与えます (大文字あるは小文字)。これらは、1024、10242 または 10243 の倍数を示します。これにより、次のコマンドは、クエリ キャッシュ サイズが 16 メガバイト、最大パケット サイズが 1 ギガバイトでサーバが起動することを示します。

mysqld --query_cache_size=16M --max_allowed_packet=1G

オプション ファイル内では、次のように設定します。

[mysqld]
query_cache_size=16M
max_allowed_packet=1G

サフィックスの大文字、小文字の区別は問わず、16M と 16m、1G と 1g を同等とします。

SET ステートメントでラインタイムに設定できる変数の最大値を制限する場合には、サーバ起動時に --maximum-var_name=value のオプションで最大値を指定します。たとえば、query_cache_size の値がラインライムで 32 MB を超えないようにするには、--maximum-query_cache_size=32M とします。

システム変数は動的で、SET ステートメントでサーバ稼動中に変更できます。リストは 項4.2.4.2. 「動的システム変数」 を参照してください。SET でシステム変数を変更するには、var_name とし、オプション的に修飾子で先行します。

  • 変数がグローバルであることを明示するには、GLOBAL または @@global. で名前を先行する。グローバル変数を設定するには SUPER 権限が必要。

  • 変数がセッションであることを明示するには、SESSION、@@session.、@@ などで名前を先行する。セッション値の設定には特別の権限は不要であるが、クライアントだけがそのセッション変数を変更できる。別のクライアントからはできない。

  • LOCAL および @@local. は SESSION と @@session. のシノニム。.

  • 修飾子がない場合は、SET でセッション変数を変更する。

SET ステートメントには複数の変数アサイメントがあり、カンマで区切ります。複数のシステム変数を設定する場合、ステートメント内で最新の GLOBAL または SESSION の修飾子を、後続の指定子のない変数に使用します。

例:

SET sort_buffer_size=10000;
SET @@local.sort_buffer_size=10000;
SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;

システム変数に値を SET で指定するときには、変数にスフィックス文字は使用しません。(起動オプションのときは使用する。) ただし、この値は例示のようにプログラミング形式にできます。

SET sort_buffer_size = 10 * 1024 * 1024;

システム変数の @@var_name シンタックスは、別のデータベース システムによっては互換性があります。.

セッション システム変数を変更する場合には、そのセッションが済むまで、または別の値に変更するまで、値の効力を維持します。この変更は別のクライアントには公開しません。

グローバル システム変数を変更すると、サーバが再起動するまで、値を新規接続で使用するものとして記憶します。(グローバル変数の設定を永続的にするには、オプション ファイルで設定する必要があります。) この変更は、そのグローバル変数にアクセスするすべてのクライアントに公開することになりますが、関連しているセッション変数への変更は、変更後に接続するクライアントに対してだけ反映します。グローバル変数の変更は、その時点で接続しているクライアントのセッション変数には反映しません。SET GLOBAL ステートメントを発行するクライアントからのイベントにも反映しません。

SET SESSION とだけ使用できる変数と SET GLOBAL を使用する場合、または GLOBAL (@@global.) をグローバル変数設定時に指定しない場合には、MySQL がエラー メッセージを出し、不正使用を防ぐことができます。

SESSION 変数を GLOBAL 値に、または GLOBAL 値をコンパイルされた MySQL のデフォルト値に設定するには、DEFAULT キーワードを使用します。たとえば、次の二つのステートメントは max_join_size のセッション値をグローバル値に設定するということにおいて、アイデンティカル (同一) です。

SET max_join_size=DEFAULT;
SET @@session.max_join_size=@@global.max_join_size;

すべてのシステム変数において、DEFAULT と設定することはできません。そのような場合には、DEFAULT の使用が、エラーの原因になります。

@@‐ 修飾子のひとつを使用して、プログラミングにおける特定のグローバルまたはセッションのシステム変数値を照会できます。たとえば、SELECT ステートメントの値を次のように読み出すことができます。

SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;

プログラミングでのシステム変数を @@var_name とすると、つまり, @@global. または @@session. を指定しないとき、MySQL はセッション値があれば、それを返しますが、ない場合はグローバル値を返します。これは常にセッション値とする SET @@var_name = value とは異なります。

ノート:システム変数によっては、SET ステートメントで値を ON または 1 に設定すると有効化し、OFF または 0 にすると無効化します。ただし、このような値をコマンドラインまたはオプション ファイルで設定するには、1 または 0 で設定します。ON または OFF での設定はできません。たとえば、コマンドラインにおいて、--delay_key_write=1 は機能しますが、--delay_key_write=ON では機能しません。

システム変数名と値を表示するには、 SHOW VARIABLES ステートメントを使用します。

mysql> SHOW VARIABLES;
+---------------------------------+-----------------------------------+
| Variable_name                   | Value                             |
+---------------------------------+-----------------------------------+
| auto_increment_increment        | 1                                 |
| auto_increment_offset           | 1                                 |
| automatic_sp_privileges         | ON                                |
| back_log                        | 50                                |
| basedir                         | /home/mysql/                      |
| binlog_cache_size               | 32768                             |
| bulk_insert_buffer_size         | 8388608                           |
| character_set_client            | latin1                            |
| character_set_connection        | latin1                            |
| character_set_database          | latin1                            |
| character_set_results           | latin1                            |
| character_set_server            | latin1                            |
| character_set_system            | utf8                              |
| character_sets_dir              | /home/mysql/share/mysql/charsets/ |
| collation_connection            | latin1_swedish_ci                 |
| collation_database              | latin1_swedish_ci                 |
| collation_server                | latin1_swedish_ci                 |
...
| innodb_additional_mem_pool_size | 1048576                           |
| innodb_autoextend_increment     | 8                                 |
| innodb_buffer_pool_awe_mem_mb   | 0                                 |
| innodb_buffer_pool_size         | 8388608                           |
| innodb_checksums                | ON                                |
| innodb_commit_concurrency       | 0                                 |
| innodb_concurrency_tickets      | 500                               |
| innodb_data_file_path           | ibdata1:10M:autoextend            |
| innodb_data_home_dir            |                                   |
...
| version                         | 5.1.6-alpha-log                   |
| version_comment                 | Source distribution               |
| version_compile_machine         | i686                              |
| version_compile_os              | suse-linux                        |
| wait_timeout                    | 28800                             |
+---------------------------------+-----------------------------------+

LIKE 節では、パターンに一致する変数だけを表示します。特定の変数名を得るには、LIKE 節を次のように使用します。

SHOW VARIABLES LIKE 'max_join_size';
SHOW SESSION VARIABLES LIKE 'max_join_size';

パターンに一致する名前を持つ変数のリストを得るには、LIKE 節で、‘%’ のワイルドカード文字を使用します。

SHOW VARIABLES LIKE '%size%';
SHOW GLOBAL VARIABLES LIKE '%size%';

ワイルドカード文字は、一致させるパターン内に入れます。厳密には、‘_’ シングル文字と一致するワイルドカードであるため、‘\_’ でエスケープして、文字通りに一致させます。実際には、これほどの厳密さは要求することはあまりありません。

SHOW VARIABLES では、GLOBAL または SESSION のいずれも指定しない場合、MySQL は SESSION 値を返します。

GLOBAL オンリーの変数を読み取るときではなく、設定するときに GLOBAL キーワードを必要とする理由は、今後の問題を防ぐためです。GLOBAL 変数と同じ名前を持つ SESSION 変数を取り除いた場合、SUPER 権限を持つクライアントが、接続時に SESSION 変数だけでなく、偶発的に GLOBAL 変数も変更してしまう可能性があります。SESSION 変数を GLOBAL と同じ名前で追加する場合、GLOBAL 変数を意図的に変更するクライアントで、クライアント自体の SESSION 変数だけが変更したと見なす可能性があります。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.