minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

MySQLには、様々なシステム変数が存在します。
これらは、my.cnfなどの設定ファイルやMySQLの起動時オプションで
制御することが可能です。

システム変数は、以下のSQL文で参照できます。

SHOW VARIABLES;
SHOW VARIABLES like 'charset%';

また、以下のSQL文で更新できます。

SET GLOBAL sort_buffer_size = 10 * 1024 * 1024;
SET SESSION sort_buffer_size = 10 * 1024 * 1024;

システム変数には、サーバ共通の値と
セッション(接続)共通の値とがあります。
前者を変更すると、その後開かれる全てのセッションに影響があります。
後者を変更すると、現在のセッションでのみ影響があります。

以下、MySQL5.0.16に対応したシステム変数一覧です。

自動インクリメント関連

auto_increment_increment

MySQL5.0.2から導入されました。
自動インクリメントの間隔値を設定します。
デフォルトは1です。

auto_increment_offset

MySQL5.0.2から導入されました。
自動インクリメントのオフセット値を設定します。
デフォルトは1です。

incrementが1、offsetが5のとき

空のテーブルにレコードを3件挿入すると、その結果は
(5,6,7) となります。

incrementが10、offsetが5のとき

空のテーブルにレコードを3件挿入すると、その結果は
(5,10,15) となります。

既に(11,12)という値が入ったテーブルにレコードを3件挿入すると、その結果は
(11,12,15,20,25) となります。

パス関連

basedir

基準パスを指定します。これはMySQLがインストールされているディレクトリを指します。
--basedir オプションによって起動時に設定できます。

datadir

使用するデータベースルートのパスを指定します。
--datadir オプションによって起動時に設定できます。

slave_load_tmpdir

スレーブサーバがレプリケーションデータを読み込むときに
使用されるテンポラリディレクトリのパスを指定します。

tmpdir

テンポラリファイルの作成に使用されるディレクトリのパスを指定します。
MySQL4.1以降では、複数のパスを指定することが可能です。
Unixではコロン(:)、Windows等ではセミコロン(;)を区切り文字にします。
この場合、これらのパスはラウンドロビン方式で利用されます。

MySQLがスレーブサーバとして起動している場合、このパスに
メモリベースのディレクトリや
一部Unix系ディストリビューションでの/tmpのような
OS再起動時に内容が消去されてしまうディレクトリを指定すべきではありません。

スレーブサーバは、サーバ起動時にOSを再起動されたときに
テンポラリテーブルをレプリケーション中だったり
LOAD DATA INFILE 文を処理中だったりした場合、
それに対応するためにいくつかのテンポラリファイルを必要としているからです。
この場合、テンポラリディレクトリにあるファイルがOS再起動によって削除されてしまうと
その後のレプリケーションが失敗します。

MySQL4.0.0以降では、スレーブサーバが使用するテンポラリディレクトリを
slave_load_tmpdir 変数として指定することが出来ます。
これによって、tmpdir にそのようなパスを指定しても
slave_load_tmpdir に適切な(OS再起動時に内容が失われない)パスを
指定しておけば、スレーブサーバはそのパスを使用することになります。

BDB関連

bdb_cache_size

bdb_home

bdb_log_buffer_size

bdb_logdir

bdb_max_lock

bdb_shared_data

bdb_tmpdir

NDB関連

engine_condition_pushdown

一般

concurrent_insert

INSERTとSELECTの同時実行が可能かどうかを返します。
--safe-mode--skip-concurrent-insert オプションを付けてmysqldを起動すると
0に設定されます。
サーバ起動後の変更は出来ません。

0

同時実行を行いません。

1

同時実行を行います(デフォルト)。ただし、常に同時実行が行われるわけではありません。

2

MySQL5.0.6から導入されました。
常に同時実行が行われるようにします。

date_format

まだ実装されていません。

datetime_format

まだ実装されていません。

default_week_format

WEEK() 関数を使用したときのデフォルトフォーマット形式を設定します。

delay_key_write

CREATE TABLE 文で使用される DELAY_KEY_WRITE オプションの扱い方を指定します。

OFF

DELAY_KEY_WRITE オプションは無視されます。

ON

DELAY_KEY_WRITE オプションは有効にしてテーブルを作成します(デフォルト)。

ALL

指定に関わらず、全てのテーブルで DELAY_KEY_WRITE オプションが
付けられたかのようにテーブルを生成します。

このオプションはMyISAMテーブルでのみ有効です。
DELAY_KEY_WRITE が有効になっているテーブルでは
インデックスが更新されたときに即座にキーバッファのフラッシュが行われず
テーブルが閉じられたときに初めてフラッシュされます。

