次のリストは、InnoDB
memcached プラグイン使用時に発生する潜在的な問題と、解決策または回避策があればそれを示しています。
-
MySQL エラーログにこのエラーが表示された場合、サーバーが起動に失敗することがあります。
failed to set rlimit for open files. Try running as root or requesting smaller maxconns value.
エラーメッセージは実際には memcached デーモンから出されたものです。1 つの解決策は、開くファイルの数について OS での制限を引き上げることです。コマンドはオペレーティングシステムによって異なります。たとえば、いくつかのオペレーティングシステム上で制限を確認して増加させるコマンドを、次に示します。
# Linux $ ulimit -n 1024 ulimit -n 4096 $ ulimit -n 4096 # OS X Lion (10.6) $ ulimit -n 256 ulimit -n 4096 $ ulimit -n 4096
別の解決策は、
-c
オプションを使用して、memcached デーモンで使用可能な同時接続数を削減することで、デフォルトは 1024 です。MySQL 構成ファイル内の MySQL オプションdaemon_memcached_option
を使用して、この memcached オプションをエンコードします。[mysqld] ... loose-daemon_memcached_option='-c 64'
memcached デーモンが
InnoDB
テーブルにデータを格納したり、またはデータを取得したりできない場合に問題をトラブルシューティングするには、MySQL 構成オプションdaemon_memcached_option
を使用して、memcached オプション-vvv
を指定します。MySQL エラーログを調べて、memcached 操作に関係するデバッグ出力がないか検査します。memcached 項目値を保持するように指定されたカラムのデータ型が間違っている場合 (たとえば文字列型の代わりに数値型を指定するなど)、キー/値のペアを格納しようとすると、特定のエラーコードまたはメッセージを出さずに失敗します。
-
daemon_memcached
プラグインで、MySQL Server の開始に関して何らかの問題が発生する場合、MySQL 構成ファイル内の[mysqld]
グループの下に次の行を追加して、トラブルシューティング中にプラグインを無効にします。daemon_memcached=OFF
たとえば、必要なデータベースおよびテーブルをセットアップするための
innodb_memcached_config.sql
構成スクリプトを実行する前にinstall plugin
コマンドを実行した場合、サーバーがクラッシュして開始できないことがあります。または、innodb_memcache.containers
テーブルに正しくないエントリをセットアップした場合、サーバーは開始できないことがあります。MySQL インスタンス用の memcached プラグインを永続的にオフにするには、次のコマンドを発行します。
mysql> uninstall plugin daemon_memcached;
同じマシン上で MySQL の複数インスタンスを実行し、それぞれの memcached デーモンプラグインを有効にした場合、
daemon_memcached_option
構成オプションを使用して、一意の memcached ポートを指定してください。期待するテーブルを SQL ステートメントで検出できなかったり、テーブル内にデータがなかったりする場合でも、memcached API 呼び出しが引き続き動作し、期待するデータを取得できる場合もあります。これが発生するのは、
innodb_memcache.containers
テーブル内にエントリをセットアップしなかったか、GET
またはSET
リクエストにキー@@
を指定して発行することによってそのテーブルに切り換えなかったか、table_id
innodb_memcache.containers
内の既存のエントリに変更を加えたあとで MySQL Server を再起動しなかった場合です。すべてのデータを単一カラム内に格納するtest.demo_test
テーブルをデーモンが使用中であっても、自由形式のストレージメカニズムが柔軟なため、col1|col2|col3
のようなマルチカラム値を格納または取得するためのリクエストは、通常は引き続き機能します。ユーザー独自の
InnoDB
テーブルをInnoDB
memcached と一緒に使用するように定義し、テーブル内のカラムが NOT NULL に定義されている場合、InnoDB
テーブル用のディスクリプタを memcached containers テーブル (innodb_memcached.containers
) に挿入するとき、NOT NULL カラムに値を指定します。マップされたカラムよりも、ディスクリプタのINSERT
ステートメントに含まれる区切られた値の方が少ない場合、入力値のないカラムは NULL に設定されます。NULL 値を NOT NULL カラムに挿入しようとすると、INSERT
は失敗しますが、このことはInnoDB
memcached プラグインを再初期化して変更内容を containers テーブルに適用したあとではじめて明らかになります。-
innodb_memcached.containers
テーブルのcas_column
およびexpire_time_column
を NULL に設定した場合、memcached プラグインをロードしようとすると次のエラーが返されます。InnoDB_Memcached: column 6 in the entry for config table 'containers' in database 'innodb_memcache' has an invalid NULL value.
プラグイン memcached は
cas_column
およびexpire_time_column
カラムでの NULL の使用を拒否します。これらのカラムを使用しない場合は、カラムの値を0
に設定してください。 -
memcached キーと値の長さが増加するにつれ、異なるポイントでサイズと長さの制限が発生します。
キーのサイズが 250 バイトを超える場合、memcached 操作はエラーを返します。これは memcached 内での現在の固定制限値です。
値のサイズが 768 バイトを超えるか、3072 バイトを超えるか、
innodb_page_size
で指定されたサイズの 1/2 を超えた場合、InnoDB
に関する制限が発生することがあります。これらの制限は、値カラムにインデックスを作成し、そのカラムで SQL からレポート生成クエリーを実行しようとするときに主に適用されます。詳細は、セクション14.6.7「InnoDB テーブル上の制限」を参照してください。キーと値を組み合わせた最大サイズは 1M バイトです。
異なるバージョンを持つ MySQL Server 間で構成ファイルを共有している場合、memcached プラグインの最新の構成オプションを使用すると、古い MySQL バージョンで起動エラーが発生する可能性があります。互換性の問題を回避するには、これらのオプション名の
loose
形式を使用し、たとえばdaemon_memcached_option='-c 64'
でなくloose-daemon_memcached_option='-c 64'
と指定します。文字セットの設定を検証するための制約もチェックもありません。memcached は、キーおよび値をバイト形式で格納および取得するため、文字セットの違いは区別されません。ただし、memcached クライアントと MySQL テーブルで、同じ文字セットを使用する必要があります。