1
0
mirror of https://github.com/postgrespro/pg_probackup.git synced 2025-02-03 14:01:57 +02:00

Remove server backup feature

In order to keep only the core of pg_rman for incremental/differential
backup, this looks necessary and makes the code more simple. Including
server log files in a backup could be subject to discussion as well,
as for example a Postgres base backup does not include them, just
because in this case server instance is not aware of the log files.
This commit is contained in:
Michael Paquier 2014-01-24 20:37:13 +09:00
parent f9a3d799af
commit 5988e6bd10
21 changed files with 34 additions and 333 deletions

107
backup.c
View File

@ -1,6 +1,6 @@
/*-------------------------------------------------------------------------
*
* backup.c: backup DB cluster, archived WAL, serverlog.
* backup.c: backup DB cluster, archived WAL
*
* Copyright (c) 2009-2013, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
*
@ -42,7 +42,6 @@ static void backup_files(const char *from_root, const char *to_root,
parray *files, parray *prev_files, const XLogRecPtr *lsn, bool compress, const char *prefix);
static parray *do_backup_database(parray *backup_list, pgBackupOption bkupopt);
static parray *do_backup_arclog(parray *backup_list);
static parray *do_backup_srvlog(parray *backup_list);
static void confirm_block_size(const char *name, int blcksz);
static void pg_start_backup(const char *label, bool smooth, pgBackup *backup);
static void pg_stop_backup(pgBackup *backup);
@ -567,100 +566,17 @@ do_backup_arclog(parray *backup_list)
return files;
}
/*
* Take a backup of serverlog.
*/
static parray *
do_backup_srvlog(parray *backup_list)
{
int i;
parray *files;
parray *prev_files = NULL; /* file list of previous database backup */
char path[MAXPGPATH];
char prev_file_txt[MAXPGPATH];
pgBackup *prev_backup;
int64 srvlog_write_bytes = 0;
if (!current.with_serverlog)
return NULL;
/* Block backup operations on a standby */
if (pg_is_standby())
elog(ERROR_SYSTEM, _("Backup cannot run on a standby."));
if (verbose)
{
printf(_("========================================\n"));
printf(_("serverlog backup start\n"));
}
/* initialize size summary */
current.srvlog_bytes = 0;
/*
* To take incremental backup, the file list of the last completed database
* backup is needed.
*/
prev_backup = catalog_get_last_srvlog_backup(backup_list,
get_current_timeline());
if (verbose && prev_backup == NULL)
printf(_("no previous full backup, performing a full backup instead\n"));
if (prev_backup)
{
pgBackupGetPath(prev_backup, prev_file_txt, lengthof(prev_file_txt),
SRVLOG_FILE_LIST);
prev_files = dir_read_file_list(srvlog_path, prev_file_txt);
}
/* list files with the logical path. omit SRVLOG_PATH */
files = parray_new();
dir_list_file(files, srvlog_path, NULL, true, false);
pgBackupGetPath(&current, path, lengthof(path), SRVLOG_DIR);
backup_files(srvlog_path, path, files, prev_files, NULL, false, NULL);
/* create file list */
create_file_list(files, arclog_path, SRVLOG_FILE_LIST, NULL, false);
/* print summary of size of backup mode files */
for (i = 0; i < parray_num(files); i++)
{
pgFile *file = (pgFile *) parray_get(files, i);
if (!S_ISREG(file->mode))
continue;
current.srvlog_bytes += file->read_size;
if (file->write_size != BYTES_INVALID)
{
current.backup_bytes += file->write_size;
srvlog_write_bytes += file->write_size;
}
}
if (verbose)
{
printf(_("serverlog backup completed(read: " INT64_FORMAT " write: " INT64_FORMAT ")\n"),
current.srvlog_bytes, srvlog_write_bytes);
printf(_("========================================\n"));
}
return files;
}
int
do_backup(pgBackupOption bkupopt)
{
parray *backup_list;
parray *files_database;
parray *files_arclog;
parray *files_srvlog;
int ret;
/* repack the necesary options */
int keep_arclog_files = bkupopt.keep_arclog_files;
int keep_arclog_days = bkupopt.keep_arclog_days;
int keep_srvlog_files = bkupopt.keep_srvlog_files;
int keep_srvlog_days = bkupopt.keep_srvlog_days;
int keep_data_generations = bkupopt.keep_data_generations;
int keep_data_days = bkupopt.keep_data_days;
@ -680,11 +596,6 @@ do_backup(pgBackupOption bkupopt)
_("Required parameter not specified: ARCLOG_PATH "
"(-A, --arclog-path)"));
/* SRVLOG_PATH is required only when backup serverlog */
if (current.with_serverlog && srvlog_path == NULL)
elog(ERROR_ARGS, _("required parameter not specified: SRVLOG_PATH "
"(-S, --srvlog-path)"));
#ifndef HAVE_LIBZ
if (current.compress_data)
{
@ -727,7 +638,6 @@ do_backup(pgBackupOption bkupopt)
current.end_time = (time_t) 0;
current.data_bytes = BYTES_INVALID;
current.arclog_bytes = BYTES_INVALID;
current.srvlog_bytes = BYTES_INVALID;
current.backup_bytes = 0;
current.block_size = BLCKSZ;
current.wal_block_size = XLOG_BLCKSZ;
@ -757,9 +667,6 @@ do_backup(pgBackupOption bkupopt)
/* backup archived WAL */
files_arclog = do_backup_arclog(backup_list);
/* backup serverlog */
files_srvlog = do_backup_srvlog(backup_list);
pgut_atexit_pop(backup_cleanup, NULL);
/* update backup status to DONE */
@ -781,10 +688,6 @@ do_backup(pgBackupOption bkupopt)
current.backup_mode == BACKUP_MODE_INCREMENTAL)
total_read += current.arclog_bytes;
/* Server logs */
if (current.with_serverlog)
total_read += current.srvlog_bytes;
if (total_read == 0)
printf(_("nothing to backup\n"));
else
@ -795,13 +698,10 @@ do_backup(pgBackupOption bkupopt)
}
/*
* Delete old files (archived WAL and serverlog) after update of status.
* Delete old files (archived WAL) after update of status.
*/
delete_old_files(arclog_path, files_arclog, keep_arclog_files,
keep_arclog_days, true);
if (current.with_serverlog)
delete_old_files(srvlog_path, files_srvlog, keep_srvlog_files,
keep_srvlog_days, false);
/* Delete old backup files after all backup operation. */
pgBackupDelete(keep_data_generations, keep_data_days);
@ -813,9 +713,6 @@ do_backup(pgBackupOption bkupopt)
if (files_arclog)
parray_walk(files_arclog, pgFileFree);
parray_free(files_arclog);
if (files_srvlog)
parray_walk(files_srvlog, pgFileFree);
parray_free(files_srvlog);
/*
* If this backup is full backup, delete backup of online WAL.

View File

@ -160,7 +160,7 @@ catalog_get_backup_list(const pgBackupRange *range)
if (!IsDir(backup_path, date_dir, date_ent) || date_ent->d_name[0] == '.')
continue;
/* skip online WAL & serverlog backup directory */
/* skip online WAL backup directory */
if (strcmp(date_ent->d_name, RESTORE_WORK_DIR) == 0)
continue;
@ -292,38 +292,13 @@ catalog_get_last_arclog_backup(parray *backup_list, TimeLineID tli)
return NULL;
}
/*
* Find the last completed serverlog backup from the backup list
* on current timeline.
*/
pgBackup *
catalog_get_last_srvlog_backup(parray *backup_list, TimeLineID tli)
{
int i;
pgBackup *backup = NULL;
/* backup_list is sorted in order of descending ID */
for (i = 0; i < parray_num(backup_list); i++)
{
backup = (pgBackup *) parray_get(backup_list, i);
/* we need completed serverlog backup */
if (backup->status == BACKUP_STATUS_OK &&
backup->with_serverlog &&
backup->tli == tli)
return backup;
}
return NULL;
}
/* create backup directory in $BACKUP_PATH */
int
pgBackupCreateDir(pgBackup *backup)
{
int i;
char path[MAXPGPATH];
char *subdirs[] = { DATABASE_DIR, ARCLOG_DIR, SRVLOG_DIR, NULL };
char *subdirs[] = { DATABASE_DIR, ARCLOG_DIR, NULL };
pgBackupGetPath(backup, path, lengthof(path), NULL);
dir_create_dir(path, DIR_PERMISSION);
@ -349,7 +324,6 @@ pgBackupWriteConfigSection(FILE *out, pgBackup *backup)
fprintf(out, "# configuration\n");
fprintf(out, "BACKUP_MODE=%s\n", modes[backup->backup_mode]);
fprintf(out, "WITH_SERVERLOG=%s\n", BOOL_TO_STR(backup->with_serverlog));
fprintf(out, "COMPRESS_DATA=%s\n", BOOL_TO_STR(backup->compress_data));
}
@ -390,9 +364,6 @@ pgBackupWriteResultSection(FILE *out, pgBackup *backup)
if (backup->arclog_bytes != BYTES_INVALID)
fprintf(out, "ARCLOG_BYTES=" INT64_FORMAT "\n",
backup->arclog_bytes);
if (backup->srvlog_bytes != BYTES_INVALID)
fprintf(out, "SRVLOG_BYTES=" INT64_FORMAT "\n",
backup->srvlog_bytes);
if (backup->backup_bytes != BYTES_INVALID)
fprintf(out, "BACKUP_BYTES=" INT64_FORMAT "\n",
backup->backup_bytes);
@ -443,7 +414,6 @@ catalog_read_ini(const char *path)
pgut_option options[] =
{
{ 's', 0, "backup-mode" , NULL, SOURCE_ENV },
{ 'b', 0, "with-serverlog" , NULL, SOURCE_ENV },
{ 'b', 0, "compress-data" , NULL, SOURCE_ENV },
{ 'u', 0, "timelineid" , NULL, SOURCE_ENV },
{ 's', 0, "start-lsn" , NULL, SOURCE_ENV },
@ -454,7 +424,6 @@ catalog_read_ini(const char *path)
{ 't', 0, "recovery-time" , NULL, SOURCE_ENV },
{ 'I', 0, "data-bytes" , NULL, SOURCE_ENV },
{ 'I', 0, "arclog-bytes" , NULL, SOURCE_ENV },
{ 'I', 0, "srvlog-bytes" , NULL, SOURCE_ENV },
{ 'I', 0, "backup-bytes" , NULL, SOURCE_ENV },
{ 'u', 0, "block-size" , NULL, SOURCE_ENV },
{ 'u', 0, "xlog-block-size" , NULL, SOURCE_ENV },
@ -471,7 +440,6 @@ catalog_read_ini(const char *path)
i = 0;
options[i++].var = &backup_mode;
options[i++].var = &backup->with_serverlog;
options[i++].var = &backup->compress_data;
options[i++].var = &backup->tli;
options[i++].var = &start_lsn;
@ -482,7 +450,6 @@ catalog_read_ini(const char *path)
options[i++].var = &backup->recovery_time;
options[i++].var = &backup->data_bytes;
options[i++].var = &backup->arclog_bytes;
options[i++].var = &backup->srvlog_bytes;
options[i++].var = &backup->backup_bytes;
options[i++].var = &backup->block_size;
options[i++].var = &backup->wal_block_size;
@ -620,7 +587,6 @@ void
catalog_init_config(pgBackup *backup)
{
backup->backup_mode = BACKUP_MODE_INVALID;
backup->with_serverlog = false;
backup->compress_data = false;
backup->status = BACKUP_STATUS_INVALID;
backup->tli = 0;
@ -632,6 +598,5 @@ catalog_init_config(pgBackup *backup)
backup->recovery_time = (time_t) 0;
backup->data_bytes = BYTES_INVALID;
backup->arclog_bytes = BYTES_INVALID;
backup->srvlog_bytes = BYTES_INVALID;
backup->backup_bytes = BYTES_INVALID;
}

View File

@ -1,6 +1,5 @@
# configuration
BACKUP_MODE=FULL
WITH_SERVERLOG=NO
COMPRESS_DATA=NO
# result
TIMELINEID=1
@ -10,7 +9,6 @@ START_TIME='2009-05-31 17:05:53'
END_TIME='2009-05-31 17:09:13'
DATA_BYTES=1242102558
ARCLOG_BYTES=9223372036854775807
SRVLOG_BYTES=-1
BACKUP_BYTES=242102558
BLOCK_SIZE=8192
XLOG_BLOCK_SIZE=8192

View File

@ -1,6 +1,5 @@
# configuration
BACKUP_MODE=INCREMENTAL
WITH_SERVERLOG=NO
COMPRESS_DATA=NO
# result
TIMELINEID=1
@ -10,7 +9,6 @@ START_TIME='2009-06-01 17:05:53'
END_TIME='2009-06-01 17:09:13'
DATA_BYTES=9223372036854775807
ARCLOG_BYTES=16777216
SRVLOG_BYTES=-1
BACKUP_BYTES=162372983
BLOCK_SIZE=8192
XLOG_BLOCK_SIZE=8192

View File

@ -1,6 +1,5 @@
# configuration
BACKUP_MODE=ARCHIVE
WITH_SERVERLOG=YES
COMPRESS_DATA=NO
# result
TIMELINEID=1
@ -10,7 +9,6 @@ START_TIME='2009-06-02 17:05:03'
END_TIME='2009-06-02 17:05:03'
DATA_BYTES=-1
ARCLOG_BYTES=-1
SRVLOG_BYTES=4335423
BACKUP_BYTES=162372983
BLOCK_SIZE=8192
XLOG_BLOCK_SIZE=8192

View File

@ -1,6 +1,5 @@
# configuration
BACKUP_MODE=FULL
WITH_SERVERLOG=YES
COMPRESS_DATA=NO
# result
TIMELINEID=1
@ -10,7 +9,6 @@ START_TIME='2009-06-03 17:05:53'
END_TIME='2009-06-03 17:05:53'
DATA_BYTES=-1
ARCLOG_BYTES=-1
SRVLOG_BYTES=-1
BACKUP_BYTES=-1
BLOCK_SIZE=8192
XLOG_BLOCK_SIZE=8192

View File

@ -199,8 +199,6 @@ pgBackupDeleteFiles(pgBackup *backup)
dir_list_file(files, path, NULL, true, true);
pgBackupGetPath(backup, path, lengthof(path), ARCLOG_DIR);
dir_list_file(files, path, NULL, true, true);
pgBackupGetPath(backup, path, lengthof(path), SRVLOG_DIR);
dir_list_file(files, path, NULL, true, true);
/* delete leaf node first */
parray_qsort(files, pgFileComparePathDesc);

1
dir.c
View File

@ -25,7 +25,6 @@ const char *pgdata_exclude[] =
"pg_stat_tmp",
"pgsql_tmp",
NULL, /* arclog_path will be set later */
NULL, /* srvlog_path will be set later */
NULL, /* 'pg_tblspc' will be set later */
NULL, /* sentinel */
};

