10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


5.1.5システム変数の使用

MySQL服务器には,その構成方法を指示する多くのシステム変数が保持されています。セクション5.1.4 "サーバーシステム変数"に,これらの変数の意味が記載されています。各システム変数にはデフォルト値があります。システム変数は,コマンド行のオプションを使用するか,オプションファイルでサーバー起動時に設定できます。これらのほとんどは,ステートメントを使用してサーバーの実行中に動的に変更でき,これによりサーバーを停止して再起動することなくサーバーの動作を変更できます。システム変数値を式によって参照できます。

サーバーには2種類のシステム変数が保持されています。グローバル変数は,サーバーの操作全体に影響します。セッション変数は,個々のクライアント接続の操作に影響します。所定のシステム変数は,グローバル値とセッション値の両方を持つことができます。グローバルシステム変数とセッションシステム変数は,次のように関連しています。

  • サーバーが開始すると,サーバーはすべてのグローバル変数をデフォルト値に初期化します。これらのデフォルトは,コマンド行で指定されるオプションまたはオプションファイルで変更できます。(セクション4.2.3“プログラムオプションの指定”を参照してください.)

  • サーバーは,接続する各クライアントのセッション変数のセットも保持しています。クライアントのセッション変数は,対応するグローバル変数の現在の値を使用して,接続時に初期化されます。たとえば,クライアントのSQLモードはセッションsql_mode値で制御されますが,この値はクライアントがsql_modeのグローバル値に接続するときに初期化されます。

システム変数値は,コマンド行のオプションまたはオプションファイルを使用すると,サーバー起動時にグローバルに設定できます。起動オプションを使用して,数値を取る値を設定するとき,値には1024,10242または10243.の倍数を示す,K,またはGのサフィクス(大文字あるは小文字)を付けて指定でき,それぞれがキロバイト,メガバイト,またはギガバイトの単位を示します。これにより,次のコマンドは16 mバイトのクエリーキャッシュサイズと,1 gバイトの最大パケットサイズでサーバーを開始します。

mysqld——query_cache_size = 16 m max_allowed_packet = 1 g

オプションファイル内で,これらの変数は次のように設定されます。

(mysqld) query_cache_size = 16 m max_allowed_packet = 1 g

サフィクスの大文字,小文字の区別は問わず,16米16米1克1克を同等とします。

ステートメントを使用して,実行時にシステム変数に設定できる最大値を制限するには,サーバー起動時に——最大var_name价值の形式のオプションを使用すると,この最大値を指定できます。たとえば,query_cache_sizeの値が実行時に32mバイトを超えないようにするには,オプション——maximum-query_cache_size = 32米を使用します。

多くのシステム変数は動的であり,ステートメントを利用してサーバーが実行している間に変更できます。リストついては,セクション5.1.5.2 "動的システム変数"を参照してください。を利用してシステム変数を変更するには,任意で修飾子が先行するvar_nameとしてシステム変数を参照してください。

  • 変数がグローバル変数であることを明示的に指示するためには,その名前の前に全球または@@GLOBAL。を付けます。グローバル変数を設定するには超级権限が必要です。

  • 変数がセッション変数であることを明示的に指示するには,その名前の前に会话@@SESSION。,または@@を付けます。セッション変数を設定するのに特別な権限は必要ありませんが,クライアントは自分自身のセッション変数のみ変更でき,別のクライアントの変数は変更できません。

  • 当地的@@LOCAL。会话@@SESSION。のシノニムです。

  • 修飾子が何もなければ,はセッション変数を変更します。

ステートメントは,カンマで区切られた複数の変数割り当てを含むことができます。複数のシステム変数を設定した場合,ステートメント内のいちばん最近の全球または会话修飾子が,指定された修飾子を持たない後続の変数に利用されます。

例:

设置sort_buffer_size = 10000;设置@@LOCAL.sort_buffer_size = 10000;SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;设置@@sort_buffer_size = 1000000;设置@@GLOBAL。sort_buffer_size = 1000000, @@LOCAL.sort_buffer_size = 1000000;

システム変数の@@var_name構文では,ほかの一部のデータベースシステムとの互換性をサポートしています。

セッションシステム変数を変更すると,セッションが終了するまで,または変数を異なる値に変更するまではその値は有効になります。別のクライアントは変更を見ることができません。

グローバルシステム変数を変更すると,その値はサーバーが再起動するまでの間記憶され,新しい接続に利用されます。(グローバルシステム変数を永続的に設定するには、オプションファイルに設定する必要があります。)そのグローバル変数にアクセスするすべてのクライアントが変更を確認できます。ただし変更は、変更後に接続するクライアントの対応するセッション変数にのみ影響を与えます。グローバル変数の変更は、現在接続中のクライアントのセッション変数に影響を与えません (集全球ステートメントを発行するクライアントのセッション変数にも影響を与えません)。

