Chcę wykonać kopię zapasową bazy danych, ale w ciągu dnia, gdy serwer jest obciążony. Bardzo ważne jest, aby kopia zapasowa nie wpływała na apache i inne bazy danych działające na tym samym serwerze.
Powinno być możliwe użycie polecenia mysqldump , ale należy uruchomić polecenie z niskim priorytetem.
W jaki sposób mogę to zrobić?
Aktualizacja: Wygląda na to, że zwykłe używanie nice z mysqldump nie działa, ponieważ mysqldump tworzy nowy proces.
Odpowiedzi:
Jeśli masz zapasowy serwer, który poradzi sobie z obciążeniem zapisu serwera, możesz skonfigurować replikację na tym serwerze, a następnie wykonać kopię zapasową z serwera podrzędnego. Ma to również tę zaletę, że można zatrzymać replikację podczas wykonywania kopii zapasowej i uzyskać spójną migawkę danych we wszystkich bazach danych lub we wszystkich tabelach w jednej bazie danych bez wpływu na serwer bazy danych. Jest to konfiguracja, którą zawsze zalecam do tworzenia kopii zapasowych MySQL, jeśli masz zasoby.
Jako niezły bonus masz teraz niewolnika tylko do odczytu, którego możesz używać do powolnych, długich zapytań.
źródło
mysqldump
spowoduje albo długi blokadę lub stoły nie będą zsynchronizowane.Andy, wydaje mi się, że miałeś dużo czasu na znalezienie rozwiązania. Niedawno wymyśliłem rozwiązanie, które działa świetnie dla mnie w arkuszach kalkulacyjnych i pomyślałem, że podzielę się tym.
cstream jest uniwersalnym narzędziem do obsługi strumienia, takim jak UNIX dd, zwykle używanym w potokach zbudowanych z wiersza poleceń. Rzeczą, która sprawia, że cstream jest dla nas użyteczny, jest to, że pozwala ci określić maksymalną przepustowość dla wszystkich danych wejściowych. Oznacza to, że możesz ograniczyć IO dysku dla polecenia mysqldump za pomocą prostego polecenia takiego jak to:
Zakładając, że tworzona jest kopia zapasowa bazy danych, która korzysta ze wszystkich tabel InnoDB, powyższe polecenie jest bezpieczne (nie wpłynie na inne zapytania) i wykona mysqldump, ograniczając jednocześnie odczyt dysku do jednego megabajta na sekundę. Dostosuj przepustowość za pomocą parametru -t do dowolnej wartości, która pozwoli Twojemu środowisku wykonać kopię zapasową bez wpływu na zadowolenie klienta.
źródło
FWIW powinieneś być w stanie to zrobić również z pv ( http://linux.die.net/man/1/pv )
mysqldump --single-transaction --quick -u -p | pv --rate-limit 1m> destination (lub | nc lub | tar cfj backup.bz2 -)
Zaletą tego są różne opcje monitorowania postępu oraz opcja -R, która pozwala przekazać opcje do już uruchomionego procesu, np. --rate-limit, aby zmienić szybkość transferu.
źródło
jeśli używasz innodb, możesz wypróbować xtrabackup z --throttle opcją .
równie dobrze możesz na to spojrzeć ionice i uruchomić z nim mysqldump.
a może chcesz włączyć binarne logowanie w mysql i uruchamiać pełny zrzut raz na tydzień / noc, jednocześnie kopiując bin-logi do bezpiecznej lokalizacji co 1-2 godziny. i .. opcja slave tylko do odczytu do celów tworzenia kopii zapasowych jest również opcją.
źródło
Jeśli używasz go w systemie Linux lub innym wariancie * nix, możesz to zrobić w następujący sposób:
nice -n ## mysqldump
To da mu niższy priorytet planowania. Szeregowanie priorytetu w zakresie od -20 (najwyższy priorytet) do 19 (najniższy priorytet) wartością domyślną dla nice jest 10, jeśli argument -n zostanie pominięty.
źródło
cron.d / mysql_dump:
ionice dla priorytetu I / O i miły dla priorytetu procesora.
Uruchom vmstat 5, sprawdź kolumnę z napisem WA. Wysoka wartość oznacza, że procesor czeka na operacje we / wy. Użyj ionice, jeśli to tylko obciążenie procesora, użyj ładnego.
Odpowiedź na aktualizację:
Wygląda na to, że masz rację. Wywołuje mysql, który nie jest z niczego. Myślę, że możesz użyć do tego renice i ustawić fajną wartość po uruchomieniu.
Nie mam jednak wystarczająco dużej bazy danych, aby zrzucić bankomat, aby zrobić dla ciebie przydatny skrypt.
Replikacja, jak sugeruje link, jest jedną z możliwości. Replikuj, zatrzymaj i zrzuć na innym hoście.
źródło
Umieść swoje dane MySQL na LV i użyj udoskonalonego zadania mylvmbackup, które wykonuje migawkę LV i analizuje pliki danych MySQL. W ten sposób nie blokujesz tabel, minimalizując wpływ na twoje aplikacje tylko na obciążenie IO.
źródło
Zawsze możesz spróbować nie uruchamiać go w godzinach szczytu. Niezależnie od tego, jakiego priorytetu użyjesz, zrzut nadal będzie wymagał blokady na wszystkich twoich stołach.
źródło