web-dev-qa-db-fra.com

Comment exécuter une requête dans MYSQL sans l'écrire dans le journal binaire

Je veux exécuter une importation d'un gros fichier dans MySQL. Cependant, je ne veux pas qu'il soit écrit dans le journal binaire, car l'importation prendra beaucoup de temps et entraînera un retard important des esclaves. Je préfère l'exécuter séparément sur les esclaves, après coup, car ce sera beaucoup plus facile sur le système. Le tableau en question est nouveau, et donc je n'ai pas vraiment à m'inquiéter qu'il se désynchronise, car le maître et tous les esclaves auront finalement les mêmes données, car ils importeront tous le même fichier finalement. Je ne veux pas non plus modifier les options replicate-ignore- * ou binlog_ignore- *, car elles nécessitent un redémarrage des serveurs en question. Existe-t-il un moyen d'exécuter une seule requête sans l'écrire dans le journal binaire?

Je connais déjà la réponse, mais je ne l'ai pas trouvée très facilement sur le net, donc je laisse quelqu'un poster la réponse pour obtenir des points de répétition. S'il n'y a pas de réponses dans un petit blanc, je posterai la réponse que j'ai trouvée.

33
Kibbee

Vous pouvez utiliser la variable de session sql-log-bin pour désactiver la journalisation de la session en cours. Entrez simplement:

SET sql_log_bin = 0;

et toutes les requêtes sur votre session en cours ne seront pas envoyées au journal binaire. Si vous souhaitez réactiver la journalisation binaire, exécutez:

SET sql_log_bin = 1;

Cela concerne uniquement la session en cours d'exécution dans laquelle vous vous trouvez. Toutes les autres requêtes de toutes les autres connexions continueront d'être enregistrées. De plus, vous devez avoir des privilèges SUPER pour que cela fonctionne.

54
Kibbee

Si vous voulez faire ça depuis le cli, essayez ça, ça a marché pour moi:

$ mysqldump old_DB | mysql --init-command="SET SQL_LOG_BIN = 0;" new_DB

Il est possible que le paramètre "init-command" ait été ajouté dans une version plus récente de MySQL.

19
Mihai