Por causa do seguinte aviso em mysqld.log
:
[Aviso] Instrução não segura gravada no log binário usando o formato de instrução desde BINLOG_FORMAT = STATEMENT. A instrução é insegura porque usa uma cláusula LIMIT. Isso não é seguro porque o conjunto de linhas incluídas não pode ser previsto.
Eu quero mudar o formato de replicação para MIXED
.
Mas de acordo com o documento MySQL:
Não é recomendável alternar o formato de replicação em tempo de execução quando existirem tabelas temporárias, porque as tabelas temporárias são registradas apenas ao usar a replicação baseada em instruções, enquanto que na replicação baseada em linhas elas não são registradas.
Portanto, a questão é como identificar se existem tabelas temporárias para alterar o formato de log binário com segurança?
fonte
Respostas:
Como um binlog terá um formato específico no momento em que você fizer isso, você pode decidir não jogar com os dois formatos juntos, embora o MySQL (eh Oracle [ainda não consiga sair da minha língua]) tenha construído esse recurso.
Para jogá-lo totalmente seguro sem uma reinicialização do mysql, tente o seguinte:
Isso deixará o último binlog no formato 'MIXED'. O penúltimo (próximo ao último) binlog existe apenas para encerrar o último binlog que estava no formato anterior.
Todas as sessões existentes anteriores à primeira
FLUSH LOGS;
começarão a ser gravadas no último binlog após aUNLOCK TABLES;
execução.De uma chance !!!
EMBARGO
Dando crédito onde o crédito é devido, minha resposta está realmente pegando carona com a resposta de @ Jonathan . Apenas fecho e abro binlogs em cima disso. Ele recebe um +1 por trazer isso à tona primeiro.
UPDATE 2011-10-12 13:58 EDT
Se você fizer isso com um mestre ativo e houver um ou mais escravos replicando a partir desse mestre, será necessário se preocupar com o fato de os logs de retransmissão também estarem no novo formato. Aqui está o que você pode fazer:
No Escravo, corra
STOP SLAVE;
No Master, execute estes:
No Escravo, corra
START SLAVE;
A execução
STOP SLAVE;
eSTART SLAVE;
gira os logs de retransmissão e faz com que as novas entradas sejam replicadas, seja qual for o formato. Você também pode aplicar a alteração binlog_format no escravo.fonte
Para alternar binlog_format em tempo de execução, você pode:
Isso definirá todas as NOVAS sessões para serem no formato binlog misto. Todas as sessões existentes serão definidas anteriormente até o final.
Você também pode fazer
set session binlog_format = 'MIXED';
manualmente para resolver qualquer problema com a sessão especificamente.fonte