このオプションは大量のインデックスを更新するときなどに
スピードアップを図れますが、不慮の事故により
MySQLがダウンしたときなどに不完全なキーバッファが作成される可能性があります。
その為、MySQLサーバ起動時に --myisam-recover などのオプションを付けて
起動することが勧められています。
キーバッファはレコードの内容から再生成することが可能ですので
これにより完全なキーバッファを常に保証できます。

div_precision_increment

MySQL5.0.6から導入されました。
DIV演算子(/)による演算のときに計算される小数点以下の桁数を指定します。
デフォルトは 4 です。

SELECT 1/7 -> 0.1429
SET div_precision_increment = 12;
SELECT 1/7 -> 0.142857142857

flush

各SQLコマンド実行後、ディスクへの変更をすべてフラッシュします。
--flush オプションによって起動時に設定できます。

flush_time

この値を0以外にすると、
この秒数ごとに全テーブルのリソースを開放して
同期が取れていないデータをディスクに書き込みます。
このオプションは、リソース容量が少ないWindows 95/98/MEなどでの
使用が勧められています。

group_concat_max_len

GROUP_CONCAT() 関数の返却値で可能な最大文字数を指定します。

init_connect

接続を開く度に実行するSQL文を記述します。

init_file

サーバ起動時に実行するSQL文を記述したファイル名を返します。
--init-file オプションによって起動時に設定します。

init_slave

スレーブサーバのSQLスレッドが開始する度に実行するSQL文を記述します。

language

エラーメッセージに使用される言語を指定します。

low_priority_updates

この値を1にすると、
全ての INSERT / UPDATE / DELETE / LOCK TABLE WRITE 文は
対象テーブルに影響する SELECT / LOCK TABLE READ 文が発行されている場合に
その発行が完了するまで待機します。

lower_case_table_names

この値が1の場合、全てのテーブル名は小文字に変換されて格納され
MySQLサーバは大小文字の区別をしません。
Windowsの場合、デフォルトでこの値は1になっています。

max_allowed_packet

最大パケットサイズを指定します。
パケットメッセージバッファは net_buffer_length バイトの容量で初期化されますが
必要に応じてこの値まで拡張することが許されます。
この値のプロトコル制限値は 1GB です。

max_error_count

SHOW ERRORS や SHOW WARNINGS で表示するエラーや警告の最大数を指定します。

max_heap_table_size

MEMORY(HEAP)型テーブルに使用される最大メモリサイズを指定します。
この値は、これらのテーブルの MAX_ROWS を計算するのに使われます。
既存のテーブルには何も影響しません。

max_join_size

この値を超える行数のレコードを読み取ろうとした場合にエラーを発生します。
大量のレコードを抽出するSELECT文を間違って発行してしまった場合など、
この値を設定しておくことによってサーバへの無駄な負荷を軽減させることが出来ます。

クエリの結果がクエリキャッシュ内にあった場合、
結果レコード数のチェックは行われません。
この場合、max_join_size を超えるレコードがクライアントに返される事もあります。
キャッシュからの返却ならば、サーバへの負荷はほとんど発生しません。

max_length_for_sort_data

どのソートアルゴリズムを使うかを決定するために
インデックス値の最大サイズを指定します。

max_seeks_for_key

キー(インデックス)によるレコード検索時の
予想される最大シーク数を制限します。
通常、テーブルスキャンよりもキースキャンの方が速いのですが
レコード数が少ない場合に限ってはテーブルスキャンの方が速い可能性があります。
この値を低く(100程度?)することにより、MySQLはこういった場合でも
(テーブルスキャンではなく)キースキャンを優先するようになります。

max_sort_length

TEXTまたはBLOBカラムをソートするときに使用するバイト数。
先頭から max_sort_length バイトのみが利用され、残りは無視されます。
デフォルトは1024です。

max_tmp_tables

1クライアントが同時に開いておけるテンポラリテーブルの最大数。
このオプションはまだ未実装です。

max_write_lock_count

ロックを必要とする大量のテーブル書き込みがある場合、
MySQLはこの回数の書き込みロックをした後に、読み取りロックを許可します。

myisam_data_pointer_size

MySQL4.1.2から導入されました。
CREATE TABLE 時、MAX_ROWS オプションが指定されなかったときの
テーブル内部ポインタサイズを指定します。
これにより、テーブルの最大物理サイズが決定します。

デフォルト値は6(MySQL5.0.6以前では4)です。
これは最大65536TB(4GB)のテーブルが作成可能なことを意味します。

myisam_max_sort_file_size

REPAIR TABLE 文実行時など、MyISAMテーブルのインデックスが再生成されるときに
使用されるテンポラリファイルの最大サイズをバイト単位で指定します。
ファイルサイズがこの値を超えると、キーキャッシュを利用した再生成が行われ
処理が遅くなります。

myisam_recover_options

--myisam-recover オプション値の値を返します。

myisam_repair_threads

