Dans une configuration de répartition lecture/écriture, le proxy distribue automatiquement les requêtes entre les instances primaire et secondaire. Les hints vous permettent de remplacer ce routage pour des requêtes spécifiques : diriger une requête unique vers l'instance primaire pour obtenir des résultats à jour, décharger une lecture lourde vers une instance secondaire ou cibler une instance nommée pour des commandes de diagnostic.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Un endpoint de routage avec répartition lecture/écriture configuré pour votre instance RDS. Pour plus de détails, consultez la rubrique Qu'est-ce que la répartition lecture/écriture ?
Exigence relative au CLI MySQL
Lors de la connexion avec le CLI MySQL, transmettez l'option -c pour empêcher le client de supprimer les hints basés sur des commentaires :
mysql -c -h <endpoint> -u <username> -p
Sans l'option -c, le CLI MySQL supprime tous les hints de commentaire SQL avant qu'ils n'atteignent le proxy.
Référence de syntaxe des hints
Tous les hints utilisent le format standard de commentaire de bloc SQL (/* ... */) et doivent apparaître immédiatement avant l'instruction cible.
Les hints contournent les contraintes de cohérence et de transaction et ont la priorité de routage la plus élevée. Évaluez vos charges de travail avant d'utiliser des hints. Les hints ne peuvent pas inclure d'instructions qui reconfigurent les variables d'environnement ; par exemple, /*FORCE_SLAVE*/ SET NAMES utf8; n'est pas autorisé et peut provoquer des erreurs.
Routage vers l'instance primaire : /*FORCE_MASTER*/
Force l'exécution de la requête sur l'instance RDS primaire. Utilisez cette option lorsque vous avez besoin de données à jour immédiatement après une écriture, notamment si le délai de réplication sur les instances secondaires risque de renvoyer des résultats obsolètes.
/*FORCE_MASTER*/ SELECT * FROM orders WHERE order_id = 12345;
Routage vers une instance secondaire : /*FORCE_SLAVE*/
Force l'exécution de la requête sur une instance RDS secondaire. Cette méthode permet de décharger les requêtes de lecture intensives de l'instance primaire.
/*FORCE_SLAVE*/ SELECT COUNT(*) FROM logs WHERE created_at > '2026-01-01';
Routage vers une instance spécifique : /*force_node='<instance-id>'*/
Achemine une seule requête vers l'instance que vous spécifiez par son ID d'instance. Si l'instance n'est pas disponible, la requête échoue avec le message suivant :
force hint server node is not found, please check.
L'exemple suivant exécute SHOW PROCESSLIST uniquement sur l'instance rr-bpxxxxx :
/*force_node='rr-bpxxxxx'*/ SHOW PROCESSLIST;
Routage persistant : /*force_proxy_internal*/
Définit une substitution persistante qui achemine toutes les requêtes suivantes vers une instance spécifiée.
/*force_proxy_internal*/SET force_node = 'rr-bpxxxxx';
Après l'exécution de cette instruction, chaque requête suivante de la session est envoyée à rr-bpxxxxx. Si cette instance n'est pas disponible, les requêtes suivantes échouent avec le message suivant :
set force node 'rr-bpxxxxx' is not found, please check.
Évitez d'utiliser /*force_proxy_internal*/ dans la plupart des cas. Cette option achemine tout le trafic suivant vers une seule instance, désactivant ainsi la répartition lecture/écriture. Si vous définissez le poids d'une instance en lecture seule sur 0, puis forcez le routage vers celle-ci à l'aide d'un hint, le client est déconnecté de cette instance.