Jak zwiększyć szybkie tworzenie kopii zapasowych i przywracanie bazy danych 500 GB za pomocą mysqldump?


10

Baza danych ma rozmiar 500 GB. Tabele w bazie danych A zawierają zarówno tabele MyISAM, jak i INNODB. Tabele MyISAM to tabele główne, a tabele Innodb to główne tabele transakcji.

Tworzenie kopii zapasowych i przywracanie przy użyciu zrzutu mysql zajmuje dużo czasu lub dni.

  • max_allowed_packet = 1G
  • Foreign_key_checks = 0
  • auto_commit = wyłączone

1
Chcę tylko upewnić się, że używasz opcji --opt z narzędziem mysqldump. Jest to OGROMNA oszczędność czasu podczas ponownego ładowania. bez niego mysqldump tworzy plik sql wiersz po wierszu. --opt robi: Dodaje blokady, upuszcza i tworzy ponownie z włączonymi wszystkimi opcjami tworzenia, tymczasowo wyłącza klucze w celu szybkiego przeładowania, a następnie ponownie włącza klucze na końcu, aby odbudować indeksy po zakończeniu zapisu. Łączy kilka wierszy razem we wstawkach, aby zmniejszyć rozmiar pliku ORAZ czas analizowania każdej instrukcji (nawet o 70%) i umożliwia - szybkie zmniejszenie obciążenia względem zrzutu DB podczas działania. skraca czas ładowania o 80%
ppostma1

Odpowiedzi:


5

Ale link zaleca również XtraBackup z Percona, który jest szybszy, nie blokuje już używanych tabel i nie ma czasu na przywrócenie. W przypadku 500 GB danych wolę, aby Percona XtraBackup była szybka i wydajna, chyba że chcesz je przekonwertować na model plik_pliku_pert_błędu, jeśli nie byłby to istniejący serwer DB. Poniższy link wyjaśnia, jak postępować.

http://www.percona.com/doc/percona-xtrabackup/innobackupex/creating_a_backup_ibk.html


1
Problem z Percona Xtrabackup polega na tym, że mysqld musi zostać zatrzymany , aby przywrócić bazę danych.
dr_

2

Sprawdź mydumper. Jest o wiele szybszy niż mysqldump: Nowa wersja mydumper 0.6.1 oferuje funkcje wydajności i użyteczności

Możesz pobrać stąd: https://github.com/maxbube/mydumper

Co to jest mydumper? Dlaczego?

  • Równoległość (stąd szybkość) i wydajność (pozwala uniknąć kosztownych procedur konwersji zestawu znaków, ogólnie wydajnego kodu)
  • Łatwiejsze zarządzanie danymi wyjściowymi (osobne pliki dla tabel, zrzut metadanych itp., Łatwe do przeglądania / analizowania danych)
  • Spójność - utrzymuje migawkę we wszystkich wątkach, zapewnia dokładne pozycje dziennika głównego i podrzędnego itp
  • Zarządzalność - obsługuje PCRE do określania włączeń i wyłączeń baz danych i tabel

1

Wydaje mi się, że pytanie dotyczy tego, jak szybciej przywracać z plików zrzutu pamięci podręcznej mysqldump, a nie innego rozwiązania do tworzenia kopii zapasowych.

Jednym ze sposobów, w jaki można to zrobić, jest utworzenie grup tabel w schemacie i utworzenie osobnego użytkownika DB dla każdej grupy oraz użycie uprawnień MySQL, aby nie zezwalać na wstawianie tabel przy użyciu wszystkich użytkowników DB oprócz jednego.

Jest to sprawdzona, szybka, prawie równoległa technika, ale nie w 100% pewna, ile czasu zajmie przywrócenie z 500G. Ale imho, potrzebujesz czegoś równoległego. Zobacz poniższy link dla przykładu.

Szybkie, równoległe przywracanie ze zrzutów SQL (mysqldump) dla MySQL


1

Wypróbuj następujące rozwiązania z innobackupex:

innobackupex --parallel=7 --rsync  /var/mysql/backup

Możesz zmienić równoległy numer procesu, jak chcesz. Ponieważ wspomniałeś, że masz tabele myisam, parametr „rsync” pomoże przyspieszyć ich tworzenie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.