wal-g 基于 WAL 文件进行归档,增量备份机制在大数据量下可以显著节省每日备份时间。
优点
- 能增量备份,显著减轻每日全量备份的压力,对大数据量很友好
- 接近于实时备份,可恢复到任意时间点(能灵活应对脏数据污染的情况,这时候不仅仅是要恢复到停机之前状态,要更久)
- 比起每日全量备份 SQL 不会丢失日间数据
- 有命令可以删除老旧的基础备份和 WAL 文件,不会撑破备份空间(但需要配合 cron 执行 script 来实现)
缺点
- 恢复过程看起来比较复杂,没有
psql backup.sql 那么暴力直接
- 配置起来也复杂,需要把 wal-g 执行文件嵌入到 PostgreSQL 镜像用于 wal 持续备份,还需要一个用于基础备份的 wal-g。并且这两个角色要共享远程备份仓库配置。
- 需要执行 cron script 配合
角色
wal-g (以及其他类似工具) 的设计就是为了完美适配 PostgreSQL 的这种 “基础备份 + 连续日志归档” 的内置机制。
backup-push 定期执行,是为了创建恢复的基准点。(定期的快照员)
wal-push 持续执行,是为了捕获两个基准点之间的所有变化,从而实现精细到秒级的时间点恢复。(持续的归档员)
这两者缺一不可,共同构成了一个健壮、可靠的生产级数据库备份与恢复系统。
wal-g wal-push
专职于持续归档 WAL 文件,它是一个被动、简单、高效的“搬运工”。唯一任务就是把指定的 WAL 文件压缩并上传到远程存储。它不关心基础备份,也不关心删除策略,职责非常单一。
wal-g backup-push
只负责创建基础备份。它的任务是创建数据库数据文件基础备份。无论是全量(Full)还是增量(Delta),它处理的都是 PostgreSQL 数据目录中的核心数据文件。它为 PITR “画下了一条起跑线”,但它本身不直接操作或管理正在持续归档的 WAL 文件流。
wal-g delete
此命令会同时智能地清理不再需要的基础备份和与之相关的 WAL 文件。它在删除旧的基础备份时,会一并清除所有不再被任何“保留的备份”所依赖的、更早的 WAL 文件,从而安全地回收空间,防止备份存储无限增长。
TODO
参考资料
https://github.com/wal-g/wal-g/blob/master/docs/PostgreSQL.md
https://github.com/stephane-klein/playground-postgresql-walg/blob/ff6a505fa5a3590e0feeb2792b941ffc6a9ddc65/docker-image/postgres-with-wal-g/Dockerfile
wal-g 基于 WAL 文件进行归档,增量备份机制在大数据量下可以显著节省每日备份时间。
优点
缺点
psql backup.sql那么暴力直接角色
wal-g(以及其他类似工具) 的设计就是为了完美适配 PostgreSQL 的这种 “基础备份 + 连续日志归档” 的内置机制。backup-push定期执行,是为了创建恢复的基准点。(定期的快照员)wal-push持续执行,是为了捕获两个基准点之间的所有变化,从而实现精细到秒级的时间点恢复。(持续的归档员)这两者缺一不可,共同构成了一个健壮、可靠的生产级数据库备份与恢复系统。
wal-g wal-push专职于持续归档 WAL 文件,它是一个被动、简单、高效的“搬运工”。唯一任务就是把指定的 WAL 文件压缩并上传到远程存储。它不关心基础备份,也不关心删除策略,职责非常单一。
wal-g backup-push只负责创建基础备份。它的任务是创建数据库数据文件基础备份。无论是全量(Full)还是增量(Delta),它处理的都是 PostgreSQL 数据目录中的核心数据文件。它为 PITR “画下了一条起跑线”,但它本身不直接操作或管理正在持续归档的 WAL 文件流。
wal-g delete此命令会同时智能地清理不再需要的基础备份和与之相关的 WAL 文件。它在删除旧的基础备份时,会一并清除所有不再被任何“保留的备份”所依赖的、更早的 WAL 文件,从而安全地回收空间,防止备份存储无限增长。
TODO
wal-g backup-push来做每日 Delta 备份。参考资料
https://github.com/wal-g/wal-g/blob/master/docs/PostgreSQL.md
https://github.com/stephane-klein/playground-postgresql-walg/blob/ff6a505fa5a3590e0feeb2792b941ffc6a9ddc65/docker-image/postgres-with-wal-g/Dockerfile