Skip to content

SQLite 冷备份

本文档详细介绍 SQLite 数据库的冷备份实现原理和操作步骤。冷备份是指在数据库关闭或只读模式下进行备份,简单可靠,但可能影响业务可用性。

版本差异

不同版本的冷备份支持

SQLite 版本冷备份特性说明
3.44.x增强的只读模式改进了只读模式下的性能和稳定性
3.30.xWAL 文件优化改进了 WAL 模式下的文件处理,便于冷备份
3.25.x增量 VACUUM支持增量 VACUUM,减少冷备份前的维护时间
3.18.x基本冷备份支持支持基本的冷备份操作
3.7.xWAL 模式引入引入 WAL 模式,需要同时备份 WAL 文件

版本兼容性考虑

  • 对于使用 WAL 模式的数据库,建议使用 3.7.x 及以上版本
  • 对于需要频繁冷备份的场景,建议使用 3.30.x 及以上版本
  • 旧版本 SQLite 可能需要额外的备份步骤来确保数据一致性

冷备份原理

冷备份通过以下机制实现:

  1. 文件系统级复制:直接复制数据库文件到备份位置
  2. 数据库关闭状态:在数据库关闭或只读模式下进行备份,确保数据一致性
  3. 简单可靠:不需要复杂的备份工具或 API,只需使用文件系统命令

冷备份方法

基本冷备份

关闭数据库连接

在进行冷备份前,需要确保所有数据库连接已关闭:

  • 停止使用数据库的应用程序
  • 确保没有其他进程连接到数据库

复制数据库文件

使用文件系统命令复制数据库文件:

bash
# Linux/macOS
cp database.db backup.db

# Windows
copy database.db backup.db

带校验的冷备份

bash
# 复制数据库文件
cp database.db backup.db

# 验证复制完整性
md5sum database.db backup.db
# 或
sha256sum database.db backup.db

压缩备份

bash
# 复制并压缩数据库文件
tar -czvf backup.tar.gz database.db

# 或使用 zip
zip backup.zip database.db

多版本备份

bash
# 创建带时间戳的备份
cp database.db backup_$(date +%Y%m%d_%H%M%S).db

只读模式冷备份

如果无法完全关闭数据库,可以将数据库设置为只读模式进行备份:

bash
# 设置数据库为只读模式
sqlite3 database.db "PRAGMA query_only = ON;"

# 复制数据库文件
cp database.db backup.db

# 恢复为读写模式
sqlite3 database.db "PRAGMA query_only = OFF;"

冷备份最佳实践

选择合适的备份时机

  • 在业务低峰期或维护窗口进行备份
  • 确保备份过程中没有应用程序访问数据库

验证备份完整性

  • 使用校验和验证备份文件的完整性
  • 定期进行恢复测试,确保备份可用于恢复

备份所有相关文件

  • 备份主数据库文件
  • 备份 WAL 文件(如果使用 WAL 模式)
  • 备份配置文件(如果有)

存储策略

  • 遵循 3-2-1 备份原则
  • 存储在不同介质上
  • 考虑异地存储
  • 定期清理过期备份

文档化备份过程

  • 记录备份步骤
  • 记录备份存储位置
  • 记录恢复方法

冷备份与热备份比较

特性冷备份热备份
实现复杂度简单复杂
业务影响可能影响可用性无影响
备份一致性
备份速度相对较慢
恢复速度相对较慢
适用场景非关键业务、维护窗口关键业务、24/7 服务

常见问题(FAQ)

Q: 冷备份需要关闭数据库吗?

A: 是的,为了确保数据一致性,冷备份需要在数据库关闭或只读模式下进行。

Q: 冷备份可以备份 WAL 文件吗?

A: 是的,建议同时备份 WAL 文件,特别是在使用 WAL 模式时。

Q: 如何确保冷备份的一致性?

A: 在数据库关闭或只读模式下进行备份,确保没有其他进程修改数据库文件。

Q: 冷备份和热备份哪个更好?

A: 取决于业务需求。冷备份简单可靠,适合非关键业务;热备份不影响业务可用性,适合关键业务。