我想用不同文件系统上的数据文件和 wal 创建一个数据库。我希望通过 NFS 将 wal 放在单独的服务器上,以避免在 fs/disk 崩溃的情况下丢失数据。
wal写在哪里?
我可以通过配置将其强制到与默认位置不同的位置吗?
如果这很重要,我在 9.1 上。
谢谢。
我想用不同文件系统上的数据文件和 wal 创建一个数据库。我希望通过 NFS 将 wal 放在单独的服务器上,以避免在 fs/disk 崩溃的情况下丢失数据。
wal写在哪里?
我可以通过配置将其强制到与默认位置不同的位置吗?
如果这很重要,我在 9.1 上。
谢谢。
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 )
要将 WAL 目录复制到另一个文件路径/磁盘驱动器,请按照以下步骤操作:
/var/lib/postgresql/<version>/main/pg_wal
)复制到新文件路径rsync
。它将使用-a
标志保留文件/文件夹权限和文件夹结构。你应该放弃训练斜线。pg_wal
为( )pg_wal-backup
$PG_DATA
pg_wal
在 Postgres 数据目录 ( ) 中创建指向新路径$PG_DATA
的符号链接,并将符号链接的权限更新为postgres
用户pg_wal-backup
Postgres 数据目录中的目录 ( $PG_DATA
)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