View File

@ -21,8 +21,8 @@ files.
== DESCRIPTION ==
pg_rman is a utility program to backup and restore PostgreSQL database.
It takes a physical online backup of whole database cluster, archive
WALs, and server logs.
It takes a physical online backup of whole database cluster and archive
WALs.
It proposes the following features:
@ -71,7 +71,7 @@ specify it in PGDATA environmental variable or -D/--pgdata option.
=== BACKUP ===
Backup target can be one of the following types also serverlogs can be added):
Backup target can be one of the following types:
- Full backup, backup a whole database cluster.
- Incremental backup, backup only files or pages modified after the last
@ -107,22 +107,19 @@ write default configuration into ${BACKUP_PATH}/pg_rman.ini.
$ cat $BACKUP_PATH/pg_rman.ini
ARCLOG_PATH = /home/postgres/arclog
SRVLOG_PATH = /home/postgres/pgdata/pg_log
BACKUP_MODE = F
COMPRESS_DATA = YES
KEEP_ARCLOG_FILES = 10
KEEP_ARCLOG_DAYS = 10
KEEP_DATA_GENERATIONS = 3
KEEP_DATA_DAYS = 120
KEEP_SRVLOG_FILES = 10
KEEP_SRVLOG_DAYS = 10
=== TAKE A BACKUP ===
This example takes a full backup of the whole database with server logs.
Then, it validates all unvalidated backups.
This example takes a full backup of the whole database. Then, it validates
all unvalidated backups.
$ pg_rman backup --backup-mode=full --with-serverlog
$ pg_rman backup --backup-mode=full
$ pg_rman validate
=== RESTORE FROM A BACKUP ===
@ -168,7 +165,6 @@ When a date is specified, more details about a backup is retrieved:
$ pg_rman show '2011-11-27 19:15:45'
# configuration
BACKUP_MODE=FULL
WITH_SERVERLOG=false
COMPRESS_DATA=false
# result
TIMELINEID=1
@ -209,10 +205,6 @@ absolute paths; relative paths are not allowed.
The absolute path of archive WAL directory. Required on backup
and restore.
*-S* _PATH_ / *--srvlog-path*=_PATH_::
The absolute path of server log directory. Required on backup with
server logs and restore.
*-B* _PATH_ / *--backup-path*=_PATH_::
The absolute path of backup catalog. This option is mandatory.
@ -232,9 +224,6 @@ absolute paths; relative paths are not allowed.
Abbreviated forms (prefix match) are also available. For example,
-b f means "full" backup.
*-s* / *--with-serverlog*::
Backup server log files if specified.
*-Z* / *--compress-data*::
Compress backup files with zlib if specified.
@ -259,15 +248,6 @@ absolute paths; relative paths are not allowed.
--keep-arclog-days means days to be kept. When backup is run, only
files exceeded one of those settings are deleted from archive storage.
*--keep-srvlog-files*=_NUMBER_ / *--keep-srvlog-days*=_DAYS_::
Specify how long backuped serverlog files will be kept.
--keep-srvlog-files means number of backup files.
--keep-srvlog-days means days to be kept.
When backup is run, only files exceeded one of those settings are
deleted from server log directory (log_directory). This option works
when you specify --with-serverlog and --srvlog-path options in backup
command.
=== RESTORE OPTIONS ===
The parameters whose name start are started with --recovery refer to
@ -358,16 +338,12 @@ variables or in configuration file as follows:
-D --pgdata PGDATA Yes
-B --backup-path BACKUP_PATH Yes
-A --arclog-path ARCLOG_PATH Yes
-S --srvlog-path SRVLOG_PATH Yes
-b --backup-mode BACKUP_MODE Yes
-s --with-serverlog WITH_SERVERLOG Yes
-Z --compress-data COMPRESS_DATA Yes
-C --smooth-checkpoint SMOOTH_CHECKPOINT Yes
--validate VALIDATE Yes
--keep-data-generations KEEP_DATA_GENERATIONS Yes
--keep-data-days KEEP_DATA_DAYS Yes
--keep-srvlog-files KEEP_SRVLOG_FILES Yes
--keep-srvlog-days KEEP_SRVLOG_DAYS Yes
--keep-arclog-files KEEP_ARCLOG_FILES Yes
--keep-arclog-days KEEP_ARCLOG_DAYS Yes
--recovery-target-timeline RECOVERY_TARGET_TIMELINE Yes

