Gostaria de criar uma tabela no master, cujos dados não sejam replicados para o slave.
Estou inserindo temporariamente muitos milhões de linhas nesta tabela como parte de um trabalho em lote; os dados nesta tabela podem ser recriados sob demanda, portanto, não precisam ser replicados no escravo (mais lento).
Eu não quero usar TEMPORARY
tabelas, pois idealmente quero manter a estrutura da tabela no banco de dados (no escravo também, para que eu possa usá-la de forma confiável para recuperação de backup) e, acima de tudo, quero poder recuperar do estado atual se a tarefa for encerrada por qualquer motivo, portanto, os dados da tabela precisam persistir no mestre se a tarefa for encerrada.
Idealmente, eu gostaria de poder controlar a replicabilidade da tabela a partir da CREATE
instrução, para poder controlar isso do meu fluxo de trabalho SQL normal.
Isso é possível? Caso contrário, alternativas próximas são bem-vindas.
Crie um banco de dados. Adicione
binlog_ignore_database
o mestre para evitar enviar os dados (em vez de enviá-los e depois jogar no escravo, como comreplicate_ignore_*
)Coloque todas as suas tabelas que não serão replicadas nesse banco de dados. Referencie-os via
dbname.tblname
.Esteja ciente de como a replicação filtra: No SBR,
USE
controla o que verificar para fazer/ignorar filtros.Há um truque que fiz com bastante sucesso:
INSERT
coisas desse banco de dados em tabelas replicadas (em outros bancos de dados). -- Esta é a única etapa que foi replicada.O efeito líquido foi fazer muitas coisas de ETL apenas no Master, mas ainda obter os resultados finais no Slave.
Se você está tentando ignorar o lote completo, você pode tentar com:
Tenha em mente que o usuário deve ter privilégio SUPER. Isso impediria que a consulta fosse gravada no log binário; então não vai replicar.