このセクションでは、InnoDB
memcached プラグインの使用時に発生する可能性のある問題について説明します。
-
MySQL エラーログで次のエラーが発生した場合、サーバーの起動に失敗する可能性があります:
開いているファイルの rlimit を設定する failed。 root として実行するか、小さい maxconns value. をリクエストしてください
エラーメッセージは、memcached デーモンからのものです。 1 つの解決策は、開くファイルの数について OS での制限を引き上げることです。 オープンファイル制限をチェックして増やすためのコマンドは、オペレーティングシステムによって異なります。 この例は、Linux および macOS のコマンドを示しています:
# Linux shell> ulimit -n 1024 shell> ulimit -n 4096 shell> ulimit -n 4096 # macOS shell> ulimit -n 256 shell> ulimit -n 4096 shell> ulimit -n 4096
もう 1 つの解決策は、memcached デーモンで許可される同時接続の数を減らすことです。 これを行うには、MySQL 構成ファイルの
daemon_memcached_option
構成パラメータで-c
memcached オプションをエンコードします。-c
オプションのデフォルト値は 1024 です。[mysqld] ... loose-daemon_memcached_option='-c 64'
-
memcached デーモンが
InnoDB
テーブルデータを格納または取得できない問題をトラブルシューティングするには、MySQL 構成ファイルのdaemon_memcached_option
構成パラメータで-vvv
memcached オプションをエンコードします。 MySQL エラーログを調べて、memcached 操作に関係するデバッグ出力がないか検査します。[mysqld] ... loose-daemon_memcached_option='-vvv'
memcached 値を保持するために指定されたカラムのデータ型が間違っている場合 (文字列型ではなく数値型など)、キーと値のペアを格納しようとすると失敗し、特定のエラーコードまたはメッセージが表示されません。
-
daemon_memcached
プラグインによって MySQL サーバーの起動の問題が発生した場合は、MySQL 構成ファイルの[mysqld]
グループの下に次の行を追加することで、トラブルシューティング中にdaemon_memcached
プラグインを一時的に無効にできます:daemon_memcached=OFF
たとえば、
innodb_memcached_config.sql
構成スクリプトを実行して必要なデータベースとテーブルを設定する前にINSTALL PLUGIN
ステートメントを実行すると、サーバーが予期せず終了し、起動に失敗することがあります。innodb_memcache.containers
テーブルのエントリを誤って構成すると、サーバーの起動に失敗する可能性もあります。MySQL インスタンスの memcached プラグインをアンインストールするには、次のステートメントを発行します:
mysql> UNINSTALL PLUGIN daemon_memcached;
各インスタンスで
daemon_memcached
プラグインが有効になっている同じマシンで MySQL の複数のインスタンスを実行する場合は、daemon_memcached_option
構成パラメータを使用して、daemon_memcached
プラグインごとに一意の memcached ポートを指定します。SQL ステートメントで
InnoDB
テーブルが見つからない場合、またはテーブルにデータが見つからず、memcached API コールで必要なデータが取得される場合、innodb_memcache.containers
テーブルのInnoDB
テーブルのエントリが欠落しているか、@@
テーブル記法を使用してtable_id
get
またはset
リクエストを発行して正しいInnoDB
テーブルに切り替えられていない可能性があります。 この問題は、後で MySQL サーバーを再起動せずにinnodb_memcache.containers
テーブルの既存のエントリを変更した場合にも発生する可能性があります。 フリーフォーム記憶域メカニズムは柔軟性があるため、デーモンが単一のカラムに値を格納するtest.demo_test
テーブルを使用している場合でも、col1|col2|col3
などの複数カラム値を格納または取得するリクエストは引き続き機能します。daemon_memcached
プラグインで使用する独自のInnoDB
テーブルを定義し、テーブルのカラムがNOT NULL
として定義されている場合は、innodb_memcache.containers
テーブルにテーブルのレコードを挿入するときにNOT NULL
カラムに値が指定されていることを確認します。innodb_memcache.containers
レコードのINSERT
ステートメントに含まれるデリミタ付きの値が、マップされたカラムより少ない場合、未入力のカラムはNULL
に設定されます。NULL
値をNOT NULL
カラムに挿入しようとするとINSERT
が失敗し、daemon_memcached
プラグインを再初期化してinnodb_memcache.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 内での現在の固定制限値です。
InnoDB
テーブルの制限は、サイズが 768 バイト、サイズが 3072 バイトまたはinnodb_page_size
値の半分を超える場合に発生することがあります。 これらの制限は主に、SQL を使用して値カラムにインデックスを作成し、そのカラムに対してレポート生成クエリーを実行する場合に適用されます。 詳細は、セクション15.22「InnoDB の制限」 を参照してください。キーと値の組合せの最大サイズは 1 MB です。
異なるバージョンの MySQL サーバー間で構成ファイルを共有する場合、
daemon_memcached
プラグインの最新の構成オプションを使用すると、古い MySQL バージョンで起動エラーが発生する可能性があります。 互換性の問題を回避するには、オプション名とともにloose
接頭辞を使用します。 たとえば、daemon_memcached_option='-c 64'
のかわりにloose-daemon_memcached_option='-c 64'
を使用します。文字セットの設定を検証するための制約もチェックもありません。memcached は、キーおよび値をバイト形式で格納および取得するため、文字セットの違いは区別されません。 ただし、memcached クライアントと MySQL テーブルで、同じ文字セットを使用する必要があります。
memcached 接続は、インデックス付けされた仮想カラムを含むテーブルへのアクセスをブロックされます。 インデックス付き仮想カラムにアクセスするにはサーバーへのコールバックが必要ですが、memcached 接続にはサーバーコードへのアクセス権がありません。