我想在从站上设置流复制。
在主服务器(服务器 A。Ubuntu 18.04;Postgres 12)上:
sudo nano /etc/postgresql/12/main/postgresql.conf
- 放
listen_addresses = '*'
- postgresql.conf 设置为:
wal_level = "logical"
archive_mode = "ON"
archive_timeout = 3600
checkpoint_timeout = 600
hot_standby = "ON"
max_connections = 700
max_wal_sender = 5
max_wal_size = 16GB
min_wal_size = 2GB
max_worker_processes = 30
synchronous_commit = "OFF"
wal_log_hints = "OFF"
wal_recycle = "ON"
wal_keep_segments = 4000
wal_sync_method = "fdatasync"
此主服务器已托管到另一台服务器的逻辑复制(服务器 B。Ubuntu 18.04;Postgres 12)
在从属服务器上(服务器 C. Ubuntu 22.04;Postgres 12):
- 更改数据目录
- 将其设置为从服务器 A 的流式复制。
以下是详细信息:安装 postgres(全新安装)后,我确保它正在运行,然后更改数据目录:
sudo -u postgres psql
SHOW data_directory;
. --输出/var/lib/postgresql/12/main- 退出 psql :
\q
sudo systemctl stop postgresql
sudo systemctl status postgresql
sudo rsync -av /var/lib/postgresql /data/postgresql2
- 重命名文件夹:
sudo mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.bak
- 编辑 postgresql.conf :
sudo nano /etc/postgresql/12/main/postgresql.conf
- 设置到新位置:
data_directory = '/data/postgresql2/postgresql/12/main'
- 再次启动数据库:
sudo systemctl start postgresql
结果很好。Postgres 在服务器 C 上运行良好。当我这样做SHOW data_directory;
时,它给出了: /data/postgresql2/postgresql/12/main
然后我在服务器 C 上设置流复制:
停止从服务器上的服务:
systemctl stop [email protected]
su - postgres
然后cp -R /data/postgresql2/postgresql/12/main /data/postgresql2/postgresql/12/data_original
删除旧目录:
rm -rf /data/postgresql2/postgresql/12/main/*
然后做基础备份:
pg_basebackup -h 10.100.9.40 -p 5432 -U rep_user -D /data/postgresql2/postgresql/12/main -Fp -Xs -R -P -v
重新开始 :
systemctl start [email protected]
--给出错误:
*`Job for [email protected] failed because the service did not take the steps required by its unit configuration.
See "systemctl status [email protected]" and "journalctl -xeu [email protected]" for details`*
- 然后我开始使用另一种方式:
sudo -i -u postgres
/usr/lib/postgresql/12/bin/pg_ctl start -D /data/postgresql2/postgresql/12/main
它给出了错误:
waiting for server to start....postgres: could not access the server configuration file "/data/postgresql2/postgresql/12/main/postgresql.conf": No such file or directory
请帮忙。什么可能导致这种情况?
您忘记在备用数据库上设置复制。至少,您必须设置
restore_command
并postgresql.conf
创建standby.signal
.重命名目录和运行的整个
rsync
过程是不必要的,只需要pg_basebackup
.