View File

@ -8,20 +8,14 @@ CHECKPOINT
incremental database backup
CHECKPOINT
CHECKPOINT
archived WAL and serverlog backup
archived WAL backup
stop DB during running pgbench
diff files in BACKUP_PATH/backup/pg_xlog
# of files in BACKUP_PATH/backup/srvlog
1
diff files in BACKUP_PATH/backup/pg_xlog
# of files in BACKUP_PATH/backup/srvlog
2
full database backup after recovery
CHECKPOINT
# of files in BACKUP_PATH/backup/pg_xlog
0
# of files in BACKUP_PATH/backup/srvlog
2
# of symbolic links in ARCLOG_PATH
0
# of files in BACKUP_PATH/timeline_history

View File

@ -5,7 +5,6 @@
results/init_test/
results/init_test/backup/
results/init_test/backup/pg_xlog/
results/init_test/backup/srvlog/
results/init_test/pg_rman.ini
results/init_test/timeline_history/
\! pg_rman init -B ${PWD}/results/init_test --quiet;echo $?

View File

@ -12,14 +12,12 @@ Usage:
Common Options:
-D, --pgdata=PATH location of the database storage area
-A, --arclog-path=PATH location of archive WAL storage area
-S, --srvlog-path=PATH location of server log storage area
-B, --backup-path=PATH location of the backup storage area
-c, --check show what would have been done
-v, --verbose output process information
Backup options:
-b, --backup-mode=MODE full, incremental, or archive
-s, --with-serverlog also backup server log files
-Z, --compress-data compress data backup with zlib
-C, --smooth-checkpoint do smooth checkpoint before backup
--validate validate backup after taking it
@ -27,8 +25,6 @@ Backup options:
--keep-data-days=DAY keep enough data backup to recover to DAY days age
--keep-arclog-files=NUM keep NUM of archived WAL
--keep-arclog-days=DAY keep archived WAL modified in DAY days
--keep-srvlog-files=NUM keep NUM of serverlogs
--keep-srvlog-days=DAY keep serverlog modified in DAY days
Restore options:
--recovery-target-time time stamp up to which recovery will proceed