この値が1より大きいとき、
MyISAMテーブルインデックスの修復は
インデックス毎にスレッドが生成されて並列的に行われます。
この動作はまだalpha段階です。

myisam_stats_method

MySQL5.0.14から導入されました。
MyISAMテーブルでインデックス分布の統計を集計するとき、NULL値の扱いを決定します。
次のいずれかの値を取ります。

multi_read_range

MySQL5.0.3から導入されました。
範囲指定のSELECT文が発行されたとき、ストレージエンジンに送る範囲の最大値を指定します。
デフォルト値は256です。
複数の範囲指定をストレージエンジンに送ることは
特定のSELECT文に関して(特にNDBCLUSTER)、
将来劇的なパフォーマンス改善がある可能性があります。

new

MySQL4.0において、MySQL4.1と同様の振舞いをするかどうかを返します。
MySQL5では、この値は常に OFF を返します。

old_passwords

サーバがMySQL4.1以前のパスワード形式を使用するかどうかを返します。
古いサーバにしか対応していないクライアントから接続するためには
必要なオプションですが、なるべくなら新パスワード形式に対応した
クライアントを使いましょう。

one_shot

これは変数ではありません。いくつかの変数に値をセットするときに使われます。

open_files_limit

mysqldがオープンできるファイル数を返します。
これはシステムが実際にオープンできるファイル数を示していて、
サーバ起動時に指定した値とは異なる可能性があります。
MySQLがオープンするファイルの数を変更できない場合、この値は0になります。

optimizer_prune_level

MySQL5.0.1から導入されました。
クエリ最適化方法を制御します。詳細は不明です。

optimizer_search_depth

MySQL5.0.1から導入されました。
クエリ最適化ルーチンが実行する検索の深さの最大値を指定します。
詳細は不明です。

pid_file

mysqldサーバのpidファイルパスを返します。
--pid-file オプションによって起動時に設定できます。

port

mysqldサーバが利用するTCP/IPポート番号を返します。
--port オプションによって起動時に設定できます。

read_only

MySQL5.0.16から導入されました。
レプリケーションスレーブサーバにおいてこの値が ON に設定されると
このサーバではスレーブのSQLスレッド以外からのレコード更新を全て禁止します。
この動作は TEMPORARY テーブルでは機能しません。

relay_log_purge

リレーログが不必要になったときの自動削除フラグを設定します。
デフォルトは 1(enabled) です。

secure_auth

--secure-auth オプションを付けてサーバを起動すると
MySQLサーバは古い形式(4.1以前)のパスワードによる認証を許可しません。
このとき、この値は ON になります。

server_id

--server-id オプションで指定した値を返します。
この値はレプリケーションサーバ(マスタ/スレーブ共)で使用されます。

shared_memory_base_name

Windows特有の値です。
共有メモリに付ける識別子を指定します。
この値は、一つのPCで複数のMySQLサーバを起動するときに使われます。

skip_external_locking

mysqldが外部ロックを使用するとき、この値は OFF になります。

skip_networking

この値をONにすると、サーバはローカル接続のみを許可します。
ローカル接続とは、Unixにおいてはソケットファイルによる接続、
Windowsでは名前パイプもしくは共有メモリを使った接続のことです。

skip_show_database

ONにすると、SHOW DATABASES 権限を持たないユーザが
SHOW DATABASES 文を使うことを禁止します。
OFFにすると、全てのユーザがこの文を発行できますが
その際ユーザが権限を持つデータベースしか表示されません。

slave_net_timeout

マスタ/スレーブ接続からデータを読み込むとき、
読み込みを中断するまでの秒数を指定します。

slave_skip_errors

レプリケーションエラーをスレーブサーバが無視するかどうかを指定します。

slave_transaction_retries

スレーブのSQLスレッドが何らかの原因により
トランザクション実行に失敗した場合、
再試行を行う回数を指定します。
デフォルトは 10 です。0にすると、再試行は全く行われません。

slow_launch_time

スレッドを作成するのにこの値(秒数)以上の時間が掛かった場合、
サーバは Slow_launch_threads ステータス変数をインクリメントします。

socket

Unix環境では、ローカル接続に使用されるソケットファイルパスを表します。
Windows環境では、ローカル接続に使用される名前付きパイプ名を表します。
--socket オプションによって起動時に設定できます。

sql_mode

現在のSQLモードを返します。
この値は動的に変更することが可能です。

sql_slave_skip_counter

スレーブサーバが無視するべきマスタからのイベント数を返します。

storage_engine

table_type のシノニム(別名)です。
デフォルトのテーブルタイプ(ストレージエンジン)を返します。
MySQL5.0 では、こちらの方を使いましょう。

sync_frm

