Re: Un successful Restoration of DATA using WAL files - Mailing list pgsql-general

From Craig Ringer
Subject Re: Un successful Restoration of DATA using WAL files
Date
Msg-id 1256008135.6437.58.camel@wallace.localnet
Whole thread Raw
In response to Un successful Restoration of DATA using WAL files  (Mitesh51 <mit_bca1@yahoo.com>)
List pgsql-general
On Mon, 2009-10-19 at 07:18 -0700, Mitesh51 wrote:
> I am unable to restore data with the use of WAL files by following procedure.
>
> I have done following changes in postgres.conf to enable WAL archiving...
>
> archive_mode = on        # allows archiving to be done
> archive_command = 'copy "%p" "C:\\archivedir\\%f"'
>
> I have one database(built in) postgres. I create one table student in it.
> and take full backup(only of a single database & I am not copying complete
> data dir..) @ 12:40 pm with the
>
> pg_dump.exe -h localhost -p 5432 -U postgres -f C:\test.sql postgres

Whoops. You can't combine a pg_dump -style base backup with WAL
archiving. You *MUST* use the pg_start_backup() and pg_stop_backup()
functions combined with a file-system level copy of the database
directory.

The reason the WAL files can't just be applied to a database restored
from pg_dump is that they're block-level logs of write activity. A newly
restored database from a pg_dump backup will have a different block
layout, so the WAL files make no sense with the newly restored database.
Additionally, you're probably restoring the database to a different
cluster, which the WAL files won't make sense for.

It's a really, REALLY good thing you're smart enough to test your
backups before relying on them :-)

I strongly suggest re-reading the PITR backup documentation.

Personally, I recommend taking a periodic dump backup with pg_dump to
protect yourself against undetected corruption of the catalog or table
files, which PITR-based backups won't help you with. There's nothing
like discovering that your backup copies of your cluster are corrupt
too :-(

In *addition* to the pg_dump backusp, enable WAL archiving and take a
PITR base backup (using pg_start_backup() and pg_stop_backup() as per
the PITR docs). That way if you have a failure such as an accidental
"DROP DATABASE" you can recover your cluster up to a few minutes before
the mistake. You'll want to periodically take a new base backup so that
you're not faced with storing terabytes of WAL archives ... and the days
or weeks it could take to replay those WAL archives when you need to
restore the backup. How often depends on your write load - how fast your
WAL archives build up.

> After taking full backup...
>
> I create 1 table named "person" @ 12:41 pm  in the postgres database(for
> testing purpose only).
> (Now it should be recorded in WAL files...Am I write here?)

Sort-of. The block writes to the catalog, the table layout, etc are
indeed recorded in the WAL, but it's not recording SQL like "CREATE
TABLE person();", it's recording "bytes 0x0902ff12 written to offset
0x12312" or the like.

> but I cant see the table "person" created again with the help of WAL file
> restoration :(

Personally, I'm surprised you got anything but an error when trying
this. Perhaps it's not even seeing the WAL files from the old unrelated
cluster at all? If it did see them and try to use them I'd expect an
error reporting that the WAL archives don't make any sense for your
cluster.

--
Craig Ringer


pgsql-general by date:

Previous
From: Guy Rouillier
Date:
Subject: Re: Free Tool to design Postgres Databases
Next
From: Craig Ringer
Date:
Subject: Re: Un successful Restoration of DATA using WAL files