View File

@ -2,12 +2,12 @@
\! rm -rf ${PWD}/results/sample_backup
\! cp -rp data/sample_backup ${PWD}/results/sample_backup
\! pg_rman show -B ${PWD}/results/sample_backup
==================================================================================================
Start Mode Current TLI Parent TLI Time Data WAL Log Backup Status
==================================================================================================
2009-06-03 17:05:53 FULL 1 0 0m ---- ---- ---- ---- RUNNING
2009-06-01 17:05:53 INCR 1 0 3m 9223PB 16MB ---- 162MB DONE
2009-05-31 17:05:53 FULL 1 0 3m 1242MB 9223PB ---- 242MB DONE
===========================================================================================
Start Mode Current TLI Parent TLI Time Data WAL Backup Status
===========================================================================================
2009-06-03 17:05:53 FULL 1 0 0m ---- ---- ---- RUNNING
2009-06-01 17:05:53 INCR 1 0 3m 9223PB 16MB 162MB DONE
2009-05-31 17:05:53 FULL 1 0 3m 1242MB 9223PB 242MB DONE
\! pg_rman validate -B ${PWD}/results/sample_backup 2009-05-31 17:05:53 --debug
INFO: validate: 2009-05-31 17:05:53 backup and archive log files by CRC
LOG: database files...
@ -22,17 +22,16 @@ WARNING: CRC of backup file "PG_VERSION" must be 0 but FEF71BC1
LOG: archive WAL files...
WARNING: backup 2009-06-01 17:05:53 is corrupted
\! pg_rman show -a -B ${PWD}/results/sample_backup
==================================================================================================
Start Mode Current TLI Parent TLI Time Data WAL Log Backup Status
==================================================================================================
2009-06-03 17:05:53 FULL 1 0 0m ---- ---- ---- ---- RUNNING
2009-06-02 17:05:03 ARCH 1 0 0m ---- ---- 4335kB 162MB DELETED
2009-06-01 17:05:53 INCR 1 0 3m 9223PB 16MB ---- 162MB CORRUPT
2009-05-31 17:05:53 FULL 1 0 3m 1242MB 9223PB ---- 242MB OK
===========================================================================================
Start Mode Current TLI Parent TLI Time Data WAL Backup Status
===========================================================================================
2009-06-03 17:05:53 FULL 1 0 0m ---- ---- ---- RUNNING
2009-06-02 17:05:03 ARCH 1 0 0m ---- ---- 162MB DELETED
2009-06-01 17:05:53 INCR 1 0 3m 9223PB 16MB 162MB CORRUPT
2009-05-31 17:05:53 FULL 1 0 3m 1242MB 9223PB 242MB OK
\! pg_rman show 2009-06-01 17:05:53 -B ${PWD}/results/sample_backup
# configuration
BACKUP_MODE=INCREMENTAL
WITH_SERVERLOG=false
COMPRESS_DATA=false
# result
TIMELINEID=1

