W tej chwili mogę wykonać kopię zapasową za pomocą mysqldump. Ale muszę zdjąć serwer WWW ORAZ wykonanie kopii zapasowej zajmuje około 5 minut. Jeśli nie zdejmę serwera WWW, trwa to wiecznie i nigdy się nie kończy + strona internetowa staje się niedostępna podczas tworzenia kopii zapasowej.
Czy istnieje szybszy / lepszy sposób tworzenia kopii zapasowej mojej 22 GB i rosnącej bazy danych?
Wszystkie tabele są MyISAM.
Odpowiedzi:
Tak.
Skonfiguruj replikację na drugim komputerze. Gdy potrzebujesz wykonać kopię zapasową, możesz zablokować komputer pomocniczy, wykonać mysqlhotcopy lub mysqldump, a następnie odblokować. Wróci do twojego mistrza i nigdy nie będziesz musiał przełączać go w tryb offline.
Możesz to zrobić nawet na tym samym komputerze, jeśli nie masz nic przeciwko podwojeniu liczby operacji we / wy zapisu, ale najlepiej jest wykonać kopię zapasową w czasie rzeczywistym na drugim serwerze fizycznym i wykonywać kopie zapasowe migawek tak często, jak potrzebujesz bez zakłócania działania serwera produkcyjnego.
Teoretycznie możliwe jest również przywrócenie bazy danych przy użyciu znanego stanu i binlogów. Nigdy tego nie robiłem, więc najpierw sprawdź to, ale możesz wykonać kopię zapasową znanego stanu bazy danych, a następnie po prostu wykonać kopię zapasową wszystkich nowych binlogów i odtworzyć je, jeśli kiedykolwiek zajdzie potrzeba przywrócenia. Ponieważ binlogi są zapisywane liniowo, rsynchronizacja nowych binlogów na zdalnym komputerze byłaby bardzo szybka.
Edycja: Rzeczywiście wygląda na to, że korzystanie z binlogów do tworzenia kopii zapasowych jest udokumentowane.
To pytanie jest ściśle powiązane
źródło
Przepraszam za założenie, że OS to Linux. Jeśli nie używasz LVM, powinieneś. Jeśli tak, oto bardzo prosty sposób na tworzenie kopii zapasowych za pomocą migawki.
Umożliwi to wykonywanie nocnych kopii zapasowych bez konieczności dodawania serwera podrzędnego. Jestem bardzo zwolennikiem posiadania serwera podrzędnego dla wysokiej dostępności, ale nie chcę, abyś myślał, że utknąłeś, dopóki nie możesz go utworzyć.
źródło
FLUSH TABLES WITH READ LOCK nie jest czymś, co chcesz robić regularnie (a nawet częściowo) w systemie produkcyjnym. To powinno być tylko ostatecznością.
Skonfiguruj co najmniej dwa urządzenia podrzędne do replikacji (będzie to oczywiście wymagało PŁYNNE TABELE Z BLOKADĄ CZYTANIA). Po ich skonfigurowaniu możesz usunąć kopię zapasową, a druga pozostanie zsynchronizowana jako zapasowy master.
Ponadto, jeśli jeden z twoich niewolników ulegnie awarii, możesz użyć migawki, aby odbudować drugiego (lub trzeciego) niewolnika. Jeśli wszyscy Twoi niewolnicy zawiodą, wrócisz do FLUSH TABLES WITH READ LOCK.
Pamiętaj, aby zawsze mieć proces, który regularnie sprawdza, czy dane są zsynchronizowane - użyj do tego czegoś takiego jak mk-table-suma kontrolna (nie jest to łatwe do skonfigurowania, szczegółowe informacje można znaleźć w dokumentacji Maatkit).
Ponieważ 22 GB jest stosunkowo małe, nie będziesz mieć z tym problemu. Robienie tego z dużą bazą danych może być bardziej problematyczne.
źródło
Rozwiązanie tutaj jest dwojakie, jak opisano powyżej:
Zauważ, że jeśli używasz InnoDB do swoich tabel, możesz użyć flagi --single-transakcja, aby uniknąć konieczności blokowania tabel i nadal uzyskać spójny zrzut bazy danych, nawet w systemie głównym, a zatem tworzyć kopie zapasowe bez zdejmowanie serwera. Powyższe rozwiązanie jest jednak lepsze.
Ponadto, jeśli używasz LVM w systemie Linux, możesz zrobić migawkę LVM partycji, a następnie wykonać kopię zapasową. Migawki LVM są atomowe, więc jeśli wykonasz „opróżnianie tabel z blokadą odczytu”, a następnie wykonasz migawkę i odblokujesz, otrzymasz spójną migawkę.
Jeśli martwisz się rywalizacją we / wy, która powoduje, że zrzut trwa zbyt długo, możesz dodać trzeci komputer i uruchomić na nim mysqldump w sieci, aby uniknąć uszkodzenia dysku.
źródło
W zależności od środowiska migawki są zazwyczaj doskonałym sposobem. Zwłaszcza jeśli z jakiegoś powodu musisz wykonać kopię zapasową wzorca. Prowadzimy pary master i slave i używamy kopii zapasowych migawek na obu.
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
W przypadku tabel InnoDB będziesz chciał uruchomić
SET AUTOCOMMIT=0;
przed wykonaniem blokady odczytu.źródło
Zobacz „ Najlepsze praktyki tworzenia kopii zapasowych produkcyjnej bazy danych MySQL? ”. Jest podobny post na przepełnieniu stosu.
źródło
Możesz zrobić stopniową kopię zapasową. Kopia zapasowa 1 / 24th rekordów co godzinę. Jedynym problemem związanym z tym podejściem jest to, że jeśli ulegnie awarii w ciągu pierwszych kilku godzin dnia, stracisz wszystko od tego czasu do momentu awarii. Tak czy inaczej, utracono mniej niż 24 godziny nagrań (nie wiem, jak ważne to dla ciebie).
źródło