この値を1(デフォルト)にすると
テンポラリ以外のテーブルを作成したときにその .frm ファイルを
ディスクへ同期させます。
これはわずかに処理を遅くしますがクラッシュに対して安全です。
テーブルを頻繁に作成する場面などそう無いはずですから、
デフォルトのままで問題無いはずです。

system_time_zone

MySQLサーバのシステムタイムゾーンを返します。
サーバは起動するとき、基本的にマシンのデフォルトタイムゾーンを継承しますが
サーバを起動したユーザアカウントの環境や
スタートアップスクリプトのオプションによってそれを変更します。

通常、タイムゾーンは TZ 環境変数に設定されています。
mysqld_safeスクリプト実行時に --timezone オプションで指定することも出来ます。

table_cache

キャッシュする最大テーブル数を指定します。
この値を増加させると、mysqldが必要とするファイル記述子の数が増加します。
Opened_tables ステータス変数を確認することで
この値をどの程度の数値にするか決定できます。
もしこのステータス変数値が大きいなら、この値を大きくすべきです。

table_type

デフォルトのテーブルタイプ(ストレージエンジン)を返します。
この値を変更するには、サーバ起動時に
--default-table-type オプションを使用します。
MySQL5以降では代わりに storage_engine を使いましょう。

thread_cache_size

再利用のためにキャッシュ可能なスレッドの数を指定します。
クライアントが接続を閉じたとき、そのスレッド(接続)は
この値を超えない限りキャッシュに格納されます。
以降、スレッド要求は可能な限りこのキャッシュに格納されたスレッドを使い
新たにスレッドを生成するのはキャッシュが空の場合に限られます。

大量の新しい接続を必要とする場合、この値を大きくすることで
パフォーマンスを増加させることが可能です。
(通常、OSが効率の良いスレッド生成を実装していれば
これによってそれほどパフォーマンスが向上することはありません)

ConnectionsThreads_created ステータス変数値を比較することによって
スレッドキャッシュがどの程度効率良く働いているかを調べることができます。

thread_concurrency

Solarisにおいて、この値をONにすることで
mysqldは同時に実行すべきスレッド数に関するヒントをスレッドに提供します。

thread_stack

各スレッドのスタックサイズを返します。
crash-me テストで検出された制限値の多くがこの値に依存しています。
デフォルトでは、通常動作を行うには充分すぎる値が設定されています。

time_format

まだ実装されていません。

time_zone

現在のタイムゾーンを返します。
この値の初期値は 'SYSTEM' ですが
サーバ起動時に --default-time-zone オプションを指定することで
変更することが出来ます。

tmp_table_size

メモリ内に生成されるテンポラリテーブルがこのサイズを超えるとき、
MySQLは自動的にそのテーブルをMyISAMテーブルに変換してディスクに格納します。
もし、たくさんの複雑なGROUP BYクエリを発行する必要があり
メモリに余裕があればこの値を大きくしましょう。

tx_isolation

基準となるトランザクション隔離レベルを返します。
デフォルト値は REPEATABLE-READ です。

updatable_views_with_limit

MySQL5.0.2から導入されました。
基準となるテーブルにプライマリキーを含まないビューを
更新するUPDATE/DELETE文にLIMIT句が含まれていた場合に、
更新の許可するかどうかを制御します。
(GUIツールは時々このようなUPDATE/DELETE文を発行します)

YESまたは1

警告メッセージは表示しますが、このような更新を許可します(デフォルト)。

NOまたは0

エラーメッセージを表示して、このような更新を禁止します。

個人的には、全てのテーブルにプライマリキーを付けるのが
MySQLにおけるテーブル管理の基本だと思うので、是非そうしましょう。

サーバ情報

lower_case_file_system

使用するファイルシステムが大小文字の区別をするかどうかを返します。

named_pipe

Windows専用の値です。
サーバが名前パイプを通じた接続をサポートするかどうかを返します。

protocol_version

MySQLサーバによって使われるクライアント/サーバ間の
プロトコルバージョン番号を返します。

shared_memory

Windows特有の値です。
サーバが共有メモリによる接続を許可するかどうかを返します。

slave_compressed_protocol

マスタとスレーブの両方が圧縮プロトコルをサポートしているかどうかを返します。

version

MySQLサーバのバージョン番号を返します。

version_bdb

BDBストレージエンジンのバージョン番号を返します。

version_comment

MySQLサーバのバージョンコメントを返します。
これは、コンパイル時に --with-comment オプションを付けることで
指定することが出来ます。

version_compile_machine

このMySQLがコンパイル/ビルドされたマシンの種類を返します。

version_compile_os

このMySQLがコンパイル/ビルドされたOSを返します。

INSERT DELAYED関連

delayed_insert_limit

INSERT DELAYED構文により発行されたレコードは
テーブル毎に生成されたキューに格納されていきます。
そして、テーブルが他のスレッドによって使用されていないときを見計らって
キューに溜まったレコードを一気にテーブルに挿入します。
運悪くこのタイミングでSELECT文が発行された場合には
SELECT文はハンドラが全てのレコードを挿入し終るまで待たなければなりません。

