PURGE BINARY LOGS
Oświadczenie usuwa wszystkie binarne pliki dziennika wymienione w pliku indeksu dziennika przed Określona nazwa pliku dziennika lub datownik. Usunięte pliki dziennika są również usuwane z listy zapisanej w pliku indeksu, dzięki czemu dany plik dziennika staje się pierwszym na liście.
Mam nadzieję, że wyczyściłeś dzienniki binarne, mysql-bin.000019
używając polecenia
PURGE BINARY LOGS TO 'mysql-bin.000019';
Jeśli chcesz wyczyścić wszystkie dzienniki, polub to
PURGE BINARY LOGS TO 'mysql-bin.000025';
Spowoduje to usunięcie dzienników binarnych do góry mysql-bin.000025
.
AKTUALIZACJA
Możesz spróbować
RESET MASTER;
RESET MASTER
Usuwa wszystkie pliki dziennika binarnego wymienione w pliku indeksu, resetuje plik indeksu dziennika binarnego do pustego i tworzy nowy plik dziennika binarnego
Efekty RESET MASTER
różnią się od efektów WYPEŁNIANIA DZIENNIKÓW BINARNYCH na 2 kluczowe sposoby:
RESET MASTER
usuwa wszystkie binarne pliki dziennika wymienione w pliku indeksu, pozostawiając tylko jeden pusty, binarny plik dziennika z sufiksem numerycznym .000001, podczas gdy numeracja nie jest resetowana przez PURGE BINARY LOGS.
RESET MASTER
nie był przeznaczony do użycia podczas działania jakichkolwiek urządzeń podrzędnych replikacji. Zachowanie, RESET MASTER
gdy jest używane podczas pracy urządzeń podrzędnych, jest niezdefiniowane (a zatem nieobsługiwane), podczas gdy PURGE BINARY LOGS
może być bezpiecznie używane podczas pracy urządzeń podrzędnych replikacji.
CAVEAT autorstwa RolandoMySQLDBA
Jeśli biegniesz RESET MASTER
z podłączonymi i uruchomionymi Slave, wątek IO każdego Slave natychmiast straci swoje miejsce. Replikacja jest w ten sposób zepsuta i będziesz musiał poświęcić czas na ponowne zsynchronizowanie danych na wszystkich urządzeniach slave. Jeśli chcesz bezpiecznie usunąć dzienniki binarne z serwera głównego bez naruszenia integralności replikacji, wykonaj następujące czynności:
- Uruchom
SHOW SLAVE STATUS\G
na każdym Slave.
- Zwróć uwagę na
Relay_Master_Log_File
. Jest to dziennik binarny, którego najnowsza instrukcja została pomyślnie wykonana w Slave).
- Na wszystkich ekranach
SHOW SLAVE STATUS\G
określ, który Relay_Master_Log_File
jest najstarszy (na przykład „mysql-bin.00123”).
- Możesz uruchomić
PURGE BINARY LOGS TO 'mysql-bin.00123';
Żadna z Niewolników nie straci swojego miejsca.
Ogólny efekt? Spowoduje to pozostawienie dzienników binarnych w Panu, którego instrukcje jeszcze nie zostały wykonane we wszystkich Niewolnikach.
CHANGE MASTER TO
, usuwa wszystkie dzienniki przekazywania. JeśliRelay_Master_Log_file
takmysql-bin.00123
, to najstarszy dziennik binarny na Master, o którym Slave wie. Jeślimysql-bin.00123
już nie istnieje na Master, możesz stracić odpowiednie miejsce do replikacji, jeśli uruchomiszCHANGE MASTER TO
na Slave, który nie odwołuje się do nowszych dzienników. Można to łatwo przeoczyć, co kończy się ręcznym przerywaniem replikacji.Nie jestem pewien, czy tak się stało, ale w moim przypadku MySQL zatrzymał dzienniki „cykliczne”, a plik mysql-bin.index stał się „uszkodzony” przez nieprawidłowe wpisy pliku binlog.
W szczególności plik indeksu rozpoczął się od mysql-bin.000001 i dotarł do mysql-bin.000220, ale potem jakoś zaczął się od 001. Kiedy porównałem to do plików na moim serwerze, zauważyłem, że mam pliki od 001 do 022
Na początku próbowałem,
PURGE LOGS TO 'mysql-bin.000022';
ale to nie działało.W końcu zatrzymałem MySQL i ręcznie edytowałem plik indeksu, aż pasował do plików, które miałem na moim serwerze. Kiedy zrestartowałem MySQL, wyczyściłem pliki binlog, aby zachować zgodność z
expire_logs_days
ustawieniami i zacząłem normalnie działać.źródło
PURGE LOGS
że działa tylko w idealnej konfiguracji: 1) gdy wszystkie dzienniki binarne są następujące po sobie, 2) wszystkie dzienniki binarne są nazwane wmysql-bin.index
pliku, 3) Nie ma żadnych dodatkowych dzienników, o których nie wspomnianomysql-bin.index
. +1 !!!W moim przypadku
PURGE BINARY
po prostu niczego nie usunąłem.Miałem partycję przy 100% obciążeniu (musiałem trochę wyczyścić mój dziennik wolniejszych zapytań, aby było wystarczająco dużo miejsca na mysql do ponownego uruchomienia), więc pierwszą rzeczą, którą zrobiłem, było
/etc/my.cnf
skomentowanie liniilog-bin=mysql-bin
(nie było to konieczne na tym serwerze i zapomniałem go usunąć), a następnie zrestartowałem mysql (było to potrzebne, ponieważ w kolejce były zapytania uniemożliwiającePURGE BINARY
wykonanie).Potem pobiegłem,
PURGE BINARY
ale nic się nie stało. Przeczytałem więc instrukcję i dowiedziałem się, że:Więc ponownie włączyłem
log-bin=mysql-bin
w moim/etc/my.cnf
, zrestartowałem, OCZYSZCZałem pliki (teraz z sukcesem), ponownie skomentowałem linię, a następnie uruchomiłem ponownie. Następnie pliki zostały usunięte i nie są już tworzone.źródło
To działa dla mnie: (wersja serwera MySQL: 5.6.14)
Usuwa wszystkie dzienniki binarne z mojego systemu.
źródło
Możesz łatwo usunąć WSZYSTKIE dzienniki za pomocą:
Lub zastąp func NOW () dowolną datą w cudzysłowie:
Lub możesz zautomatyzować tę akcję za pomocą
expire_logs_days = 10
my.cnf. Domyślnie expire_logs_days ma wartość 0 = nigdy nie usuwaj dzienników.( źródło )
źródło