Em um cenário de read/write splitting, o proxy distribui automaticamente as consultas entre as instâncias primária e secundária. Os hints permitem substituir esse roteamento para consultas específicas: direcionar uma única consulta à instância primária para obter resultados atualizados, descarregar leituras pesadas para uma instância secundária ou apontar comandos de diagnóstico para uma instância específica por nome.
Pré-requisitos
Antes de começar, verifique se você tem:
Um endpoint de roteamento de read/write splitting configurado para sua instância ApsaraDB RDS. Para mais detalhes, consulte O que é read/write splitting?
Requisito da CLI do MySQL
Ao se conectar com a CLI do MySQL, use o parâmetro -c para impedir que o cliente remova os hints baseados em comentários:
mysql -c -h <endpoint> -u <username> -p
Sem o parâmetro -c, a CLI do MySQL remove todos os hints de comentário SQL antes que eles cheguem ao proxy.
Referência de sintaxe de hints
Todos os hints usam o formato padrão de comentário de bloco SQL (/* ... */) e devem aparecer imediatamente antes da instrução de destino.
Os hints ignoram restrições de consistência e transação e têm a maior prioridade de roteamento. Avalie suas cargas de trabalho antes de usar hints. Eles não podem incluir instruções que reconfigurem variáveis de ambiente. Por exemplo, /*FORCE_SLAVE*/ SET NAMES utf8; não é permitido e pode causar erros.
Roteamento para a primária: /*FORCE_MASTER*/
Força o envio da consulta para a instância ApsaraDB RDS primária. Use esta opção quando precisar de dados atualizados logo após uma escrita, como em situações em que o atraso de replicação nas instâncias secundárias retornaria resultados desatualizados.
/*FORCE_MASTER*/ SELECT * FROM orders WHERE order_id = 12345;
Roteamento para a secundária: /*FORCE_SLAVE*/
Direciona a consulta para uma instância ApsaraDB RDS secundária. Use este método para aliviar a carga de consultas intensivas em leitura da instância primária.
/*FORCE_SLAVE*/ SELECT COUNT(*) FROM logs WHERE created_at > '2026-01-01';
Roteamento para uma instância específica: /*force_node='<instance-id>'*/
Encaminha uma única consulta para a instância especificada pelo ID. Se a instância estiver indisponível, a consulta falhará com a mensagem:
force hint server node is not found, please check.
O exemplo abaixo executa SHOW PROCESSLIST exclusivamente na instância rr-bpxxxxx:
/*force_node='rr-bpxxxxx'*/ SHOW PROCESSLIST;
Roteamento persistente: /*force_proxy_internal*/
Defina uma substituição persistente que encaminha todas as consultas subsequentes para uma instância específica.
/*force_proxy_internal*/SET force_node = 'rr-bpxxxxx';
Após executar essa instrução, toda consulta subsequente na sessão será enviada para rr-bpxxxxx. Se essa instância estiver indisponível, as consultas seguintes falharão com a mensagem:
set force node 'rr-bpxxxxx' is not found, please check.
Evite /*force_proxy_internal*/ na maioria dos casos. Esse recurso direciona todo o tráfego seguinte para uma única instância e desativa o read/write splitting. Se você definir o peso de uma instância somente leitura como 0 e depois forçar o roteamento para ela com qualquer hint, o cliente será desconectado dessa instância.