Have pg_basebackup --write-recovery-conf output a minimal recovery.conf (Zoltán B?sz?rményi, Magnus Hagander)
This simplifies setting up a standby server.
个人感觉没有太大的意义.
[测试]
-- 命令行帮助
pg93@db-172-16-3-33-> pg_basebackup --help
pg_basebackup takes a base backup of a running PostgreSQL server.
Usage:
pg_basebackup [OPTION]...
Options controlling the output:
-D, --pgdata=DIRECTORY receive base backup into directory
-F, --format=p|t output format (plain (default), tar)
-R, --write-recovery-conf
write recovery.conf after backup
-x, --xlog include required WAL files in backup (fetch mode)
-X, --xlog-method=fetch|stream
include required WAL files with specified method
-z, --gzip compress tar output
-Z, --compress=0-9 compress tar output with given compression level
General options:
-c, --checkpoint=fast|spread
set fast or spread checkpointing
-l, --label=LABEL set backup label
-P, --progress show progress information
-v, --verbose output verbose messages
-V, --version output version information, then exit
-?, --help show this help, then exit
Connection options:
-d, --dbname=CONNSTR connection string
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port number
-s, --status-interval=INTERVAL
time between status packets sent to server (in seconds)
-U, --username=NAME connect as specified database user
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
-- 使用pg_basebackup并使用-R选项
pg93@db-172-16-3-33-> pg_basebackup -D /pgdata/digoal/1921/data03/test -F p --write-recovery-conf
WARNING: skipping special file "./.s.PGSQL.1999"
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
pg93@db-172-16-3-33-> cd /pgdata/digoal/1921/data03/test/
-- 自动生成的recovery.conf文件.
pg93@db-172-16-3-33-> cat recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=''postgres'' port=''1999'' sslmode=''prefer'' sslcompression=''1'' '
[参考]
1. src/bin/pg_basebackup/pg_basebackup.c
00071 /* Contents of recovery.conf to be generated */
00072 static PQExpBuffer recoveryconfcontents = NULL;
...
00680 if (basetablespace && writerecoveryconf)
00681 {
00682 char header[512];
00683 int padding;
00684
00685 tarCreateHeader(header, "recovery.conf", NULL,
00686 recoveryconfcontents->len,
00687 0600, 04000, 02000,
00688 time(NULL));
00689
00690 padding = ((recoveryconfcontents->len + 511) & ~511) - recoveryconfcontents->len;
00691
00692 WRITE_TAR_DATA(header, sizeof(header));
00693 WRITE_TAR_DATA(recoveryconfcontents->data, recoveryconfcontents->len);
00694 if (padding)
00695 WRITE_TAR_DATA(zerobuf, padding);
00696 }
...
01190 /*
01191 * Write a recovery.conf file into the directory specified in basedir,
01192 * with the contents already collected in memory.
01193 */
01194 static void
01195 WriteRecoveryConf(void)
01196 {
01197 char filename[MAXPGPATH];
01198 FILE *cf;
01199
01200 sprintf(filename, "%s/recovery.conf", basedir);
01201
01202 cf = fopen(filename, "w");
01203 if (cf == NULL)
01204 {
01205 fprintf(stderr, _("%s: could not create file \"%s\": %s\n"), progname, filename, strerror(errno));
01206 disconnect_and_exit(1);
01207 }
01208
01209 if (fwrite(recoveryconfcontents->data, recoveryconfcontents->len, 1, cf) != 1)
01210 {
01211 fprintf(stderr,
01212 _("%s: could not write to file \"%s\": %s\n"),
01213 progname, filename, strerror(errno));
01214 disconnect_and_exit(1);
01215 }
01216
01217 fclose(cf);
01218 }
时间: 2024-09-20 11:48:01