Log binari MySQL: salta una tabella


9

C'è un modo per saltare una tabella specifica nei registri binari?

Ho registri binari configurati come la mia strategia di backup incrementale tra backup notturni. Ma abbiamo una grande tabella di riferimento che aggiorneremo ogni notte da un processo batch (tabella da 70 GB). Questa tabella viene letta solo e viene aggiornata di notte mysqlimport.

Durante il processo di aggiornamento per questa tabella di solo riferimento, i registri binari causano un ritardo piuttosto grave (soprattutto quando eseguo un aggiornamento completo da 70 GB). Devono fare 70 GB due volte in pratica. che schifo.

La tabella di riferimento sta attualmente utilizzando MyISAM (ho bloccato InnoDB nel tentativo di caricarlo, quindi provando MyISAM).


Questo DB Server è un DB Server autonomo? Questo DB Server è un master o uno slave?
RolandoMySQLDBA

Risposte:


9

Non esiste alcuna opzione mysql per ignorare una tabella nel registro binario.

Se potessi spostare la tabella in un database separato potresti usare l' opzione binlog-ignore-db , ma questo ha i suoi gotchas . Dovresti capire come MySQL valuta le regole di replica .

Se è possibile scrivere uno script wrapper per caricare i dati anziché mysqlimport (la manpage dice che è un'interfaccia della riga di comando per LOAD DATA INFILE) e l'utente con cui si stanno importando i dati può avere il privilegio SUPER, è possibile utilizzare la variabile di sessione sql_log_bin piace:

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

Ciò disabiliterà la registrazione binaria per la sessione corrente, caricherà i dati e abiliterà nuovamente la registrazione binaria.


Disabilita la registrazione binaria durante il processo di caricamento, geniale, esattamente quello che stavo cercando, questa è una soluzione molto pratica!
David Parks,

3

Puoi usare --replicate-ignore-table=db_name.tbl_name

Vedi http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_replicate-ignore-table per i dettagli.


6
Il problema è che replicate-ignore-table è un'impostazione slave , quindi il master creerà un sacco di voci binlog, verranno trasferiti allo slave (consumando larghezza di banda / spazio nel processo) e solo allora ignorato. Sarebbe molto più efficiente non generare quelle voci in primo luogo.
SVD
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.