これを解消するために、この変数を利用することができます。
ハンドラはこの値の数だけレコードを挿入する度に
待機しているSELECTステーメントが無いかどうか確認します。
もしあれば、残りのレコードをINSERTする前にそのSELECTステートメントを実行します。

delayed_insert_timeout

INSERT DELAYEDハンドラがINSERTステートメントを待機する時間を指定します。

delayed_queue_size

一つのテーブルに対応するハンドラキューに登録できるキューの最大値を指定します。
キューに登録されたレコード数がこの値の数に達すると、
クライアントはそのキューに空きが出来るまで待機します。

max_delayed_threads

max_insert_delayed_threads

INSERT DELAYED 文で作成されるスレッド(ハンドラ)の最大数を指定します。
ハンドラ数が最大に達した後で DELAYED 文を発行すると、
それは DELAYED が付いていないものとして処理されます。

この値を0にすると、mysqldはハンドラを一つも作成しません。
つまり、INSERT DELAYED 文は無効になります。

バッファ関連

bulk_insert_buffer_size

bulk insert で使われるバッファサイズを指定します。
bulk insertとは、INSERT ... SELECTLOAD DATA INFILE などの
一括レコード挿入の事を指します。
ただし、空テーブルにレコード挿入をするときはこのバッファは使われません。

このサイズを0にすると、bulk insert時に最適化が行われなくなります。
デフォルトは 8MB です。

join_buffer_size

フルジョイン(インデックスが使用されない結合)に使われる
バッファサイズを指定します。
もちろん、通常この場合の最良の解決策は新たなインデックスを追加する事です。
それが不可能な場合にのみ、この値で調整しましょう。

key_buffer_size

インデックスブロック用に使用するバッファのサイズ。
インデックスを使う(つまりほとんど全ての)クエリは
この値によってパフォーマンスが大きく変わります。
よって、この値は可能な限り(もちろん稼動システムの許容範囲内で)
大きくすることが推奨されています。

適切なバッファサイズを求めるには、SHOW STATUS コマンドを利用します。
ここで表示された Key_read_requests が、キャッシュからのキーブロック読み取り要求回数です。
Key_reads は、ディスクからのキーブロック読み取り要求回数です。
つまり、Key_reads / Key_read_requests が「キャッシュミスレート」になります。

この値は0.01を下回ることが良いとされています。
このときキャッシュミスレートは1%以下です。
これを上回るようだったら、
インデックスブロックのバッファサイズを大きくすることを検討しましょう。

キャッシュヒット率について

キャッシュヒット率99%と95%のサーバがあった場合、
これらのパフォーマンス比は一体どれくらいになるでしょうか。
答えは「約5倍」です。
なぜなら、「キャッシュに失敗したときが、サーバが仕事している時」だからです。
上の数値を「キャッシュミス率」で表わすと、それぞれ1%と5%になります。
つまり、5 / 1 = 5 がおおよそのパフォーマンス比です。

key_cache_age_threshold

詳細は不明です。

key_cache_block_size

キーキャッシュのブロックサイズをbyte単位で指定します。
デフォルトは 1024 です。

key_cache_division_limit

詳細は不明です。

myisam_sort_buffer_size

REPAIR TABLE 文実行時など、MyISAMテーブルのインデックスがソートされるときに
割り当てられるバッファのサイズを指定します。

net_buffer_length

クエリ間でリセットされる通信バッファのサイズを指定します。
この値は通常大きくするべきではありませんが、
非常に少ないメモリしか無い場合には、クライアントから発行される
SQL文の長さに応じたサイズに指定することができます。
SQL文がこのサイズより大きい場合、通信バッファは自動的に
最大 max_allowed_packet まで拡張します。

preload_buffer_size

インデックスをプレロードするときに割り当てられるバッファサイズ。

query_alloc_block_size

クエリを解析し実行するときに生成されるオブジェクトのために
割り当てられるメモリブロックのサイズを指定します。
もしメモリフラグメントに問題を感じるようなら、
この値を変えることでそれを解決できるかもしれません。

query_prealloc_size

クエリの解析および実行に使われる永続バッファのサイズ。
このバッファはクエリ間で開放されません。
もし頻繁に複雑なクエリを発行するなら、この値を大きくすることで
クエリ実行時のメモリ割り当て回数を減らすことが出来る為
パフォーマンスを改善できるかもしれません。

range_alloc_block_size

範囲最適化を行うときに割り当てられるブロックサイズを指定します。

read_buffer_size

シーケンシャル(全件)スキャンを行うときにスレッドが割り当てる
バッファサイズをバイト単位で指定します。
デフォルトは 131072 です。