29
init.c
View File

@ -52,9 +52,6 @@ do_init(void)
snprintf(path, lengthof(path), "%s/%s/%s", backup_path, RESTORE_WORK_DIR,
PG_XLOG_DIR);
dir_create_dir(path, DIR_PERMISSION);
snprintf(path, lengthof(path), "%s/%s/%s", backup_path, RESTORE_WORK_DIR,
SRVLOG_DIR);
dir_create_dir(path, DIR_PERMISSION);
/* create directory for timeline history files */
join_path_components(path, backup_path, TIMELINE_HISTORY_DIR);
@ -119,32 +116,6 @@ do_init(void)
elog(WARNING, "ARCLOG_PATH is not set because archive_command is empty."
"Please set ARCLOG_PATH in pg_rman.ini or environmental variable");
/* set SRVLOG_PATH refered with log_directory */
if (srvlog_path == NULL)
{
if (log_directory)
{
if (is_absolute_path(log_directory))
srvlog_path = pgut_strdup(log_directory);
else
{
srvlog_path = pgut_malloc(MAXPGPATH);
join_path_components(srvlog_path, pgdata, log_directory);
}
}
else if (pgdata)
{
/* default: log_directory = 'pg_log' */
srvlog_path = pgut_malloc(MAXPGPATH);
join_path_components(srvlog_path, pgdata, "pg_log");
}
}
if (srvlog_path)
{
fprintf(fp, "SRVLOG_PATH='%s'\n", srvlog_path);
elog(INFO, "SRVLOG_PATH is set to '%s'", srvlog_path);
}
fprintf(fp, "\n");
fclose(fp);

View File

