Pergunta

Atualmente temos um banco de dados onde o formato de log bin STATEMENT funciona bem.
Agora estamos adicionando uma nova tabela com um valor de incremento automático.
Esta coluna de incremento automático não tem propósito para a lógica de negócios.
Adicionamos isso como parte de nossa chave primária.
Aqui offer_expiry_time é a primeira parte da chave primária, pois temos todas as nossas consultas como consultas de intervalo com base no intervalo de tempo de expiração.

Suponha que nossa tabela seja semelhante a esta:

CREATE TABLE offer_expiry_info  
    offer_expiry_time BIGINT UNSIGNED NOT NULL null,  
    purchase_id INT UNSIGNED auto_increment,
    PRIMARY KEY (offer_expiry_time, purchase_id),
    KEY idx_purchase_id (purchase_id)
)ENGINE = INNOBB;

Agora nossas preocupações são:

  1. O formato de log bin de nível STATEMENT funcionará para esta tabela?(até mesmo nós aceitamos valores diferentes para colunas de incremento automático nas replicações).Basicamente, o nível STATEMENT funcionará?

  2. Se funcionar, quais são os problemas que podem ocorrer ao abrir uma máquina de banco de dados com falha?

  3. Se o modo STATEMENT não funcionar, podemos usar o modo de replicação específico (MIXED) apenas para esta tabela?O restante das tabelas no mesmo banco de dados pode ter o modo STATEMENT?

  4. Esta pode ser uma pergunta muito boba, pois não sei como o MySQL lida com a replicação.É possível especificar o modo de replicação com base no tipo de consulta?(Para consultas de inserção, faça a replicação no nível ROW e para consultas DELETE, execute a replicação no nível STATEMENT)

    A questão 4 é porque realizamos a exclusão com base na exclusão baseada em intervalo e, portanto, teremos um desempenho melhor se pudermos ter replicação STATEMENT para consultas de exclusão.

DELETE FROM order_expiry_info WHERE offer_expiry_time "LESS THAN" SOME TIME

Como fazemos inserções em lote, a replicação no nível STATEMENT nos ajudará muito.
É possível que as tabelas com colunas de incremento automático tenham formato de log bin de nível STATEMENT?

Editado] Também temos outro problema com o nível de isolamento da transação.
ERRO:"Obtendo o erro O log binário não é possível.Mensagem:Nível de transação «REA» D-UNCOMMITTED' no InnoDB não é seguro para o modo binlog 'STATEMENT'"

Alguma sugestão seria muito útil?

Foi útil?

Solução

Sim, esses cenários funcionarão bem com os binlogs de instruções.

Se você puder acessar os logs, verá que determinados valores são registrados antes de cada instrução para garantir que itens como carimbo de data/hora e valores de incremento automático sejam preservados adequadamente.

Tenho usado a replicação baseada em instruções há anos sem problemas em nenhuma dessas áreas.Eu sugeriria continuar com isso e considerar apenas a replicação baseada em linhas ou mista se surgir uma situação específica de desempenho que possa precisar deles.

Observe que existem certos tipos de uso que não são seguros com a replicação baseada em instruções, mas o uso simples de incremento automático não é um deles.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top