2010-06-02 14 views
32

Je veux lancer une importation d'un fichier volumineux dans MySQL. Cependant, je ne veux pas qu'il soit écrit dans le journal binaire, car l'importation prendra beaucoup de temps et fera tomber les esclaves loin derrière. Je préfère le faire fonctionner séparément sur les esclaves, après le fait, parce que ce sera beaucoup plus facile sur le système. La table en question est une nouvelle, et donc je n'ai pas vraiment à m'inquiéter de la désynchronisation, car le maître et tous les esclaves auront les mêmes données à la fin, 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?Comment exécuter une requête dans MYSQL sans l'écrire dans le journal binaire

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

Répondre

49

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

SET sql_log_bin = 0; 

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

SET sql_log_bin = 1; 

C'est seulement pour la session en cours d'exécution, vous êtes dans toutes les autres requêtes de toutes les autres connexions seront toujours continué à être connecté. En outre, vous devez avoir des privilèges SUPER pour que cela fonctionne.

+1

Cela fonctionnerait-il si je le faisais dans la ligne de commande? mysqldump mydb | mysql -h remote.host.com remote_db' – vinhboy

+0

Oui, le point principal devrait être dans une session mysql. Si vous vous reconnectez, c'est une session différente. –

+0

Vous devez ajouter une commande avant la sortie de mysqldump. Comme 'echo" SET sql_log_bin = 0; "& mysqldump mydb | mysql -h remote.host.com remote_db' Je ne suis pas sûr que la syntaxe soit correcte pour ajouter un début à la commande, mais vous pouvez commencer à partir de cela. –

17

Si vous voulez faire du cli, essayez ceci, cela a fonctionné pour moi:

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

possible que le PARAM "init-commande" a été ajouté dans une version plus récente de MySQL.