@ -22,7 +22,6 @@ const char *PROGRAM_EMAIL = "https://github.com/michaelpq/pg_rman/issues";
char *backup_path;
char *pgdata;
char *arclog_path;
char *srvlog_path;
/* common configuration */
bool verbose = false;
@ -35,8 +34,6 @@ pgBackup current;
static bool smooth_checkpoint;
static int keep_arclog_files = KEEP_INFINITE;
static int keep_arclog_days = KEEP_INFINITE;
static int keep_srvlog_files = KEEP_INFINITE;
static int keep_srvlog_days = KEEP_INFINITE;
static int keep_data_generations = KEEP_INFINITE;
static int keep_data_days = KEEP_INFINITE;
static bool backup_validate = false;
@ -60,13 +57,11 @@ static pgut_option options[] =
{ 's', 'D', "pgdata", &pgdata, SOURCE_ENV },
{ 's', 'A', "arclog-path", &arclog_path, SOURCE_ENV },
{ 's', 'B', "backup-path", &backup_path, SOURCE_ENV },
{ 's', 'S', "srvlog-path", &srvlog_path, SOURCE_ENV },
/* common options */
{ 'b', 'v', "verbose", &verbose },
{ 'b', 'c', "check", &check },
/* backup options */
{ 'f', 'b', "backup-mode", opt_backup_mode, SOURCE_ENV },
{ 'b', 's', "with-serverlog", &current.with_serverlog, SOURCE_ENV },
{ 'b', 'Z', "compress-data", &current.compress_data, SOURCE_ENV },
{ 'b', 'C', "smooth-checkpoint", &smooth_checkpoint, SOURCE_ENV },
/* options with only long name (keep-xxx) */
@ -74,8 +69,6 @@ static pgut_option options[] =
{ 'i', 2, "keep-data-days", &keep_data_days, SOURCE_ENV },
{ 'i', 3, "keep-arclog-files", &keep_arclog_files, SOURCE_ENV },
{ 'i', 4, "keep-arclog-days", &keep_arclog_days, SOURCE_ENV },
{ 'i', 5, "keep-srvlog-files", &keep_srvlog_files, SOURCE_ENV },
{ 'i', 6, "keep-srvlog-days", &keep_srvlog_days, SOURCE_ENV },
/* restore options */
{ 's', 7, "recovery-target-time", &target_time, SOURCE_ENV },
{ 's', 8, "recovery-target-xid", &target_xid, SOURCE_ENV },
@ -163,16 +156,12 @@ main(int argc, char *argv[])
elog(ERROR_ARGS, "-D, --pgdata must be an absolute path");
if (arclog_path != NULL && !is_absolute_path(arclog_path))
elog(ERROR_ARGS, "-A, --arclog-path must be an absolute path");
if (srvlog_path != NULL && !is_absolute_path(srvlog_path))
elog(ERROR_ARGS, "-S, --srvlog-path must be an absolute path");
/* setup exclusion list for file search */
for (i = 0; pgdata_exclude[i]; i++) /* find first empty slot */
;
if (arclog_path)
pgdata_exclude[i++] = arclog_path;
if (srvlog_path)
pgdata_exclude[i++] = srvlog_path;
/* do actual operation */
if (pg_strcasecmp(cmd, "init") == 0)
@ -184,8 +173,6 @@ main(int argc, char *argv[])
bkupopt.smooth_checkpoint = smooth_checkpoint;
bkupopt.keep_arclog_files = keep_arclog_files;
bkupopt.keep_arclog_days = keep_arclog_days;
bkupopt.keep_srvlog_files = keep_srvlog_files;
bkupopt.keep_srvlog_days = keep_srvlog_days;
bkupopt.keep_data_generations = keep_data_generations;
bkupopt.keep_data_days = keep_data_days;
@ -234,13 +221,11 @@ pgut_help(bool details)
printf(_("\nCommon Options:\n"));
printf(_(" -D, --pgdata=PATH location of the database storage area\n"));
printf(_(" -A, --arclog-path=PATH location of archive WAL storage area\n"));
printf(_(" -S, --srvlog-path=PATH location of server log storage area\n"));
printf(_(" -B, --backup-path=PATH location of the backup storage area\n"));
printf(_(" -c, --check show what would have been done\n"));
printf(_(" -v, --verbose output process information\n"));
printf(_("\nBackup options:\n"));
printf(_(" -b, --backup-mode=MODE full, incremental, or archive\n"));
printf(_(" -s, --with-serverlog also backup server log files\n"));
printf(_(" -Z, --compress-data compress data backup with zlib\n"));
printf(_(" -C, --smooth-checkpoint do smooth checkpoint before backup\n"));
printf(_(" --validate validate backup after taking it\n"));
@ -248,8 +233,6 @@ pgut_help(bool details)
printf(_(" --keep-data-days=DAY keep enough data backup to recover to DAY days age\n"));
printf(_(" --keep-arclog-files=NUM keep NUM of archived WAL\n"));
printf(_(" --keep-arclog-days=DAY keep archived WAL modified in DAY days\n"));
printf(_(" --keep-srvlog-files=NUM keep NUM of serverlogs\n"));
printf(_(" --keep-srvlog-days=DAY keep serverlog modified in DAY days\n"));
printf(_("\nRestore options:\n"));
printf(_(" --recovery-target-time time stamp up to which recovery will proceed\n"));
printf(_(" --recovery-target-xid transaction ID up to which recovery will proceed\n"));

View File

@ -26,7 +26,6 @@
/* Directory/File names */
#define DATABASE_DIR "database"
#define ARCLOG_DIR "arclog"
#define SRVLOG_DIR "srvlog"
#define RESTORE_WORK_DIR "backup"
#define PG_XLOG_DIR "pg_xlog"
#define PG_TBLSPC_DIR "pg_tblspc"
@ -36,7 +35,6 @@
#define MKDIRS_SH_FILE "mkdirs.sh"
#define DATABASE_FILE_LIST "file_database.txt"
#define ARCLOG_FILE_LIST "file_arclog.txt"
#define SRVLOG_FILE_LIST "file_srvlog.txt"
#define SNAPSHOT_SCRIPT_FILE "snapshot_script"
#define PG_BACKUP_LABEL_FILE "backup_label"
#define PG_BLACK_LIST "black_list"
@ -129,7 +127,6 @@ typedef struct pgBackup
{
/* Backup Level */
BackupMode backup_mode;
bool with_serverlog;
bool compress_data;
/* Status - one of BACKUP_STATUS_xxx */
@ -153,8 +150,6 @@ typedef struct pgBackup
int64 data_bytes;
/* Amount of data for WAL archives */
int64 arclog_bytes;
/* Amount of data for server logs */
int64 srvlog_bytes;
/* Total size of backup */
int64 backup_bytes;
@ -168,8 +163,6 @@ typedef struct pgBackupOption
bool smooth_checkpoint;
int keep_arclog_files;
int keep_arclog_days;
int keep_srvlog_files;
int keep_srvlog_days;
int keep_data_generations;
int keep_data_days;
} pgBackupOption;
@ -219,7 +212,6 @@ typedef enum CompressionMode
extern char *backup_path;
extern char *pgdata;
extern char *arclog_path;
extern char *srvlog_path;
/* common configuration */
extern bool verbose;
@ -272,8 +264,6 @@ extern pgBackup *catalog_get_last_data_backup(parray *backup_list,
TimeLineID tli);
extern pgBackup *catalog_get_last_arclog_backup(parray *backup_list,
TimeLineID tli);
extern pgBackup *catalog_get_last_srvlog_backup(parray *backup_list,
TimeLineID tli);
extern int catalog_lock(void);
extern void catalog_unlock(void);