read_rnd_buffer_size

ソートされたレコードを読み出すときのバッファサイズを指定します。
この値を大きくすることにより、大量のレコードをORDER BYしたときの
パフォーマンスが改善します。
しかし、このバッファは全てのクライアントに割り当てられるため
グローバル値を大きな値に変更すべきではありません。
代わりに、必要なときだけセッション値を変更するようにしましょう。

sort_buffer_size

それぞれのスレッドがソート時に使用するバッファのサイズを指定します。
この値を大きくすることで、ORDER BY や GROUP BY の速度を上げることが出来ます。
これもグローバル値ではなくセッション値で調節しましょう。

transaction_alloc_block_size

メモリブロックの割り当てサイズをbyte単位で指定します。
このメモリは、コミットするときにバイナリログへ書き込むための
トランザクション内クエリを保存するために使用されます。

transaction_prealloc_size

transaction_alloc_blocks と呼ばれる
永続的バッファのサイズを指定します。
このバッファはクエリ間で開放されません。
この値を大きくすることによって、単一トランザクションに含まれる
全てのクエリをバッファ内に収めることが出来るので
多くの malloc() システムコールが発行されるのを避けることが出来ます。

文字コード関連

MySQL4.1以降、やや複雑になった文字コード関連。
文字化けなどで困ったときにはこれらの値を確認しましょう。

character_set_client

クライアントから送信される文字列の文字コードを指定します。
これが正しく設定されていないと、INSERT文などによるレコード挿入時に
文字化けが発生するでしょう。

character_set_connection

文字コード情報を持っていないリテラルや
数値→文字への変換時に使われる文字コードを指定します。

character_set_database

デフォルト(カレント)データベースの文字コードを返します。
デフォルトデータベースが変化する度に、サーバはこの値を変更します。
デフォルトデータベースが存在しない場合、この値は
character_set_server と同じになります。

character_set_results

クライアントへ返す文字列の文字コードを指定します。
これが正しく設定されていないと、SELECT文などによるレコード取得時に
文字化けが発生するでしょう。

character_set_server

サーバのデフォルト文字コードを指定します。

character_set_system

識別子を書き出すのにサーバが使用する文字コードです。
この値は常に utf8 になります。

character_sets_dir

文字コード情報が格納されたディレクトリ名を指定します。

collation_connection

現在のcollation(照合順序)を指定します。

collation_database

デフォルト(カレント)データベースの collation を返します。
デフォルトデータベースが変化する度に、サーバはこの値を変更します。
デフォルトデータベースが存在しない場合、この値は
collation_server と同じになります。

collation_server

サーバのデフォルト collation を指定します。

接続関連

back_log

最大同時接続要求数。
この値は「最大接続数」とは異なります。
具体的には、TCP/IP接続のリッスンキューのサイズになります。
非常に短い間に大量の接続があるという特殊な場面でのみ
指定する必要があるでしょう。

completion_type

MySQL5.0.3から導入されました。
トランザクション完了種別を指定します。

0

デフォルト値です。COMMIT および ROLLBACK 文は機能しません。

1

COMMIT / ROLLBACK はそれぞれ、
COMMIT AND CHAIN / ROLLBACK AND CHAIN
として機能します。

2

COMMIT / ROLLBACK はそれぞれ、
COMMIT RELEASE / ROLLBACK RELEASE
として機能します。

connect_timeout

接続タイムアウトまでの秒数。
デフォルトは5秒です。

interactive_timeout

接続先から何の要求もないままこの秒数が経過すると、サーバは接続を自動的に切断します。
デフォルトは28800秒、つまり8時間です。

max_connect_errors

あるホストからの接続中断回数がこの値より大きくなると、
mysqldは以後そのホストからの接続をブロックします。
ホストブロックを解除するには、FLUSH HOSTS 構文を使用します。

max_connections

MySQLへの最大同時接続数。デフォルトは100です。
この数値を増加させると、mysqldが必要とするファイル記述子が増加します。

max_user_connections

単一ユーザ(MySQLアカウント)が同時に接続できる最大数を返します。
0にすると、ユーザによる同時接続数の制限はありません。
MySQL5.0.3以前、この値はグローバルスコープのみでしたが
それ以降のMySQLではこの値は読み込み専用のセッションスコープも持っています。
セッション値は通常グローバル値と同じ値ですが、
セッションユーザが0以外のMAX_USER_CONNECTIONS値を持っていた場合には
その値にセットされます。

wait_timeout

反応の無い接続を閉じるまでの秒数を指定します。

net_read_timeout

読み込みを停止するまでに、接続からのデータを待機する秒数を指定します。
クライアントからの読み込み待機時にこの値は利用されます。
クライアントからの書き込み待機時には net_write_timeout が利用されます。

net_retry_count

