-
Notifications
You must be signed in to change notification settings - Fork 77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Get the correct increment backup #176
Changes from 15 commits
2481dc0
2b2078d
6d74b7f
48008dc
66f4099
4aa9439
84619bc
24fd3b4
3372846
e911da8
b5e24ba
dabee15
5099504
b813cb9
6a4007b
7aa3475
1435b92
e197388
cf92d36
aa2e6c4
482dbb6
5b95534
17ac111
a23a8ea
622c787
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -266,7 +266,7 @@ catalog_get_backup_list(const pgBackupRange *range) | |
* Find the last completed database full valid backup from the backup list. | ||
*/ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How about adding a comment so that you can specify that the problem still exists? |
||
pgBackup * | ||
catalog_get_last_full_backup(parray *backup_list) | ||
catalog_get_last_data_backup(parray *backup_list) | ||
{ | ||
int i; | ||
pgBackup *backup = NULL; | ||
|
@@ -276,9 +276,8 @@ catalog_get_last_full_backup(parray *backup_list) | |
{ | ||
backup = (pgBackup *) parray_get(backup_list, i); | ||
|
||
/* Return the first full valid backup. */ | ||
if (backup->backup_mode == BACKUP_MODE_FULL && | ||
backup->status == BACKUP_STATUS_OK) | ||
/* we need completed database backup */ | ||
if (backup -> status == BACKUP_STATUS_OK && HAVE_DATABASE(backup)) | ||
return backup; | ||
} | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -118,7 +118,6 @@ pg_rman validate -B ${BACKUP_PATH} --quiet | |
pg_rman show detail -B ${BACKUP_PATH} > ${TEST_BASE}/TEST-0001.log 2>&1 | ||
grep -c OK ${TEST_BASE}/TEST-0001.log | ||
|
||
|
||
echo '###### BACKUP COMMAND TEST-0002 ######' | ||
echo '###### incremental backup mode ######' | ||
pg_rman backup -B ${BACKUP_PATH} -b incremental -p ${TEST_PGPORT} -d postgres --quiet;echo $? | ||
|
@@ -142,6 +141,20 @@ pg_rman show detail -B ${BACKUP_PATH} > ${TEST_BASE}/TEST-0004.log 2>&1 | |
grep -c OK ${TEST_BASE}/TEST-0004.log | ||
|
||
echo '###### BACKUP COMMAND TEST-0005 ######' | ||
echo '###### Make sure incremental backup work ######' | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the following better? Make sure that pg_rman doesn't take a differential backup, but a incremental backup |
||
init_catalog | ||
pg_rman backup -B ${BACKUP_PATH} -b full -p ${TEST_PGPORT} -d postgres --quiet;echo $? | ||
pg_rman validate -B ${BACKUP_PATH} --quiet | ||
psql -p ${TEST_PGPORT} -d postgres -c 'create table test (c1 int);' | ||
psql -p ${TEST_PGPORT} -d postgres -c 'insert into test values(generate_series(1,1000000));' | ||
pg_rman backup -B ${BACKUP_PATH} -b incremental -p ${TEST_PGPORT} -d postgres --quiet;echo $? | ||
pg_rman validate -B ${BACKUP_PATH} --quiet | ||
pg_rman backup -B ${BACKUP_PATH} -b incremental -p ${TEST_PGPORT} -d postgres --quiet;echo $? | ||
pg_rman validate -B ${BACKUP_PATH} --quiet | ||
pg_rman show detail -B ${BACKUP_PATH} > ${TEST_BASE}/TEST-0012.log 2>&1 | ||
grep -c 16kB ${TEST_BASE}/TEST-0012.log | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's better to comment why you take the backups twice.
But, I didn't check the second sentence is right or not. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's better to check 16KB is the size of third backup. For example,
Though I didn't check if this works on the machine, sorry. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thank you for you commend. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry, I misunderstood the order of Why don't you following?
If you change the argument number of |
||
|
||
echo '###### BACKUP COMMAND TEST-0006 ######' | ||
echo '###### full backup with compression ######' | ||
init_catalog | ||
pg_rman backup -B ${BACKUP_PATH} -b full -s -Z -p ${TEST_PGPORT} -d postgres --quiet;echo $? | ||
|
@@ -150,15 +163,15 @@ pg_rman show detail -B ${BACKUP_PATH} > ${TEST_BASE}/TEST-0005.log 2>&1 | |
grep -c OK ${TEST_BASE}/TEST-0005.log | ||
grep OK ${TEST_BASE}/TEST-0005.log | grep -c true | ||
|
||
echo '###### BACKUP COMMAND TEST-0006 ######' | ||
echo '###### BACKUP COMMAND TEST-0007 ######' | ||
echo '###### full backup with smooth checkpoint ######' | ||
init_catalog | ||
pg_rman backup -B ${BACKUP_PATH} -b full -s -C -p ${TEST_PGPORT} -d postgres --quiet;echo $? | ||
pg_rman validate -B ${BACKUP_PATH} --quiet | ||
pg_rman show detail -B ${BACKUP_PATH} > ${TEST_BASE}/TEST-0006.log 2>&1 | ||
grep -c OK ${TEST_BASE}/TEST-0006.log | ||
|
||
echo '###### BACKUP COMMAND TEST-0007 ######' | ||
echo '###### BACKUP COMMAND TEST-0008 ######' | ||
echo '###### switch backup mode from incremental to full ######' | ||
init_catalog | ||
echo 'incremental backup without validated full backup' | ||
|
@@ -171,7 +184,7 @@ pg_rman show detail -B ${BACKUP_PATH} > ${TEST_BASE}/TEST-0010.log 2>&1 | |
grep OK ${TEST_BASE}/TEST-0010.log | grep FULL | wc -l | ||
grep ERROR ${TEST_BASE}/TEST-0010.log | grep INCR | wc -l | ||
|
||
echo '###### BACKUP COMMAND TEST-0008 ######' | ||
echo '###### BACKUP COMMAND TEST-0009 ######' | ||
echo '###### switch backup mode from archive to full ######' | ||
init_catalog | ||
echo 'archive backup without validated full backup' | ||
|
@@ -184,7 +197,7 @@ pg_rman show detail -B ${BACKUP_PATH} > ${TEST_BASE}/TEST-0011.log 2>&1 | |
grep OK ${TEST_BASE}/TEST-0011.log | grep FULL | wc -l | ||
grep ERROR ${TEST_BASE}/TEST-0011.log | grep ARCH | wc -l | ||
|
||
echo '###### BACKUP COMMAND TEST-0009 ######' | ||
echo '###### BACKUP COMMAND TEST-0010 ######' | ||
echo '###### failure in backup with different system identifier database ######' | ||
init_catalog | ||
pg_ctl stop -m immediate > /dev/null 2>&1 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's better to add problem and solution idea.
So, why don't you change to the following comments?
@MoonInsung
Is the target which wants to detect something wrong a physical backup file, a backup list, or both?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the target is only detect something wrong a physical backup file.
so I didn't reflect this part 「or pg_rman's delete command
with '--force' option」.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's both.
It is a challenging task,
but it is necessary to check whether the physical backup file is
corrupted and the backup chain list is regular.
It is difficult to write a detailed example here., however, the explanation is omitted from the backup file
because it is essential to check that all backup files are normally stored (including physical corruption).
And, I think that the verification(check) of the backup file chain list is
necessary to ensure that incremental backups and restores operate normally.
For example, if there is a chain list of backup files of
FB(1gen)->IB(1gen-1)->IB(1gen-2)->IB(1gen-3),
If IB(1gen-2) is forcibly deleted,
it is fine until IB (1gen-1), but backup and restore will not be possible after that.
If it doesn't detect this, it could get a meaningless backup, and the wrong restore could work.
Therefore, I think @mikecaat suggestion looks good.
Best regards.
Moon.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@huangfumingyue @MoonInsung
Thanks for your comments!
OK. I understood that there are two problems to be solved.
If so, is it better to separate the issue because (1) and (2) seem to be different problems and need different solutions.
(1) The first is to check files corruption, missing files, and so on only in one backup list.
I couldn't understand this problem clearly because do_validate() already takes charge of checking the file's corruption with CRC and detecting the missing files.
For example, the case is following.
What am I missing? Is there any corner case?
(2) Second is to check the backup chain is correct. I agree this is not implemented yet.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Dear @mikecaat
Thank you.
Sorry. My explanation was insufficient.
In my opinion,
is check whether the backup file is corrupted is when acquiring a new incremental backup.
In other words,
(1) Is all backup files of the generation that try incremental backup normal?
(2) Is the backup file of the chain normal?
I thought it was necessary to check.
Of course, this could maybe be the wrong idea because it's my personal opinion.
That's why I think it needs to be discussed later.
Best regards.
Moon.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@MoonInsung
Thanks! I understood. I updated the issue to mention the above.