W pracy robimy co noc zrzut naszych baz danych mysql. Z dnia na dzień przywitałbym, że prawie 90–95% danych jest zduplikowanych, z czasem rośnie. (Heck w tym momencie niektóre są prawdopodobnie 99%)
Te zrzuty są tam, gdzie jedna linia to pojedyncza instrukcja INSERT mysql, więc jedynymi różnicami są całe linie i kolejność, w jakiej znajdują się w pliku. Gdybym je posortował, rzeczywista różnica między plikami byłaby bardzo mała.
Szukałem i nie znalazłem żadnego sposobu na posortowanie danych wyjściowych podczas zrzutu. Mógłbym jednak przepuścić to przez sort
polecenie. Wtedy byłyby długie, długie bloki identycznych linii.
Więc próbuję wymyślić sposób na przechowywanie tylko różnic. Mógłbym zacząć od zrzutu głównego i różnicować się z tym każdej nocy. Ale różnice byłyby większe każdej nocy. Albo mógłbym tworzyć toczące się różnice, które pojedynczo byłyby bardzo małe, ale wydaje się, że obliczenie zajęłoby coraz więcej, gdybym musiał zestawiać główny diff całej serii każdej nocy.
Czy to jest wykonalne? Z jakich narzędzi?
Edytuj Nie pytam, jak wykonać kopie zapasowe mysql. Na razie zapomnij o mysql. To czerwony śledź. Chcę wiedzieć, jak zrobić serię toczących się różnic z serii plików. Każdej nocy otrzymujemy plik (który akurat jest plikiem mysqldump ), który jest w 99% podobny do poprzedniego. Tak, zgrywamy je wszystkie. Ale przede wszystkim nadmiarowość jest nadmiarowa. Wszystko, czego naprawdę potrzebuję, to różnice z poprzedniej nocy ... która różni się tylko o 1% od poprzedniej nocy ... i tak dalej. Więc szukam tego, jak zrobić serię różnic, więc muszę przechowywać tylko 1% każdej nocy.
źródło
Ostatnio próbowałem przechowywać zrzuty bazy danych w git. Może to stać się niepraktyczne, jeśli zrzuty bazy danych są naprawdę duże, ale zadziałało to w przypadku małych baz danych (witryny Wordpress i tym podobne).
Mój skrypt zapasowy to z grubsza:
źródło
Możesz zrobić coś takiego (z
a.sql
cotygodniową kopią zapasową).Twoje pliki różnic staną się większe do końca tygodnia.
Moją sugestią jest jednak gzip it (użyj
gzip -9
dla maksymalnej kompresji). Robimy to w tej chwili, co daje użycie pliku gz 59 MB, podczas gdy oryginał ma 639 MB.źródło
Istnieje kilka możliwych podejść, które można zastosować, w zależności od wielkości i faktycznego podobieństwa tekstowego zrzutów bazy danych:
źródło
(Nie zrobiłem tego w produkcji).
Wykonaj pełną kopię zapasową raz dziennie lub w tygodniu. Kopie zapasowe logują się raz na godzinę lub dzień.
źródło