Devido ao 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 não é segura porque usa uma cláusula LIMIT. Isso não é seguro porque o conjunto de linhas incluído não pode ser previsto.
Eu quero mudar o formato de replicação para MIXED
.
Mas de acordo com o documento MySQL:
Alternar o formato de replicação em tempo de execução não é recomendado quando existem tabelas temporárias, porque as tabelas temporárias são registradas apenas ao usar a replicação baseada em instrução, enquanto na replicação baseada em linha elas não são registradas.
Então, a questão é como posso identificar se existem tabelas temporárias para alternar o formato de log binário com segurança?
Uma vez que um log binário 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 consigo sair da minha língua]) tenha construído esse recurso.
Para jogar totalmente seguro sem reiniciar o mysql, tente o seguinte:
Isso deixará o último binlog no formato 'MIXED'. O penúltimo (penúltimo) binlog existe apenas para encerrar o último binlog que estava no formato anterior.
Todas as sessões existentes antes da primeira
FLUSH LOGS;
começarão a escrever no último log binário assim queUNLOCK TABLES;
for executada.De uma chance !!!
EMBARGO
Dando crédito onde o crédito é devido, minha resposta está realmente pegando carona na resposta de @Jonathan . Eu apenas fecho e abro binlogs em cima disso. Ele recebe +1 por trazer isso primeiro.
ATUALIZAÇÃO 2011-10-12 13:58 EDT
Se você fizer isso com um Master ativo e houver um ou mais Slaves replicando desse Master, você precisa se preocupar com o fato de os logs de retransmissão estarem no novo formato também. Aqui está o que você pode fazer:
No escravo, corra
STOP SLAVE;
No Master execute estes:
No escravo, corra
START SLAVE;
Executando
STOP SLAVE;
eSTART SLAVE;
gira os logs de retransmissão e faz com que as novas entradas sejam replicadas, independentemente do formato que vier. Você pode querer aplicar a mudança binlog_format no escravo também.Para alternar binlog_format em tempo de execução, você pode fazer:
Isso definirá todas as NOVAS sessões para o formato de log binário misto. Todas as sessões existentes serão o que foi definido anteriormente até que terminem.
Você também pode fazer
set session binlog_format = 'MIXED';
manualmente para resolver quaisquer problemas com a sessão especificamente.