Journaux binaires MySQL - sauter une table


9

Existe-t-il un moyen d'ignorer une table spécifique dans les journaux binaires?

J'ai des journaux binaires configurés comme ma stratégie de sauvegarde incrémentielle entre les sauvegardes nocturnes. Mais nous avons une énorme table de référence que nous allons mettre à jour tous les soirs à partir d'un processus par lots (table de 70 Go). Ce tableau est uniquement lu et mis à jour tous les soirs à l'aide mysqlimport.

Pendant le processus de mise à jour de cette table de référence uniquement, les journaux binaires entraînent un retard assez sérieux (surtout lorsque je fais une mise à jour complète de 70 Go). Il faut faire 70 Go deux fois en gros. beurk.

La table de référence utilise actuellement MyISAM (j'ai calé InnoDB en essayant de le charger, donc en essayant MyISAM).


Ce serveur DB est-il un serveur DB autonome? Ce serveur DB est-il un maître ou un esclave?
RolandoMySQLDBA

Réponses:


9

Il n'y a pas d'option mysql pour ignorer une table dans le journal binaire.

Si vous pouviez déplacer la table vers une base de données distincte, vous pourriez utiliser l' option binlog-ignore-db , mais cela a ses pièges . Vous devez comprendre comment MySQL évalue les règles de réplication .

Si vous pouvez écrire un script wrapper pour charger les données au lieu de mysqlimport (la page de manuel indique que c'est une interface de ligne de commande pour LOAD DATA INFILE), et l'utilisateur avec lequel vous importez les données peut avoir le privilège SUPER que vous pourriez utiliser la variable de session sql_log_bin comme:

    SET @@session.sql_log_bin=0;
    LOAD DATA INFILE 'file_name' 
      -- other LOAD DATA INFILE options ;
    SET @@session.sql_log_bin=1;

Cela désactivera la journalisation binaire pour la session en cours, chargera les données et réactivera la journalisation binaire.


Désactiver la journalisation binaire pendant le processus de chargement, génial, exactement ce que je cherchais, c'est une solution très pratique!
David Parks

3

vous pouvez utiliser --replicate-ignore-table=db_name.tbl_name

Voir http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_replicate-ignore-table pour plus de détails.


6
Le problème avec cela est que replicate-ignore-table est un paramètre d' esclave , donc le maître créera des charges d'entrées binlog, elles seront transférées à l'esclave (mangeant de la bande passante / de l'espace dans le processus), et alors seulement ignorées. Il serait beaucoup plus efficace de ne pas générer ces entrées en premier lieu.
SVD
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.