En raison de l'avertissement suivant dans mysqld.log
:
[Avertissement] Instruction non sécurisée écrite dans le journal binaire en utilisant le format d'instruction depuis BINLOG_FORMAT = STATEMENT. L'instruction n'est pas sûre car elle utilise une clause LIMIT. Cela n'est pas sûr car l'ensemble des lignes incluses ne peut pas être prévu.
Je souhaite basculer le format de réplication sur MIXED
.
Mais selon le document MySQL:
La commutation du format de réplication au moment de l'exécution n'est pas recommandée lorsqu'il existe des tables temporaires, car les tables temporaires ne sont enregistrées que lors de l'utilisation de la réplication basée sur des instructions, alors qu'avec la réplication basée sur des lignes, elles ne sont pas enregistrées.
Ainsi, la question est de savoir comment puis-je identifier s'il existe des tables temporaires pour changer le format du journal binaire en toute sécurité?
la source
Réponses:
Puisqu'un binlog aura un format spécifique au moment où vous le ferez, vous pouvez décider de ne pas jouer avec les deux formats ensemble bien que MySQL (eh Oracle [ne peut toujours pas rouler sur ma langue]) a construit cette fonctionnalité.
Pour jouer en toute sécurité sans redémarrage de mysql, essayez ce qui suit:
Cela laissera le dernier binlog au format «MIXTE». L'avant-dernier (avant-dernier) binlog existe simplement pour fermer le dernier binlog qui était dans le format précédent.
Toutes les sessions existantes avant la première
FLUSH LOGS;
commenceront à écrire dans le dernier binlog une foisUNLOCK TABLES;
exécuté.Essaie !!!
CAVEAT
Donner du crédit là où le crédit est dû, ma réponse est vraiment superposée à la réponse de @ Jonathan . Je ferme et j'ouvre les binlogs en plus. Il obtient un +1 pour avoir mis cela en évidence en premier.
MISE À JOUR 2011-10-12 13:58 EDT
Si vous faites cela à un maître actif et qu'il y a un ou plusieurs esclaves qui se répliquent à partir de ce maître, vous devez également vous soucier du fait que les journaux de relais sont au nouveau format. Voici ce que vous pouvez faire:
Sur l'esclave, exécutez
STOP SLAVE;
Sur le Master, exécutez ceux-ci:
Sur l'esclave, exécutez
START SLAVE;
L'exécution
STOP SLAVE;
et laSTART SLAVE;
rotation des journaux de relais entraînent la réplication des nouvelles entrées, quel que soit le format. Vous pouvez également appliquer la modification binlog_format à l'esclave.la source
Pour basculer binlog_format au moment de l'exécution, vous pouvez faire:
Cela définira toutes les NOUVELLES sessions au format binlog mixte. Toutes les sessions existantes seront ce qui a été défini précédemment jusqu'à leur fin.
Vous pouvez également le faire
set session binlog_format = 'MIXED';
manuellement pour résoudre tout problème spécifique à la session.la source