Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


MySQL 8.0 リファレンスマニュアル  /  ...  /  InnoDB memcached プラグインのトラブルシューティング

このページは機械翻訳したものです。

15.20.9 InnoDB memcached プラグインのトラブルシューティング

このセクションでは、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 接続にはサーバーコードへのアクセス権がありません。