Jak skonfigurować replikację MySQL przy minimalnym przestoju

12

Zasadniczo mamy dużą bazę danych MySQL i chcemy wykonać replikację do slave (konfiguracja master slave). Czy macie jakiś przewodnik krok po kroku, jak to zrobić przy MINIMALNYM przestoju w bazie danych? Tworzenie kopii zapasowej bazy danych i przesyłanie kopii zapasowej do serwera podrzędnego (nawet przez sieć prywatną) zajmuje około 40 minut. Dość długi przestój.

Patrick
źródło

Odpowiedzi:

15

Zakładam, że używasz InnoDB jako silnika pamięci. Jeśli tak, musisz włączyć rejestrowanie bin . Jeśli nie jest teraz włączony, musisz ponownie uruchomić MySQL po zmodyfikowaniu pliku my.cnf. Jest to jedyny czas przestoju, po którym można wykonać zrzut bazy danych z pozycją binlog bez blokowania bazy danych:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

Na podstawie tej kopii zapasowej przywróć dane w urządzeniu podrzędnym. Następnie możesz wykonać dowolny samouczek replikacji MySQL i pozwolić serwerowi slave na przechwycenie / uruchomienie razem z masterem.

pQd
źródło
co by się stało, gdyby niektóre tabele nie używały innodb? Czy powyższa kopia zapasowa byłaby nadal aktualna, jeśli użyję opcji --databases do zrzucenia podzbioru baz danych zamiast opcji -A?
mathieu,
jeśli niektóre tabele nie używają innodb, tworzenie kopii zapasowej może być niespójne. patrz tutaj: stackoverflow.com/a/7461466/104398 ; kopia zapasowa nie będzie zawierać pominiętych baz danych. jeśli skonfigurujesz replikację na podstawie takiej kopii zapasowej i nie będziesz filtrować tego, co jest replikowane - Twoja replikacja ulegnie awarii, gdy tylko nastąpi operacja na pominiętych bazach danych.
pQd
Ok, przekonwertowałem moje pozostałe tabele myisam na innodb i upewniłem się, że tylko te bazy danych, które chcę, są replikowane / tworzą kopie zapasowe.
mathieu
3

aby rozpocząć replikację, potrzebujesz spójnej kopii bazy danych na urządzeniu slave

czy twoje tabele są wspierane przez myisam lub innodb? znaleźć problem

show table status

i spójrz na kolumnę „Silnik”

jeśli wszystkie tabele są innodb, można wykonać zerową konfigurację przestoju za pomocą mysqldump - pojedynczej transakcji i zaimportowania go do urządzenia podrzędnego

jeśli tabele są myisam, będzie musiał być czas przestoju, ponieważ musisz zablokować tabele do pisania podczas ich kopiowania. mysqlhotcopy to narzędzie, które ci w tym pomoże.

alternatywnie, jeśli używasz LVM (menedżer woluminów logicznych), możesz zatrzymać bazę danych, zrobić migawkę LVM w ciągu kilku sekund i ponownie uruchomić db. Następnie możesz wykonać spójną kopię z migawki.

Aleksandar Ivanisevic
źródło
1

Aby skonfigurować urządzenie podrzędne, musisz wykonać migawkę danych i zapisać pozycję dziennika binarnego. Tworzenie kopii zapasowej bazy danych nie powinno powodować przestojów, chociaż spowoduje obniżenie wydajności, ale i tak już tworzysz kopię zapasową bazy danych, prawda? Może się okazać, że kopia zapasowa musi zablokować niektóre tabele, co może powodować zawieszanie się aplikacji, naprawdę konieczne jest sprawdzenie, w jaki sposób zostało to zaimplementowane.

Czy potrafisz wykonać migawkę dysku? To znacznie skróciłoby przestoje, jeśli możesz wykonać hotbackup.

hellomynameisjoel
źródło