View File

@ -67,9 +67,6 @@ do_restore(const char *target_time,
if (arclog_path == NULL)
elog(ERROR_ARGS,
_("required parameter not specified: ARCLOG_PATH (-A, --arclog-path)"));
if (srvlog_path == NULL)
elog(ERROR_ARGS,
_("required parameter not specified: SRVLOG_PATH (-S, --srvlog-path)"));
if (verbose)
{
@ -114,7 +111,7 @@ do_restore(const char *target_time,
printf(_("target timeline ID = %u\n"), target_tli);
}
/* backup online WAL and serverlog */
/* backup online WAL */
backup_online_files(cur_tli != 0 && cur_tli != backup_tli);
/*
@ -626,7 +623,7 @@ backup_online_files(bool re_recovery)
if (verbose && !check)
{
printf(_("----------------------------------------\n"));
printf(_("backup online WAL and serverlog start\n"));
printf(_("backup online WAL start\n"));
}
/* get list of files in $BACKUP_PATH/backup/pg_xlog */
@ -655,12 +652,6 @@ backup_online_files(bool re_recovery)
RESTORE_WORK_DIR, PG_XLOG_DIR);
dir_create_dir(work_path, DIR_PERMISSION);
dir_copy_files(pg_xlog_path, work_path);
/* backup serverlog */
snprintf(work_path, lengthof(work_path), "%s/%s/%s", backup_path,
RESTORE_WORK_DIR, SRVLOG_DIR);
dir_create_dir(work_path, DIR_PERMISSION);
dir_copy_files(srvlog_path, work_path);
}
static void

15
show.c
View File

