Stworzyłem skrypt przyrostowej kopii zapasowej rsync dla mojego serwera, który skopiuje kopię zapasową bazy danych MySQL i określoną ścieżkę folderu na serwer zdalny. Oto kod na Github.
Fragment kodu z wierszy 53-57:
############### Create most current hand link
echo "Creating most current hard link on backup server $most_recent_backup_link"
ssh $remote_backup_server rm -rf ${most_recent_backup_link}
ssh $remote_backup_server cp -alv ${remote_backup_folder}/backup-${backup_folder_name}/ ${most_recent_backup_link}
Mam problem z tworzeniem najnowszych twardych dowiązań na serwerze kopii zapasowych (wiersze 53-57 w programie). Wszystko działa, a rsync kopiuje tylko około 1-2 MB danych. Ale proces kopiowania twardego łącza wykorzystuje około 30 MB danych. Otrzymuję ogromną listę plików do prania, które nie uległy zmianie, a jedyne, które uległy zmianie, są bardzo małe. Zwykle nie stanowi to problemu, ale podczas tworzenia kopii zapasowej co godzinę kopia zapasowa powinna być jak najmniejsza.
Na przykład podczas ostatniej kopii zapasowej rsync przesłał 1,3 MB. Ale katalog kopii zapasowych zwiększył się o 35 MB.
Dlaczego twarde łącza zajmują tyle miejsca na dysku twardym?
źródło
find -mindepth 1 -type d | wc -l
i znalazłem, że moja kopia zapasowa ma 1706 wszystkich katalogów.Odpowiedzi:
patrząc na kod (w git hub) wygląda na to, że tworzysz jeden plik .sql.gz na kopię zapasową. nawet jeśli jest tylko 1 lub 2 MB zmian, kopia zapasowa będzie zupełnie nowym plikiem, jeśli chodzi o rsync, więc rozłączy plik, aby utworzyć nowy, ponieważ są one teraz różne.
prawdopodobnie będziesz chciał wykonać kopię zapasową katalogów mysql bezpośrednio (co będzie wymagało zatrzymania mysql podczas wykonywania tej operacji), aby uzyskać pożądaną oszczędność miejsca. Jeśli zejdziesz tą drogą, prawdopodobnie będziesz chciał uruchomić serwer podrzędny, aby wykonać kopię zapasową, w ten sposób baza danych pozostanie bezczynna i tylko serwer podrzędny zostanie zatrzymany podczas tworzenia kopii zapasowej.
źródło
Powinieneś zajrzeć do storeBackup (storeBackup.org). Tworzy zduplikowane kopie zapasowe za pomocą dowiązań twardych i jest bardzo wydajny.
Ma więcej funkcji niż rsync do tworzenia twardych kopii zapasowych. W przypadku cogodzinnych kopii zapasowych możesz rozważyć opcję storeBackup „lateLinks”, która opóźni utworzenie wszystkich twardych dowiązań. Możesz albo wykonać jedną codzienną kopię zapasową wszystkich twardych łączy. (Lub możesz połączyć wszystkie odroczone kopie zapasowe później, jeśli zdecydujesz się zachować każdą cogodzinną kopię zapasową).
storeBackup posiada również funkcję, która pozwoli ci zdecydować, które kopie zapasowe zachować. Na przykład możesz powiedzieć mu, aby zachowywał wszystkie cogodzinne kopie zapasowe tylko przez ostatnie 24 godziny, i aby wykonywał codzienną kopię zapasową przez ostatnie 30 dni, a także by utrzymywał pierwszą kopię zapasową z miesiąca późniejszego. W ten sposób nie zmarnujesz tyle miejsca.
źródło