Logs binários do MySQL - pule uma tabela


9

Existe uma maneira de pular uma tabela específica nos logs binários?

Eu tenho logs binários configurados como minha estratégia de backup incremental entre backups noturnos. Mas temos uma enorme tabela de referência que vamos atualizar todas as noites a partir de um processo em lote (tabela de 70 GB). Esta tabela é lida apenas e é atualizada todas as noites usando mysqlimport.

Durante o processo de atualização para esta tabela somente de referência, os logs binários estão causando um atraso bastante sério (especialmente quando faço uma atualização completa de 70 GB). Tem que fazer 70GB duas vezes basicamente. que nojo.

A tabela de referência está atualmente usando o MyISAM (eu calcei o InnoDB tentando carregá-lo, então experimente o MyISAM).


Este servidor de banco de dados é um servidor de banco de dados independente? Esse servidor de banco de dados é mestre ou escravo?
RolandoMySQLDBA

Respostas:


9

Não há opção mysql para ignorar uma tabela no log binário.

Se você pudesse mover a tabela para um banco de dados separado, poderá usar a opção binlog-ignore-db , mas isso tem suas vantagens . Você deve entender como o MySQL avalia as regras de replicação .

Se você pode escrever um script wrapper para carregar os dados em vez do mysqlimport (a página de manual diz que é uma interface de linha de comando para LOAD DATA INFILE), e o usuário com o qual você está importando os dados pode ter o privilégio SUPER, você pode usar a variável de sessão sql_log_bin gostar:

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

Isso desativará o log binário da sessão atual, carregará os dados e habilitará o log binário novamente.


Desative o log binário durante o processo de carregamento, brilhante, exatamente o que eu estava procurando, esta é uma solução muito viável!
David Parks

3

você pode usar --replicate-ignore-table=db_name.tbl_name

Consulte http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_replicate-ignore-table para obter detalhes.


6
O problema é que replicate-ignore-table é uma configuração de escravo , portanto o mestre criará muitas entradas de log de bin, elas serão transferidas para o escravo (consumindo largura de banda / espaço no processo) e somente então serão ignoradas. Seria muito mais eficiente não gerar essas entradas em primeiro lugar.
SVD
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.