This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Restore Mailu's SQLite snapshot without replacing the live database inode."""
|
||||
|
||||
import sqlite3
|
||||
from pathlib import Path
|
||||
|
||||
backup_path = Path("/data/backup/main.db")
|
||||
live_path = Path("/data/main.db")
|
||||
|
||||
# The source and destination must already exist. A missing snapshot or live
|
||||
# database is a restore failure, not a reason to create an empty database.
|
||||
with sqlite3.connect(
|
||||
f"{backup_path.as_uri()}?mode=ro", uri=True, timeout=60
|
||||
) as source:
|
||||
if source.execute("PRAGMA integrity_check").fetchall() != [("ok",)]:
|
||||
raise RuntimeError(f"Invalid SQLite snapshot: {backup_path}")
|
||||
with sqlite3.connect(
|
||||
f"{live_path.as_uri()}?mode=rw", uri=True, timeout=60
|
||||
) as destination:
|
||||
source.backup(destination, pages=256, sleep=0.1)
|
||||
|
||||
print(f"SQLite restore complete: {live_path}", flush=True)
|
||||
Reference in New Issue
Block a user