要解决的问题
SQLite 数据可能涉及 WAL 等伴随文件。对于运行中的数据库,直接复制某一个文件不能被简单视为一致性备份。可以通过数据库连接提供的备份接口生成另一个数据库,再实际读取备份检查样本数据。
适用环境
Python 3.12 的 sqlite3 标准库;示例仅创建并清理自己的临时目录,不连接本站生产数据库。
操作步骤与示例
先运行下面的小样本,再把输入替换为自己的资料;保留原始文件副本。
import sqlite3
import tempfile
from pathlib import Path
from contextlib import closing
with tempfile.TemporaryDirectory() as folder:
source_path = Path(folder) / "source.sqlite3"
copy_path = Path(folder) / "copy.sqlite3"
with closing(sqlite3.connect(source_path)) as source:
source.execute("CREATE TABLE notes(id INTEGER PRIMARY KEY, title TEXT)")
source.execute("INSERT INTO notes VALUES(1,?)", ("备份样本",))
source.commit()
with closing(sqlite3.connect(copy_path)) as destination:
source.backup(destination)
with closing(sqlite3.connect(copy_path)) as check:
assert check.execute("PRAGMA quick_check").fetchone()[0] == "ok"
assert check.execute("SELECT title FROM notes WHERE id=1").fetchone()[0] == "备份样本"
print("备份结构和样本记录核对通过")如何判断结果
运行应报告结构和样本记录通过。示例把备份写入不同路径,并关闭连接后重新打开备份,避免只检查内存中的对象。实际应用还需要核对关键记录、权限与恢复流程。
常见问题与排查
备份命令运行成功,不表示备份一定覆盖预期业务时间点,也不代表文件已经异地保存。不要把输出路径设为正在使用的源库;遇到锁、磁盘空间或权限问题时先确认原因。
适用边界
本例不是本站生产恢复操作。真正恢复前应停写并按应用流程处理数据库及伴随文件,保留原件和失败现场。结构检查不能代替完整的业务恢复演练。