La bretelle de sortie de mysql dangereux avertissement
Je suis en log d'erreur d'écriture d'avertissement/d'erreurs dans un fichier. Quand je procède à INSÉRER IGNORER..instruction SELECT, il vient de se garder d'écrire ce message d'avertissement.
120905 3:01:23 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.
Je veux arrêter de mysql logwriter continuer à écrire l'erreur ci-dessus. (Je ne vois pas d'autres journaux parce qu'ils fillout l'ensemble du fichier de log...)
Tout d'abord, j'ai insert (a, b, c) dans un tableau. c doit être unique dans le tableau, et a, b sont utilisés pour sélectionner. La requête sera comme ceci
SELECT c FROM table WHERE a=value1 AND value2<b AND b<value3
Et ma requête d'insertion est
INSERT IGNORE INTO table VALUES (,,),(,,)...(,,)
Je pensais que je pouvais modifier la requête de ne pas produire d'avertissement, mais mes données contiennent champ unique et j'ai besoin de garantir que le champ est unique dans la table. Et 500~2000 lignes doivent être insérées dans toutes les quelques secondes, j'ai donc besoin de faire bulk insert.
Si il y a déjà des dizaines de millions de lignes insérées, et j'ai besoin d'insérer un autre 2000 lignes en quelques secondes. Comment puis-je les insérer en toute sécurité dans la table sans remplir le fichier de log avec les mises en garde?
(Je ne peux pas éteindre le log binaire parce que j'ai besoin d'utiliser la réplication mysql.)
Oui, je suis en utilisant la réplication mysql pour la sauvegarde, l'évolutivité des raisons
Donc, avez-vous lu le message d'erreur alors?
OriginalL'auteur user1640242 | 2012-09-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
pour désactiver la journalisation et
pour le rallumer. Mon idée est d'envelopper la délinquance de la requête avec ces plutôt que de définir à l'échelle mondiale, de sorte que vous pouvez suivre si d'autres requêtes à l'origine du problème.
Noter que les anciennes versions de MySQL ne supporte pas cela.
Depuis MySQL 5.6.4 cette variable n'est définie comme un phénomène GLOBAL.
OriginalL'auteur user1978317
Je pense que cette question est encore ouverte.
Utilisation
set max_error_count=0;
your unsafe queries;
set max_error_count=64;
avant les requêtes que vous souhaitez exécuter, il est une variable de session, de sorte que vous n'avez pas besoin d'être super-utilisateur à utiliser. Non seulement, aucun avertissement sera émis lorsque vous appelez montrer les avertissements de limite de 5; mais de tels avertissements ne sont pas de déclaration dans mysql fichiers journaux.
vous pouvez également l'utiliser dans des procédures stockées. Après vos requêtes que vous connaissez qui sont dangereux, vous pouvez remettre cette variable à sa valeur d'origine.
OriginalL'auteur Laurent PELE