通信ポートからの読取が中断したときのリトライ回数を指定します。
FreeBSDでは、一つの接続(スレッド)での内部中断が
全てのスレッドに通知されるため、この値を大きくするべきです。

net_write_timeout

書き込みを中断するまでに、ブロックが
接続に書き込まれるのを待つ秒数を指定します。

ログ関連

log

全てのクエリをログ出力する設定になっているかどうかを返します。

log_error

エラーログの出力場所を返します。

log_slave_updates

スレーブサーバがマスタサーバから受け取った更新を
スレーブサーバ自身のバイナリログに記録するかどうかを指定します。
このようにすることで、このスレーブをマスタとしたレプリケーションを
行うことが可能になります。
スレーブ上でバイナリログを有効にしておく必要があります。

log_slow_queries

実行に時間の掛かるSQL(スロークエリ)のログを出力するかどうかを返します。

log_warnings

警告メッセージに追加情報を表示するかどうかを指定します。
これはデフォルトで有効になっています。
この値が1より大きくないと、接続を中断した情報がエラーログに出力されません。

long_query_time

スロークエリの対象となるSQL文の実行秒数を指定します。
デフォルトは10秒です。
スロークエリが発行されると、Slow_queries ステータスがインクリメントされます。

max_relay_log_size

リレーログのローテートファイルサイズを指定します。

バイナリログ関連

binlog_cache_size

トランザクション間でメモリに保持するSQL文の最大数。
デフォルトでは32768です。
これ以上のSQL文を単一トランザクション間に発行する場合、
この値を大きくすることで
バイナリログ出力によるパフォーマンス低下を減少させることが出来ます。

expire_logs_days

バイナリログを自動削除する日数を指定します。
デフォルトは0です。この場合ログファイルは自動削除されません。
ログを削除するタイミングは、MySQLサーバ起動時もしくは
ログをローテートするときに限られるので
この日数が経過したからといって即座にログファイルが削除されるとは限りません。

log_bin

バイナリログ出力する設定になっているかどうかを返します。

log_bin_trust_function_creators

MySQL5.0.16から導入されました。
この値はバイナリログが有効のときに適用されます。
Stored Function(以下関数)を作成できるユーザが、
信用できない関数を作成する可能性があるかどうかを制御します。
関数の内容によっては、
危険な状況を引き起こすようなバイナリログへの書き込みがなされる事があります。

この値を0(デフォルト)にすると、
SUPER および CREATE ROUTINE(ALTER ROUTINE) 権限を持たないユーザは
関数を作成(更新)することを許可されません。
0にすることはまた、関数を
DETERMINISTIC / READS SQL DATA / NO SQL のいずれかの特性を持った
形で作らなければならないという事を意味します。
この値を1にすると、そのような制限は課せられません。

log_bin_trust_routine_creators

MySQL5.0.6から導入されました。
が、MySQL5.0.16では非推奨(deprecated)となっています。
代わりに log_bin_trust_function_creators を使いましょう。

max_binlog_cache_size

バイナリログに使用するキャッシュの最大サイズを指定します。

max_binlog_size

バイナリログのローテートファイルサイズを指定します。
デフォルトは 1GB です。
この値は4096byte〜1GBの範囲で設定する必要があります。

sync_binlog

この値が正数の場合、
MySQLサーバはバイナリログへこの回数書き込む毎にディスクへ同期(FLUSH)します。
オートコミットモードでは、一つのSQL文を発行する度にログ書き込みが行われ
それ以外のモードでは、トランザクション単位で書き込みが行われます。

デフォルト値は0で、この場合ディスクへの明示的な同期は行われません。
同期タイミングはOSに委ねられます。
1にすると最も安全にログ書き込みを行いますが、パフォーマンスは最も悪くなります。

クエリキャッシュ関連

クエリキャッシュに関する変数です。
デフォルトでは、クエリキャッシュは無効になっています。
query_cache_size を指定することにより、クエリキャッシュが有効になります。

query_cache_limit

この値(byte数)より大きい結果はキャッシュしません(デフォルトは1M)。

query_cache_min_res_unit

クエリキャッシュにより割り当てられるブロックの最小サイズをバイト単位で指定します。
デフォルトは 4096(4KB) です。
小さな結果セットのクエリを大量に発行する場合などは、
この値を小さくすることでキャッシュの効果を上げることが出来る可能性があります。

query_cache_size

クエリキャッシュで確保するメモリ(byte数)を指定します。
デフォルトでは0になっていて、この場合クエリキャッシュは無効になります。

query_cache_type

クエリキャッシュを行う条件を指定します。

0 (OFF)

キャッシュを使用しません。

1 (ON)

SQL_NO_CACHE キーワードを使わない全てのSELECT文を対象とします(デフォルト)。

2 (DEMAND)

SQL_CACHE キーワードを指定したSELECT文のみを対象とします。

