Avertissement: Dangereux déclaration écrite dans le log binaire à l'aide de déclaration format depuis BINLOG_FORMAT = INSTRUCTION
D'erreur complet:
Warning: Unsafe statement written to the binary log using statement format
since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an
auto-increment column after selecting from another table are unsafe because
the order in which rows are retrieved determines what (if any) rows will be
written. This order cannot be predicted and may differ on master and the
slave.
Je ne semble pas pour obtenir cette erreur lorsque vous essayez d'exécuter SQL brut de Django. Si je lance le SQL de MySQL client CLI je n'obtiens pas la même erreur. Voici le SQL:
UPDATE picture p
JOIN (
SELECT @inc := @inc + 1 AS new_weight, id
FROM (SELECT @inc := 0) temp, (
SELECT id FROM picture
WHERE album_id = 5
ORDER BY taken_date ASC
) AS pw
) AS pw
ON p.id = pw.id
SET p.weight = pw.new_weight;
Le but est de trier les enregistrements, et d'appliquer un numéro séquentiel pour le poids afin de persister cette commande dans la base de données.
J'ai essayé de lancer cette commande dans le client pour voir si je peux reproduire le problème cependant, il fonctionne toujours avec succès:
mysql> SET GLOBAL binlog_format = 'STATEMENT';
Aussi, il est important de résoudre ou de réécrire le code SQL de travail avec cette contrainte que l'application finale est presque certainement va courir à travers un maître-esclave configuration de base de données.
*EDIT: Après avoir lu un peu plus binlog_format
, il semble que la LIGNE ou MIXTE, serait parfaitement acceptable, mais ma principale préoccupation est de ne pas pouvoir reproduire ce problème dans la base de données MySQL CLI afin de vérifier si l'MIXTE/LIGNE peut en effet résoudre ce problème?
OriginalL'auteur DanH | 2013-06-12
Vous devez vous connecter pour publier un commentaire.
Il n'y a aucun moyen de réécrire le code sql de ne pas jeter ce message d'erreur. Toute sorte de commande ne jeter que les message que l'esclave peut avoir différentes lignes alors le maître.
mixed
les résoudre, car il ne interrupteur àrow
basée sur la réplication lors de la déclaration n'est pas sûr de répliquer avecstatement
.mixed
est la réponse, et il a résolu le problème très bien pour moi. Souhaite que je pourrais répliquer sur le CLI, mais il fonctionne maintenant 🙂OriginalL'auteur R. S.