Você provavelmente está familiarizado com os dois formatos de log binário , baseado em instrução -- que registra as consultas reais que modificam dados no mestre para que possam ser executadas no escravo e baseado em linha -- que registra imagens anteriores e/ou posteriores dos dados de linha reais que foram alterado pela consulta, para que o escravo possa aplicar diretamente essas alterações aos seus dados... e modo misto, onde o otimizador e o mecanismo de armazenamento determinam qual formato é o formato ideal em uma base de consulta por consulta.
A instrução que você está executando não é segura em princípio porque você está usando
INSERT ... SELECT
em uma tabela com uma coluna de incremento automático. Se uma consulta dessa forma geral foram usados em um STATEMENT
ambiente baseado e o SELECT
não retornasse as linhas na mesma ordem no mestre e no escravo, as linhas poderiam ser selecionadas em uma ordem diferente e, portanto, acabariam com valores de incremento automático diferentes. Na prática, o específico consulta que você está executando é determinístico porque você está inserindo apenas uma linha e especificando explicitamente o valor de incremento automático. Eu suspeito que é a causa de sua confusão. No entanto, parece que você ainda está acionando o aviso porque está fazendo
INSERT ... SELECT
em uma tabela com um incremento automático, e o servidor parece estar aplicando a determinação "insegura" generalizada à consulta por uma questão de princípio, em vez de precisão. Alternando seu
binlog_format
para MIXED
deve fazer com que o aviso desapareça, já que o servidor pode alternar os modos a seu critério... e é muito improvável que tenha efeitos colaterais negativos. Se não fosse o fato de que STATEMENT
sempre foi o padrão (já que inicialmente esse era o único tipo de replicação disponível), suspeito que eles teriam feito MIXED
o padrão há muito tempo... na verdade, se você se familiarizar com os internos dos logs binários, provavelmente estará inclinado a fazer como eu e usar ROW
em quase tudo... tende a ser um log binário muito mais útil para solucionar problemas e evitar problemas, porque os dados de linha "antigos" são registrados em DELETE
e UPDATE
.