SQLite: как правильно делать копию живой базы
SQLite прекрасно подходит для маленьких домашних сервисов: один файл, никакого отдельного сервера. Но у простоты есть цена. Если скопировать файл в момент записи, копия может оказаться битой, и узнаете вы об этом в самый неудобный момент.
Онлайн-копия
У SQLite есть встроенный механизм резервного копирования, который делает согласованный снимок даже под нагрузкой. Из Python это три строки:
import sqlite3
src = sqlite3.connect("app.db")
dst = sqlite3.connect("app-copy.db")
src.backup(dst)
Проверка копии
Копия, которую ни разу не открывали, копией не считается. После каждого снимка я запускаю проверку целостности:
sqlite3 app-copy.db "PRAGMA integrity_check"
Ответ должен быть ровно ok. Всё остальное повод разбираться сегодня, а не в день, когда копия понадобится.
Правило, которое сэкономило мне выходные: бэкап, который не восстанавливали, это просто надежда.