query_cache_wlock_invalidate

通常、あるクライアントがテーブルの書き込みロックを獲得したとき
他のクライアントは(クエリの結果がキャッシュ内にあれば)
そのテーブルへのクエリ発行を邪魔されません。
この値を1にすることで、
そのテーブルに関する全てのクエリキャッシュを無効にする形で
書き込みロックの獲得を行います。

例えば、大量のレコード更新SQLを発行した場合を考えます。
通常、この間に他のクライアントがSELECT文を発行したら
更新が終わるまでは以前までのクエリキャッシュを利用できてしまいます。
この値を1にすることで、
SELECT文を発行したクライアントは更新が完了するまで
待つことになりますが、その後更新後のレコード結果を取得することが出来ます。

FULLTEXT関連

ft_boolean_syntax

IN BOOLEAN MODE を使用したブーリアン全文検索時にサポートする
演算子一覧を返します。
デフォルトは '+ -><()~*:""&|' です。
この値を変更するときは、次のルールに従う必要があります。

  1. 演算子の機能は、文字列中の位置によって決定されます。

  2. 必ず14文字でなければなりません。

  3. 全ての文字は、アスキー文字以外である必要があります。

  4. 先頭の文字もしくは2つ目の文字のどちらかは、スペースでなければなりません。

  5. 重複する文字を記述してはいけません。

    ただし、11,12個目のクオート文字は重複していても構いません。

  6. 10,13,14個目の文字(デフォルトでは ':' '&' '|')は現在リザーブです。

ft_max_word_len

FULLTEXTインデックスに含まれる単語の最大文字数を指定します。

※ この値を変更したら、REPAIR TABLE tbl_name QUICK

によって全てのFULLTEXTインデックスを更新する必要があります。

ft_min_word_len

FULLTEXTインデックスに含まれる単語の最小文字数を指定します。

※ この値を変更したら、REPAIR TABLE tbl_name QUICK

によって全てのFULLTEXTインデックスを更新する必要があります。

ft_query_expansion_limit

WITH QUERY EXPANSION を使った全文検索で使用される最上位マッチ数。

ft_stopword_file

全文検索時にストップワードとして使用される単語の一覧が格納されたファイル。
このファイルに記述された全ての単語が使用されます。
※ コメントは使用しない方が良いという意味だと思います
デフォルトでは、MySQLサーバにビルトインされたストップワードが使用されます。

サポート関連

have_archive

have_csv

mysqld が ARCHIVE テーブルをサポートしているかどうかを返します。

have_bdb

mysqld が BDB テーブルをサポートしているかどうかを返します。
--skip-bdb オプションを付けていると、この値は DISABLED を返します。

have_blackhole_engine

mysqld が BLACKHOLE テーブルをサポートしているかどうかを返します。

have_compress

mysqld が zlib圧縮をサポートしているかどうかを返します。
この値が NO のとき、COMPRESS() と UNCOMPRESS() 関数は使用できません。

have_crypt

mysqld が crypt() システムコールをサポートしているかどうかを返します。
この値が NO のとき、CRYPT() 関数は使用できません。

have_example_engine

mysqld が EXAMPLE テーブルをサポートしているかどうかを返します。

have_federated_engine

MySQL5.0.3から導入されました。
mysqld が FEDERATED テーブルをサポートしているかどうかを返します。

have_geometry

MySQLサーバが spatial データ型をサポートしているかどうかを返します。

have_innodb

mysqld が InnoDB テーブルをサポートしているかどうかを返します。
--skip-innodb オプションを付けていると、この値は DISABLED を返します。

have_isam

mysqld が ISAM テーブルをサポートしているかどうかを返します。
MySQL5ではもうこのテーブルをサポートしていません。
よって、常に NO を返します。

have_ndbcluster

mysqld が NDB Cluster テーブルをサポートしているかどうかを返します。
--skip-ndbcluster オプションを付けていると、この値は DISABLED を返します。

have_openssl

mysqld が SSL をサポートしているかどうかを返します。

have_query_cache

mysqld がクエリキャッシュをサポートしているかどうかを返します。

have_raid

mysqld がRAIDオプションをサポートしているかどうかを返します。

have_rtree_keys

RTREE インデックスが利用できるかどうかを返します。

have_symlink

シンボリックリンクをサポートしているかどうかを返します。
DATA DIRECTORY と INDEX DIRECTORY テーブルオプションのサポートには
これが必要になります。

large_file_support

ラージファイルをサポートしているかどうかを返します。

large_pages

MySQL5.0.3から導入されました。
ラージページをサポートしているかどうかを返します。

license

このサーバのライセンス種別を返します。

local_infile

LOAD DATA INFILE 文で、LOCAL の使用を許可しているかどうかを返します。

locked_in_memory

--memlock によるメモリロックが有効かどうかを返します。