誤用を防ぐために,设置会话とのみ利用できる変数とともに集全球を使用したり,グローバル変数の設定時に全球(または@@GLOBAL。)を指定しなかったりした場合に,MySQLでエラーが生じます。

会话変数を全球値に設定したり,全球値をコンパイル時のMySQLのデフォルト値に設定したりするには,默认的キーワードを使用します。たとえば,次の 2 つのステートメントは、max_join_sizeのセッション値をグローバル値に設定する上で同一です。

设置max_join_size =违约;设置@@SESSION.max_join_size = @@GLOBAL.max_join_size;

すべてのシステム変数を默认的に設定できるわけではありません。そのような場合,默认的を使用するとエラーが発生します。

いずれかの@@修飾子を使用することによって,特定のグローバルシステム変数またはセッションシステム変数の値を式で参照できます。たとえば,次のようにして选择ステートメントで値を取得できます。

选择@@GLOBAL。sql_mode, @@SESSION.sql_mode, @@sql_mode;

@@var_nameのような式でシステム変数を参照するとき(つまり,@@GLOBAL。または@@SESSION。を指定しない場合),MySQLはセッション値が存在すればそれを返し,それ以外の場合はグローバル値を返します。(これは,常にセッション値を参照する设置@@var_name价值とは異なります.)

注記

显示变量によって表示される一部の変数は,选择@@var_name構文で使用できない場合があり,“不明なシステム変数です”と表示されます。その場合の回避方法として,像'这样显示变量var_nameを使用できます。

値乗数を指定するサフィクスは,サーバーの起動時に変数を設定するときに使用できますが,実行時にで値を設定するためには使用できません。一方、を使用すると,式を使用して変数の値を割り当てることができますが,サーバーの起動時に変数を設定するときには使用できません。たとえば,サーバーの起動時に次の1行目は有効ですが2行目は無効です。

shell> mysql——max_allowed_packet=16*1024*1024

逆に,実行時に次の2行目は有効ですが1行目は無効です。

mysql> SET GLOBAL max_allowed_packet=16M;mysql> SET GLOBAL max_allowed_packet=16*1024*1024;
注記

一部のシステム変数は,ステートメントでまたは1克ydF4y2Baに設定することで有効化され,または0に設定することで無効化されます。ただし,このような変数をコマンド行またはオプションファイルで設定するには,1克ydF4y2Baまたは0で設定する必要があり,またはに設定しても機能しません。たとえば,コマンド行において、——delay_key_write = 1は機能しますが,——delay_key_write =は機能しません。

システム変数名と値を表示するには,显示变量ステートメントを使用します。

mysql >显示变量;+---------------------------------+-----------------------------------+ | Variable_name |值  | +---------------------------------+-----------------------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges上| | | 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_size | 8388608 | | innodb_checksums | ON | | innodb_commit_concurrency | 0 | | innodb_concurrencytickets | 500 | | innodb_data_file_path | ibdata1:10:autoextend | | innodb_data_home_dir | |…| |版本5.1.6-alpha-log | | version_comment源分布| | | version_compile_machine | i686 | | version_compile_os | suse linux | | wait_timeout | 28800年  | +---------------------------------+-----------------------------------+

就像句では,ステートメントはパターンに一致する変数のみを表示します。特定の変数名を取得するには,就像句を次のように使用します。

显示变量'max_join_size';显示会话变量如max_join_size;

名前がパターンと一致する変数のリストを取得するには,就像句の中でのワイルドカード文字を使用します。

显示变量'%size%';显示全局变量如'%size%';

ワイルドカード文字は,照合されるパターン内のどの場所でも利用できます。厳密には,_は任意の1文字と一致するワイルドカードであるため,文字どおりに照合するには\ _としてエスケープしてください。実際には,これはほとんど必要ありません。

显示变量全球および会话をいずれも指定しない場合,MySQLは会话値を返します。

全球専用の変数を設定するときに全球キーワードが必要であるのに,それらを取得するときにキーワードが不要である理由は,今後の問題を防ぐためです。全球変数と同じ名前を持つ会话変数を削除した場合,超级権限を持つクライアントが,その接続に対する会话変数だけでなく,誤って全球変数も変更してしまう可能性があります。会话変数を全球変数と同じ名前で追加する場合,クライアントが全球変数を変更しようとしたが,クライアントの会话変数のみが変更されてしまう可能性があります。