PostgreSQL - 单个存档文件是否只包含集群上特定数据库的信息,还是包含整个集群?
PostgreSQL - Does a single archive file contain information for only a specific database on a cluster or is it the entire cluster?
注意:这个问题是关于 PostgreSQL 版本 13 的。
在我的 Ubuntu 服务器上,我有一个名为 main
的集群,其中有 2 个数据库(第一个用于水果公司,第二个用于汽车公司)。
这是我的 postgresql.conf 文件设置:
wal_level = replica
archive_mode = on
archive_command = 'pxz --compress --keep --force -6 --to-stdout --quiet %p > /datadrive/postgresql/13/wal_archives/%f.xz'
这会按预期在 /datadrive/postgresql/13/wal_archives/
中创建 .xz 文件。
例如:文件名可能如下所示:
0000000100000460000000A4.xz
现在我对这个归档过程的问题如下:
- 这个特定的 .xz 文件是 postgresql 集群中所有数据库的存档吗?也就是说,这个特定的 xz 文件是否包含水果和汽车数据库的存档,还是只包含其中一个的存档?
- 什么是存档文件?它只是一个单独的 WAL 文件还是一个归档点 + 一个 WAL 文件?
我已经阅读了找到的官方文档 here and here 并且还查看了大量的 Whosebug 和数据库堆栈交换问题,但未能很好地理解存档概念。
这样的文件称为“WAL段”。 WAL是“write ahead log”的缩写,是事务日志,包含了对整个数据库集群重放数据修改所需的信息。所以它包含集群中所有数据库的数据。
WAL 是一个无穷无尽的仅附加流,它被分成固定大小的段。 WAL 存档只不过是 WAL 段的忠实副本。
WAL 归档与基本备份一起使用以执行时间点恢复。 WAL 文件的其他用途是崩溃恢复和复制,但这些不需要存档的 WAL 段。
注意:这个问题是关于 PostgreSQL 版本 13 的。
在我的 Ubuntu 服务器上,我有一个名为 main
的集群,其中有 2 个数据库(第一个用于水果公司,第二个用于汽车公司)。
这是我的 postgresql.conf 文件设置:
wal_level = replica
archive_mode = on
archive_command = 'pxz --compress --keep --force -6 --to-stdout --quiet %p > /datadrive/postgresql/13/wal_archives/%f.xz'
这会按预期在 /datadrive/postgresql/13/wal_archives/
中创建 .xz 文件。
例如:文件名可能如下所示:
0000000100000460000000A4.xz
现在我对这个归档过程的问题如下:
- 这个特定的 .xz 文件是 postgresql 集群中所有数据库的存档吗?也就是说,这个特定的 xz 文件是否包含水果和汽车数据库的存档,还是只包含其中一个的存档?
- 什么是存档文件?它只是一个单独的 WAL 文件还是一个归档点 + 一个 WAL 文件?
我已经阅读了找到的官方文档 here and here 并且还查看了大量的 Whosebug 和数据库堆栈交换问题,但未能很好地理解存档概念。
这样的文件称为“WAL段”。 WAL是“write ahead log”的缩写,是事务日志,包含了对整个数据库集群重放数据修改所需的信息。所以它包含集群中所有数据库的数据。
WAL 是一个无穷无尽的仅附加流,它被分成固定大小的段。 WAL 存档只不过是 WAL 段的忠实副本。
WAL 归档与基本备份一起使用以执行时间点恢复。 WAL 文件的其他用途是崩溃恢复和复制,但这些不需要存档的 WAL 段。