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.
AI 代码解读
个人感觉没有太大的意义.
[测试]
-- 命令行帮助
-- 使用pg_basebackup并使用-R选项
-- 自动生成的recovery.conf文件.
[参考]
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)
AI 代码解读
-- 使用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/
AI 代码解读
-- 自动生成的recovery.conf文件.
pg93@db-172-16-3-33-> cat recovery.conf standby_mode = 'on' primary_conninfo = 'user=''postgres'' port=''1999'' sslmode=''prefer'' sslcompression=''1'' '
AI 代码解读
[参考]
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 }
AI 代码解读