Na wszystkich serwerach mam wdrożony skrypt który codziennie w nocy wykonywał kopię baz danych ( jeśli była dostępna przestrzeń na wykonanie kopii), oraz przechowywał 7 ostatnich kopii.
Rozwiązanie to działało “automagicznie” – czyli skrypt działa, więc kopie pewnie są….

Ostatnio wpadło jednak zgłoszenie że jest problem z działaniem funkcji jednej ze stron – okazało się że tabela jest uszkodzona.
Tabela naprawiona, klient zadowolony ale ja już niekoniecznie – bo skoro tabela była uszkodzona to i napewno nie ma pełnej kopii bazy.
Ok, ale skąd właściwie pewność że kopia jest wogóle robiona, i że każda z baz danych ma kompletny backup?

Zabrałem się więc za poprawki i:
1) Sprawdzanie czy kopia się wykonuje
Było już wdrożone zabezpieczenie przed wykonaniem kopii jeśli wolnej przestrzeni jest mniej niż rozmiar folderu z bazami – dodałem więc tylko w bazie danych w monitoringu dodatkową kolumnę z wartością 0/1 i:
– jeśli nie ma miejsca – status kopii baz 0 + powiadomienie mailowe
– jeśli wykonywało kopię baz danych – status 1

2) Sprawdzenie poprawności wykonania kopii bazy

Wystarczyło po wykonaniu dumpa a przed “gzipowaniem” dodać sprawdzenie, czy 3 wyraz w ostatniej linijce wykonanej kopii bazy to “completed” – jeśli nie, to znaczy że kopia bazy została przerwana.
W takim wypadku w kolejnej kolumnie w bazie danych monitoringu aktualizowany był status kopii tabel z 1 na 0 + wysyłane powiadomienie mailowe z nazwą serwera + nazwą bazy dla której był problem.

Podsumowując – wyszło na jaw, że dla 2 serwerów nie poprawiłem ip w ansible po migracji ,trzy serwery wymagały zwiekszenia wartości max_allowed_packet w sekcji mysqldump i tyle samo baz danych wymagało wykonania repair dla tabel.
Aczkolwiek teraz mogę spać spokojniej, gdyż wiem że mam pełne i poprawne kopie baz, mam notyfikacje jeśli kopia nie została zrobiona, a jak któraś z tabel ulegnie uszkodzeniu zespół wie o tym najpóźniej po 24 godzinach.