debugsqlMinor
Postgresql Streaming Replication Error: WAL segment removed
Viewed 0 times
postgresqlerrorremovedreplicationsegmentstreamingwal
Problem
I want to set up PostgreSQL streaming replication, but get the following error:
Master IP : 192.168.0.30
Slave IP : 192.168.0.36
On Master:
I have created a user
The relevant files inside Postgres config directory (
I've restarted the
On Slave:
I've stopped the
For replicating the initial database I have done:
On Master:
Internal postgres backup start command to create a backup label:
... for transferring the database data to slave:
...for internal backup stop to clean up:
On Slave:
I've created the following
Starting the
```
ps -ef | grep -i postgres
postgres 12959 1 0 13:39 ? 00:00:00 /opt/PostgreSQL/9.3/bin/postgres -D /opt/PostgreSQL/9.3/data
postgres 12969 12959 0 13:39 ?
FATAL: could not receive data from WAL stream:
ERROR: requested WAL segment 00000001000000000000006A has already been removed.Master IP : 192.168.0.30
Slave IP : 192.168.0.36
On Master:
I have created a user
rep which is used solely for replication.The relevant files inside Postgres config directory (
/opt/Postgres/9.3/data):pg_hba.conf:host replication rep 192.168.0.36/32 trustpostgresql.conf:listen_addresses = 'localhost,192.168.0.30'
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = onI've restarted the
postgres service.On Slave:
I've stopped the
postgres service, then applied the changes to the two files:pg_hba.conf:host replication rep 192.168.0.30/32 trustpostgresql.conf:listen_addresses = 'localhost,192.168.0.36'
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = onFor replicating the initial database I have done:
On Master:
Internal postgres backup start command to create a backup label:
psql -c "select pg_start_backup('initial_backup');"... for transferring the database data to slave:
rsync -cva --inplace --exclude=*pg_xlog* /opt/Postgresql/9.3/data/ 192.168.0.36:/opt/Postgresql/9.3/data/...for internal backup stop to clean up:
psql -c "select pg_stop_backup();"On Slave:
I've created the following
recovery.conf:standby_mode = 'on'
primary_conninfo = 'host=192.168.0.30 port=5432 user=rep password=yourpassword'
trigger_file = '/tmp/postgresql.trigger.5432'Starting the
postgres service on the slave starts without any errors but is still waiting:```
ps -ef | grep -i postgres
postgres 12959 1 0 13:39 ? 00:00:00 /opt/PostgreSQL/9.3/bin/postgres -D /opt/PostgreSQL/9.3/data
postgres 12969 12959 0 13:39 ?
Solution
From Streaming Replication in the PostgreSQL documentation:
If you use streaming replication without file-based continuous archiving, the server might recycle old WAL segments before the standby has received them. If this occurs, the standby will need to be reinitialized from a new base backup. You can avoid this by setting
If you use streaming replication without file-based continuous archiving, the server might recycle old WAL segments before the standby has received them. If this occurs, the standby will need to be reinitialized from a new base backup. You can avoid this by setting
wal_keep_segments to a value large enough to ensure that WAL segments are not recycled too early, or by configuring a replication slot for the standby. If you set up a WAL archive that's accessible from the standby, these solutions are not required, since the standby can always use the archive to catch up provided it retains enough segments.Context
StackExchange Database Administrators Q#125220, answer score: 4
Revisions (0)
No revisions yet.