PostgreSQL的WAL日志文件位于哪里?如何指定不同的路径?

13

我希望在不同的文件系统上创建带有数据文件和WAL的数据库。我希望将WAL放在通过NFS连接的独立服务器上,以避免在文件系统/磁盘崩溃时丢失数据。

WAL日志写在哪里?

我能否通过配置强制将其写入到与默认位置不同的位置?

如果有影响的话,我的版本是9.1。

谢谢。


1
如果一个带有WAL的独立服务器出现“fs / disk崩溃”,你会怎么做?“将WAL放在单独的机器上”的整个想法听起来并不好。 - Ihor Romanchenko
@IgorRomanchenko:Postgres维基说:“您可以考虑将WAL(pg_xlog目录)移到单独的磁盘上,以减轻数据库其他部分的I/O负载”(请参见我的回答中的链接)。 - user330315
1
在我看来,将WAL放在NFS挂载上是一个不好的主意。你想要最佳的性能和可靠性,我认为NFS挂载无法提供这一点。 - Will
1
@a_horse_with_no_name 在不同的磁盘上,但不在不同的机器上。单独使用磁盘的原因是为了分离I/O以获得更好的性能。将WAL移动到单独的机器上不会带来性能优势(很可能会产生相反的效果)。而且涉及两台机器,如果任何一台机器崩溃,您的数据库将崩溃 -> 可靠性较低。 - Ihor Romanchenko
1
@YvesDorfsman 1)使用同步复制,不会出现数据丢失的情况(并且它可能比“NFS上的WAL”更快)。2)如果正确设置,数据库连接可以使用SSL加密(与ssh中使用的相同加密方法)。3)使用“NFS上的WAL”时,如果NFS未正确执行fsync,则可能会出现数据丢失的情况。 - Ihor Romanchenko
显示剩余8条评论
2个回答

23

WAL文件被写入数据目录内的pg_xlog目录。从Postgres 10开始,该目录更名为pg_wal

例如:/var/lib/postgresql/10/main/pg_wal

详见手册:

如果我没有弄错的话,该目录名称不能更改。但可以将其作为符号链接指向不同的磁盘。

实际上,这是调整WAL性能的推荐方法(参见此处:http://wiki.postgresql.org/wiki/Installation_and_Administration_Best_practices#WAL_Directory


1
不过,要在谷歌上搜索postgresql+nfs。如果您的NFS设置不是100%稳定的,那么您将为自己带来麻烦。 - Richard Huxton
1
希望@Yves和读者不会错过其中的讽刺,尽管答案基于性能建议(将xlog通道到不同的磁盘以获得更多带宽),但问题是关于将xlog放在远程存储上,这很可能会成为无法忍受的性能杀手。 - Daniel Vérité
@DanielVérité 我确实理解性能惩罚的问题。我正在关注IgorRomancheko有关通过SSL进行流传输的评论,经过一些谷歌搜索,这可能比在NFS上执行wal更容易,并且正如你们许多人所评论的那样,不会那么麻烦。 - Yves Dorfsman
3
自PostgreSQL 10开始,该目录被称为pg_wal,而不是pg_xlog。 - tomsv

6

要将WAL目录复制到另一个文件路径/磁盘驱动器,请按照以下步骤执行:

详细步骤

  1. 关闭Postgres以防止损坏。
  2. 使用rsync将WAL目录(默认情况下位于Ubuntu的/var/lib/postgresql/<version>/main/pg_wal)复制到新的文件路径。使用-a标志,可以保留文件/文件夹权限和文件夹结构。您应该省略训练斜杠。
  3. 验证已正确复制内容。
  4. 在Postgres数据目录($PG_DATA)中将pg_wal重命名为pg_wal-backup
  5. 为新路径创建一个符号链接,连接到Postgres数据目录($PG_DATA)的pg_wal,并更新符号链接的权限为postgres用户。
  6. 启动Postgres并验证是否可以连接到数据库。
  7. 可选地,删除Postgres数据目录($PG_DATA)中的pg_wal-backup目录。

匹配命令

sudo service postgresql stop

sudo rsync -av /var/lib/postgresql/12/main/pg_wal /<new_path>
ls -la /<new_path>

sudo mv /var/lib/postgresql/12/main/pg_wal /var/lib/postgresql/12/main/pg_wal-backup
sudo ln -s /<new_path> /var/lib/postgresql/12/main/pg_wal
sudo chown -h postgres:postgres /var/lib/postgresql/12/main/pg_wal

sudo service postgresql start && sudo service postgresql status
# Verify DB connection using your db credentials/information
psql -h localhost -U postgres -p 5432

rm -rf /var/lib/postgresql/12/main/pg_wal-backup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接