macOS需结合数据库导出命令与launchd实现可靠自动备份:SQLite用.dump或WAL同步后复制,PostgreSQL用pg_dump,MySQL用mysqldump加--single-transaction;通过plist定时执行脚本,备份存入结构化加密目录,并定期验证恢复可用性。
macos 本身不提供“本地数据库管理环境”的自动导出备份功能,time machine 也不直接备份运行中的数据库文件(如 sqlite、postgresql 或 mysql 的数据目录),尤其当数据库正在写入时,直接复制可能产生损坏快照。要实现定期、可靠、可恢复的数据库自动导出备份,需结合数据库自身导出机制 + macos 原生调度工具。以下是清晰可行的配置路径:
确认数据库类型并选择导出方式
不同数据库导出逻辑差异大,不能一概而论:
-
SQLite:单文件数据库,可用
sqlite3 your.db .dump > backup-$(date +%Y%m%d).sql直接导出为 SQL 脚本;也可用cp复制 DB 文件,但必须确保无写入——建议先sqlite3 your.db "PRAGMA wal_checkpoint(FULL)"同步 WAL。 -
PostgreSQL:推荐
pg_dump -U username -d dbname -F c -f backup-$(date +%Y%m%d).dump(自定义格式,支持压缩与增量还原);避免用pg_dumpall全局导出,除非你确实需要所有角色和数据库。 -
MySQL/MariaDB:使用
mysqldump --single-transaction --routines --triggers -u user -p dbname > backup-$(date +%Y%m%d).sql;--single-transaction是关键,保证一致性而不锁表。 -
Homebrew 安装的数据库:注意服务是否由
brew services管理,导出前建议加brew services restart postgresql(仅调试用),生产环境应避免重启,优先用导出命令本身保障一致性。
用 launchd 实现真正可靠的定时导出
macOS 推荐用 launchd 替代 cron,它能处理休眠唤醒、用户登录状态等场景,避免备份遗漏:
- 新建一个 plist 文件,例如:
~/Library/LaunchAgents/com.user.db-backup.plist - 内容中指定执行时间(如每天凌晨2:15)、工作目录、导出脚本路径,并添加
RunAtLoad和KeepAlive防止任务被系统清理 - 脚本本身建议封装成
.sh文件,开头加#!/bin/zsh,并用cd /path/to/db明确路径,避免因 launchd 工作目录不确定导致失败 - 执行
launchctl load ~/Library/LaunchAgents/com.user.db-backup.plist加载后,立即生效,无需重启
安全存储与版本管理
导出文件不能堆在桌面或主目录下,需结构化管理:
- 创建专用备份目录,如
~/Backups/db-dumps/,按数据库名分二级子目录:~/Backups/db-dumps/myapp-sqlite/ - 文件名含日期+时间戳(
%Y%m%d-%H%M%S),避免覆盖;可额外加 Git 提交记录(仅限纯 SQL 文件),方便比对变更 - 敏感数据库(如含用户凭证的 SQLite)导出后建议用
openssl enc -aes-256-cbc -salt -in dump.sql -out dump.sql.enc加密,密码单独保管 - 不依赖 Time Machine 单独保护这些导出文件——它可能跳过刚生成的文件(因未触发 fsync),建议把
~/Backups/db-dumps/加入 Time Machine 排除列表,改用 rsync 同步到外置盘或 NAS
验证备份可用性(关键一步)
自动导出≠自动可用。每周至少手动抽检一次:
- 对 SQLite 导出的 SQL 文件,用
sqlite3 test_restore.db < backup-20260501.sql快速重建,再sqlite3 test_restore.db ".tables"看表是否存在 - PostgreSQL
.dump文件可用pg_restore -l backup.dump | head -20查看内容摘要;恢复测试建议用临时数据库:createdb test_restore && pg_restore -d test_restore backup.dump - 把验证步骤也写进脚本末尾,成功则 touch 一个
last-successful-verify时间戳文件,便于监控


















