Dzienniki binarne MySQL - pomiń tabelę

9

Czy istnieje sposób na pominięcie określonej tabeli w dziennikach binarnych?

Mam skonfigurowane dzienniki binarne jako moją strategię przyrostowego tworzenia kopii zapasowych między nocnymi kopiami zapasowymi. Ale mamy jedną ogromną tabelę referencyjną, którą będziemy aktualizować co noc z procesu wsadowego (tabela 70 GB). Ta tabela jest tylko czytana i jest aktualizowana co noc przy użyciumysqlimport .

Podczas procesu aktualizacji tej tabeli tylko do celów referencyjnych dzienniki binarne powodują dość poważne opóźnienie (szczególnie, gdy wykonuję pełną aktualizację 70 GB). Zasadniczo musi to zrobić 70 GB dwa razy. fuj.

Tabela referencyjna używa obecnie MyISAM (zablokowałem InnoDB, próbując go załadować, więc wypróbowałem MyISAM).

David Parks
źródło
Czy ten serwer DB jest samodzielnym serwerem DB? Czy ten serwer DB jest urządzeniem nadrzędnym czy podrzędnym?
RolandoMySQLDBA,

Odpowiedzi:

9

Nie ma opcji mysql, aby zignorować tabelę w dzienniku binarnym.

Jeśli możesz przenieść tabelę do osobnej bazy danych, możesz skorzystać z opcji binlog-ignore-db , ale ma to swoją gotchas . Powinieneś zrozumieć, jak MySQL ocenia reguły replikacji .

Jeśli potrafisz napisać skrypt opakowujący, aby załadować dane zamiast mysqlimport (strona podręcznika mówi, że jest to interfejs wiersza poleceń LOAD DATA INFILE), a użytkownik, którego importujesz dane, może mieć uprawnienia SUPER, których możesz użyć zmiennej sesji sql_log_bin lubić:

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

Spowoduje to wyłączenie rejestrowania binarnego dla bieżącej sesji, załadowanie danych i ponowne włączenie rejestrowania binarnego.

Redguy
źródło
Wyłącz rejestrowanie binarne podczas ładowania, genialne, dokładnie to, czego szukałem, jest to bardzo praktyczne rozwiązanie!
David Parks,
3

możesz użyć --replicate-ignore-table=db_name.tbl_name

Szczegóły znajdują się na stronie http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_replicate-ignore-table .

użytkownik41362
źródło
6
Problem polega na tym, że tabela replikacji-ignorowania jest ustawieniem slave , więc master utworzy mnóstwo wpisów binlog, zostaną one przeniesione do slave (zjadają przepustowość / przestrzeń w procesie) i dopiero potem zostaną zignorowane. O wiele bardziej efektywne byłoby nie generowanie tych wpisów.
SVD