Самая частая ошибка с резервными копиями — хранить их там же, где данные. Архив в соседней папке спасает от неудачной правки, но не от того, что хостер потерял машину целиком. А такое случается чаще, чем хочется думать.
Рабочее правило простое: данные живут в трёх местах. На самой машине — свежий снимок, чтобы быстро откатиться. На другой машине — копии за последние недели. В облаке — зашифрованный архив на случай, если пропадут обе машины.
Пусть копии забирает отдельный сервер, а не присылает рабочий. Тогда рабочая машина не знает, где лежат архивы, и не сможет их стереть, даже если её взломают.
Копия, которую ни разу не восстанавливали, — надежда, а не копия. Каждую ночь стоит распаковывать свежий архив и проверять базу:
sqlite3 restore/app.db 'pragma integrity_check'
# ok
И отдельно следить, чтобы самая свежая копия была не старше суток. Тишина в журнале не значит, что всё в порядке: она может значить, что задача просто не запускалась.