Mysql
 sql >> Base de données >  >> RDS >> Mysql

Code d'avertissement MySQL 1592 Instruction non sécurisée écrite dans le journal binaire à l'aide du format d'instruction

Vous êtes probablement familier avec les deux formats de journalisation binaire , basé sur les instructions - qui enregistre les requêtes réelles qui modifient les données sur le maître afin qu'elles puissent être exécutées sur l'esclave, et basé sur les lignes - qui enregistre les images avant et/ou après les données de ligne réelles qui ont été modifié par la requête, afin que l'esclave puisse directement appliquer ces modifications à ses données... et en mode mixte, où l'optimiseur et le moteur de stockage déterminent quel format est le format optimal requête par requête.

L'instruction que vous exécutez n'est pas sûre en principe parce que vous utilisez INSERT ... SELECT dans un tableau avec une colonne auto-incrémentée. Si une requête de cette forme générale ont été utilisés dans un STATEMENT - et l'environnement SELECT n'a pas renvoyé les lignes dans le même ordre sur le maître et l'esclave, les lignes peuvent être sélectionnées dans un ordre différent et se retrouver ainsi avec des valeurs d'auto-incrémentation différentes.

En pratique, le spécifique la requête que vous exécutez est déterministe car vous n'insérez qu'une seule ligne et vous spécifiez explicitement la valeur d'auto-incrémentation. Je soupçonne que c'est la cause de votre confusion. Cependant, il semble que vous déclenchez toujours l'avertissement car vous faites INSERT ... SELECT dans une table avec une auto-incrémentation, et le serveur semble appliquer la détermination "non sécurisée" généralisée à la requête par principe, plutôt que par précision.

Changer votre binlog_format à MIXED devrait faire disparaître l'avertissement, car le serveur peut changer de mode à sa discrétion... et il est très peu probable qu'il ait des effets secondaires négatifs. S'il n'y avait pas le fait que STATEMENT a toujours été la valeur par défaut (puisque initialement c'était le seul type de réplication disponible), je soupçonne qu'ils auraient fait MIXED la valeur par défaut il y a longtemps... en fait, si vous vous familiarisez avec les rouages ​​des journaux binaires, vous seriez probablement enclin à faire comme moi et à utiliser ROW sur à peu près tout ... cela a tendance à créer un journal binaire beaucoup plus utile pour le dépannage et vous sortir du pétrin, car les "anciennes" données de ligne sont enregistrées sur DELETE et UPDATE .