このトピックでは、読み取り /書き込みモードが読み書き (自動読み書き分離) に設定されているクラスターエンドポイントにヒントを使用する方法について説明します。
制限事項
ヒントは、クラスターエンドポイントに対して読み取り /書き込みモードを読み書き (自動読み書き分離) に設定した後にのみ使用できます。 クラスターエンドポイントまたはプライマリエンドポイントの読み取り /書き込みモードが読み取り専用に設定されている場合、ヒントはサポートされません。 クラスターエンドポイントの読み取り /書き込みモードの詳細については、クラスターエンドポイントとプライマリエンドポイントの「クラスターエンドポイントの読み取り /書き込みモード」をご参照ください。
注意事項
ヒントは、最も高いルーティング優先度を有し、一貫性レベルまたはトランザクション分割によって制限されない。 ヒントを使用する前に、評価を実行します。
Usage
SQL文に
/* FORCE_MASTER */
または/* FORCE_SLAVE */
を追加して、SQL文のルーティング方向を強制的に指定できます。たとえば、
SELECT * FROM test
ステートメントが読み取り専用ノードにルーティングされているとします。 SQL文が/* FORCE_MASTER */ SELECT * FROM test
に変更された場合、SQL文はプライマリノードにルーティングされます。/* FORCE_MASTER */
は、読み書きモードが読み書き分離に設定されているエンドポイントでのみ有効です。 読み取り /書き込みモードが読み取り専用に設定されているエンドポイントのSQL文に/* FORCE_MASTER */
が追加された場合、SQL文はプライマリノードにルーティングされません。
SQL文に
/* force_node='<ノードID>' */
を追加すると、SQL文を実行するノードを強制的に指定できます。たとえば、
/* force_node='pi-bpxxxxxxxx' */ show processlist
は、show processlist
ステートメントがpi-bpxxxxxxxxxx
という名前のノードで実行されることを指定します。 ノードが利用できない場合は、エラーメッセージ強制ヒントサーバノードが見つかりません。確認してください。 が返されます。SQL文に
/* force_proxy_internal */set force_node = '<Node ID>'
を追加すると、すべてのSQL文を実行するノードを強制的に指定できます。たとえば、
/* force_proxy_internal */set force_node = 'pi-bpxxxxxxxx'
ステートメントを実行すると、後続のすべてのSQLステートメントはpi-bpxxxxxxxxxx
という名前のノードにルーティングされます。 ノードに障害が発生した場合、set forceノード 'rr-bpxxxxx' が見つかりません。確認してください。
エラーメッセージが返されます。行ストアノードと列ストアノード間のリクエストの自動配布を有効にする場合は、HINT
/* FORCE_IMIC_NODES */
を追加して、リクエストを列ストアノードに強制的にルーティングできます。 詳細については、「行ストアおよび列ストアノード間のリクエストの自動配布」をご参照ください。説明ヒントは大文字と小文字を区別しないため、SQLステートメントの先頭に配置する必要があります。
MySQLの公式コマンドラインでヒントを含む上記のSQL文を実行する場合は、SQL文に -cパラメーターを追加します。 それ以外の場合、MySQLの公式コマンドラインがヒントを除外するため、ヒントは無効になります。 詳細については、「mysqlクライアントオプション」をご参照ください。
SQL文では
/* force_proxy_internal */
を使用しないことを推奨します。 それ以外の場合、後続のすべてのSQL文は指定されたノードにルーティングされ、読み書き分離機能は無効になります。ヒントには、環境変数を変更するSQLステートメントを含めることはできません。 たとえば、
/* FORCE_SLAVE */ set names utf8;
を使用すると、エラーが発生する可能性があります。