@ -161,9 +161,9 @@ show_backup_list(FILE *out, parray *backup_list, bool show_all)
int i;
/* show header */
fputs("==================================================================================================\n", out);
fputs("Start Mode Current TLI Parent TLI Time Data WAL Log Backup Status \n", out);
fputs("==================================================================================================\n", out);
fputs("===========================================================================================\n", out);
fputs("Start Mode Current TLI Parent TLI Time Data WAL Backup Status \n", out);
fputs("===========================================================================================\n", out);
for (i = 0; i < parray_num(backup_list); i++)
{
@ -174,7 +174,6 @@ show_backup_list(FILE *out, parray *backup_list, bool show_all)
char duration[20] = "----";
char data_bytes_str[10] = "----";
char arclog_bytes_str[10] = "----";
char srvlog_bytes_str[10] = "----";
char backup_bytes_str[10];
backup = parray_get(backup_list, i);
@ -200,11 +199,6 @@ show_backup_list(FILE *out, parray *backup_list, bool show_all)
pretty_size(backup->arclog_bytes, arclog_bytes_str,
lengthof(arclog_bytes_str));
/* Calculate amount of data for server logs */
if (backup->with_serverlog)
pretty_size(backup->srvlog_bytes, srvlog_bytes_str,
lengthof(srvlog_bytes_str));
/* Calculate amount of data for total backup */
pretty_size(backup->backup_bytes, backup_bytes_str,
lengthof(backup_bytes_str));
@ -212,7 +206,7 @@ show_backup_list(FILE *out, parray *backup_list, bool show_all)
/* Get parent timeline before printing */
parent_tli = get_parent_tli(backup->tli);
fprintf(out, "%-19s %-4s %10d %10d %5s %6s %6s %6s %6s %s\n",
fprintf(out, "%-19s %-4s %10d %10d %5s %6s %6s %6s %s\n",
timestamp,
modes[backup->backup_mode],
backup->tli,
@ -220,7 +214,6 @@ show_backup_list(FILE *out, parray *backup_list, bool show_all)
duration,
data_bytes_str,
arclog_bytes_str,
srvlog_bytes_str,
backup_bytes_str,
status2str(backup->status));
}

View File

@ -5,7 +5,6 @@ export PGDATA=$BASE_PATH/results/sample_database
export BACKUP_PATH=$BASE_PATH/results/sample_backup2
export ARCLOG_PATH=$BASE_PATH/results/arclog
export SRVLOG_PATH=$PGDATA/pg_log
export COMPRESS_DATA=YES
XLOG_PATH=$PGDATA/pg_xlog
TBLSPC_PATH=$BASE_PATH/results/tblspc
@ -16,15 +15,10 @@ TEST_PGPORT=54321
# configuration
SCALE=1
DURATION=10
ISOLATE_SRVLOG=0
ISOLATE_WAL=0
while [ $# -gt 0 ]; do
case $1 in
"-s")
ISOLATE_SRVLOG=1
shift
;;
"-w")
ISOLATE_WAL=1
shift
@ -55,9 +49,7 @@ done
pg_ctl stop -m immediate > /dev/null 2>&1
rm -rf $PGDATA
rm -rf $BASE_PATH/results/pg_xlog
rm -rf $BASE_PATH/results/srvlog
rm -rf $ARCLOG_PATH
rm -rf $SRVLOG_PATH
rm -rf $TBLSPC_PATH
# create new backup catalog
@ -84,16 +76,6 @@ EOF
mkdir -p $ARCLOG_PATH
mkdir -p $TBLSPC_PATH
# determine serverlog directory
if [ "$ISOLATE_SRVLOG" -ne 0 ]; then
export SRVLOG_PATH=$BASE_PATH/results/srvlog
echo "log_directory = '$SRVLOG_PATH'" >> $PGDATA/postgresql.conf
mkdir -p $SRVLOG_PATH
else
export SRVLOG_PATH=$PGDATA/pg_log
echo "log_directory = 'pg_log'" >> $PGDATA/postgresql.conf
fi
# isolate online WAL
if [ "$ISOLATE_WAL" -ne 0 ]; then
XLOG_PATH=$BASE_PATH/results/pg_xlog
@ -145,7 +127,7 @@ psql --no-psqlrc -p $TEST_PGPORT postgres -c "checkpoint"
pg_rman -w -p $TEST_PGPORT backup -b i --verbose -d postgres > $BASE_PATH/results/log_incr2 2>&1
pgbench -p $TEST_PGPORT -T $DURATION -c 10 pgbench >> $BASE_PATH/results/pgbench.log 2>&1
echo "archived WAL and serverlog backup"
echo "archived WAL backup"
#pg_rman -p $TEST_PGPORT backup -b a --verbose -d postgres > $BASE_PATH/results/log_arclog 2>&1
pg_rman -w -p $TEST_PGPORT backup -b a --verbose -d postgres > $BASE_PATH/results/log_arclog 2>&1
@ -178,11 +160,9 @@ if [ "$CUR_TLI" != "$CUR_TLI_R" ]; then
echo "failed: bad timeline ID" CUR_TLI=$CUR_TLI CUR_TLI_R=$CUR_TLI_R
fi
# Backup of online-WAL and serverlog.
# Backup of online-WAL
echo "diff files in BACKUP_PATH/backup/pg_xlog"
diff -r $PGDATA/pg_xlog $BACKUP_PATH/backup/pg_xlog
echo "# of files in BACKUP_PATH/backup/srvlog"
find $BACKUP_PATH/backup/srvlog -type f | wc -l | tr -d ' '
# recovery database
pg_ctl start -w -t 3600 > /dev/null 2>&1
@ -201,11 +181,9 @@ if [ "$CUR_TLI" != "$CUR_TLI_R" ]; then
echo "failed: bad timeline ID" CUR_TLI=$CUR_TLI CUR_TLI_R=$CUR_TLI_R
fi
# Backup of online-WAL and serverlog.
# Backup of online-WAL
echo "diff files in BACKUP_PATH/backup/pg_xlog"
diff -r $PGDATA/pg_xlog $BACKUP_PATH/backup/pg_xlog
echo "# of files in BACKUP_PATH/backup/srvlog"
find $BACKUP_PATH/backup/srvlog -type f | wc -l | tr -d ' '
# re-recovery database
pg_ctl start -w -t 3600 > /dev/null 2>&1
@ -221,11 +199,9 @@ psql --no-psqlrc -p $TEST_PGPORT postgres -c "checkpoint"
#pg_rman -p $TEST_PGPORT backup -b f --verbose -d postgres > $BASE_PATH/results/log_full2 2>&1
pg_rman -w -p $TEST_PGPORT backup -b f --verbose -d postgres > $BASE_PATH/results/log_full2 2>&1
# Backup of online-WAL should been deleted, but serverlog remain.
# Backup of online-WAL should been deleted
echo "# of files in BACKUP_PATH/backup/pg_xlog"
find $BACKUP_PATH/backup/pg_xlog -type f | wc -l | tr -d ' '
echo "# of files in BACKUP_PATH/backup/srvlog"
find $BACKUP_PATH/backup/srvlog -type f | wc -l | tr -d ' '
# Symbolic links in $ARCLOG_PATH should be deleted.
echo "# of symbolic links in ARCLOG_PATH"

View File

@ -10,14 +10,11 @@ BASE_PATH=`pwd`
# List of environment variables is defined in catalog.c.
unset BACKUP_PATH
unset ARCLOG_PATH
unset SRVLOG_PATH
unset BACKUP_MODE
unset COMPRESS_DATA
unset KEEP_ARCLOG_DAYS
unset KEEP_DATA_GENERATIONS
unset KEEP_DATA_DAYS
unset KEEP_SRVLOG_FILES
unset KEEP_SRVLOG_DAYS
export PGDATA=$BASE_PATH/results/sample_database

View File

@ -89,9 +89,6 @@ pgBackupValidate(pgBackup *backup,
if (backup->backup_mode == BACKUP_MODE_ARCHIVE)
elog(INFO, "validate: %s archive log files by %s",
timestamp, (size_only ? "SIZE" : "CRC"));
else if (backup->with_serverlog)
elog(INFO, "validate: %s server log files by %s",
timestamp, (size_only ? "SIZE" : "CRC"));
}
}
@ -121,18 +118,6 @@ pgBackupValidate(pgBackup *backup,
parray_walk(files, pgFileFree);
parray_free(files);
if (backup->with_serverlog)
{
elog(LOG, "server log files...");
pgBackupGetPath(backup, base_path, lengthof(base_path), SRVLOG_DIR);
pgBackupGetPath(backup, path, lengthof(path), SRVLOG_FILE_LIST);
files = dir_read_file_list(base_path, path);
if (!pgBackupValidateFiles(files, base_path, size_only))
corrupted = true;
parray_walk(files, pgFileFree);
parray_free(files);
}
/* update status to OK */
if (corrupted)
backup->status = BACKUP_STATUS_CORRUPT;