muc*_*lux 5 linux postgresql database-restore postgresql-9.5
我使用以下命令每天备份 postgresql 数据库
/usr/bin/pg_basebackup -D $outdir -Ft -x -z -w -R -v
Run Code Online (Sandbox Code Playgroud)
现在我想在另一台服务器上恢复这个数据库。我使用了https://www.postgresql.org/docs/9.5/static/continuous-archiving.html#BACKUP-PITR-RECOVERY上的描述。
recovery.conf备份中包含的文件具有以下内容:
standby_mode = 'on'
primary_conninfo = 'user=postgres port=5432 sslmode=prefer sslcompression=1 krbsrvname=postgres'
Run Code Online (Sandbox Code Playgroud)
文档中的下一步 (8.) 说要启动 postgresql。这会由于超时而导致失败:
3783 postgres: startup process waiting for 0000000100000024000000B
Run Code Online (Sandbox Code Playgroud)
在原始服务器上我没有这个文件。是否可以在不使用任何 WAL 文件的情况下仅恢复 pg_basebackup 的状态?那么 recovery.conf 文件中应该有什么?
按照@JosMac 的建议,我用这个结果移动了 recovery.conf:
shaun2:/var/lib/pgsql/data # service postgresql start
Job for postgresql.service failed because the control process exited with error code. See "systemctl status postgresql.service" and "journalctl -xe" for details.
shaun2:/var/lib/pgsql/data # service postgresql status
â postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2018-06-18 12:02:53 CEST; 12s ago
Process: 1340 ExecStop=/usr/lib/postgresql-init stop (code=exited, status=0/SUCCESS)
Process: 9355 ExecStart=/usr/lib/postgresql-init start (code=exited, status=1/FAILURE)
Main PID: 1060 (code=exited, status=0/SUCCESS)
Jun 18 12:02:52 shaun2 postgres[9369]: [3-1] 2018-06-18 12:02:52 CEST LOG: invalid checkpoint record
Jun 18 12:02:52 shaun2 postgres[9369]: [4-1] 2018-06-18 12:02:52 CEST FATAL: could not locate required checkpoint record
Jun 18 12:02:52 shaun2 postgres[9369]: [4-2] 2018-06-18 12:02:52 CEST HINT: If you are not restoring from a backup, try removing the file "/var/lib/pgsql/data/backup_label".
Jun 18 12:02:52 shaun2 postgres[9367]: [2-1] 2018-06-18 12:02:52 CEST LOG: startup process (PID 9369) exited with exit code 1
Jun 18 12:02:52 shaun2 postgres[9367]: [3-1] 2018-06-18 12:02:52 CEST LOG: aborting startup due to startup process failure
Jun 18 12:02:53 shaun2 postgresql-init[9355]: pg_ctl: could not start server
Jun 18 12:02:53 shaun2 systemd[1]: postgresql.service: Control process exited, code=exited status=1
Jun 18 12:02:53 shaun2 systemd[1]: Failed to start PostgreSQL database server.
Jun 18 12:02:53 shaun2 systemd[1]: postgresql.service: Unit entered failed state.
Jun 18 12:02:53 shaun2 systemd[1]: postgresql.service: Failed with result 'exit-code'.
Run Code Online (Sandbox Code Playgroud)
我想 PostgreSQL 仍在寻找丢失的 WAL 文件,因为以下内容backup_label:
shaun2:/var/lib/pgsql/data # cat backup_label
START WAL LOCATION: 24/B0000028 (file 0000000100000024000000B0)
CHECKPOINT LOCATION: 24/B0000028
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2018-06-14 02:55:08 CEST
LABEL: pg_basebackup base backup
Run Code Online (Sandbox Code Playgroud)
将 backup_label 移开后的结果:
shaun2:/var/lib/pgsql/data # service postgresql status
â postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2018-06-18 12:17:54 CEST; 4s ago
Process: 1340 ExecStop=/usr/lib/postgresql-init stop (code=exited, status=0/SUCCESS)
Process: 10401 ExecStart=/usr/lib/postgresql-init start (code=exited, status=1/FAILURE)
Main PID: 1060 (code=exited, status=0/SUCCESS)
Jun 18 12:17:53 shaun2 postgres[10414]: [4-1] 2018-06-18 12:17:53 CEST LOG: invalid secondary checkpoint record
Jun 18 12:17:53 shaun2 postgres[10414]: [5-1] 2018-06-18 12:17:53 CEST PANIC: could not locate a valid checkpoint record
Jun 18 12:17:54 shaun2 postgres[10412]: [2-1] 2018-06-18 12:17:54 CEST LOG: startup process (PID 10414) was terminated by signal 6: Aborted
Run Code Online (Sandbox Code Playgroud)
我们使用 pg_basebackup 进行备份,并且还进行了几次恢复,因此通常它运行良好,没有问题。
但我建议你使用参数-X stream而不是-x(意思是“-X fetch”)。使用此参数 pg_basebackup 将捕获并存储在备份期间创建的 WAL 日志段以及数据文件。这些 WAL 日志将存储在单独的pg_xlog.tar或pg_wal.tar文件中(取决于 PG 版本)。
可以在此处找到恢复的完整说明 - pg_basebackup / pg-barman – 恢复 tar 备份