@@ -354,124 +354,8 @@ pg_dump -j <replaceable class="parameter">num</replaceable> -F d -f <replaceable
354
354
</sect2>
355
355
</sect1>
356
356
357
- <sect1 id="backup-file">
358
- <title>File System Level Backup</title>
359
-
360
- <para>
361
- An alternative backup strategy is to directly copy the files that
362
- <productname>PostgreSQL</productname> uses to store the data in the database;
363
- <xref linkend="creating-cluster"/> explains where these files
364
- are located. You can use whatever method you prefer
365
- for doing file system backups; for example:
366
-
367
- <programlisting>
368
- tar -cf backup.tar /usr/local/pgsql/data
369
- </programlisting>
370
- </para>
371
-
372
- <para>
373
- There are two restrictions, however, which make this method
374
- impractical, or at least inferior to the <application>pg_dump</application>
375
- method:
376
-
377
- <orderedlist>
378
- <listitem>
379
- <para>
380
- The database server <emphasis>must</emphasis> be shut down in order to
381
- get a usable backup. Half-way measures such as disallowing all
382
- connections will <emphasis>not</emphasis> work
383
- (in part because <command>tar</command> and similar tools do not take
384
- an atomic snapshot of the state of the file system,
385
- but also because of internal buffering within the server).
386
- Information about stopping the server can be found in
387
- <xref linkend="server-shutdown"/>. Needless to say, you
388
- also need to shut down the server before restoring the data.
389
- </para>
390
- </listitem>
391
-
392
- <listitem>
393
- <para>
394
- If you have dug into the details of the file system layout of the
395
- database, you might be tempted to try to back up or restore only certain
396
- individual tables or databases from their respective files or
397
- directories. This will <emphasis>not</emphasis> work because the
398
- information contained in these files is not usable without
399
- the commit log files,
400
- <filename>pg_xact/*</filename>, which contain the commit status of
401
- all transactions. A table file is only usable with this
402
- information. Of course it is also impossible to restore only a
403
- table and the associated <filename>pg_xact</filename> data
404
- because that would render all other tables in the database
405
- cluster useless. So file system backups only work for complete
406
- backup and restoration of an entire database cluster.
407
- </para>
408
- </listitem>
409
- </orderedlist>
410
- </para>
411
-
412
- <para>
413
- An alternative file-system backup approach is to make a
414
- <quote>consistent snapshot</quote> of the data directory, if the
415
- file system supports that functionality (and you are willing to
416
- trust that it is implemented correctly). The typical procedure is
417
- to make a <quote>frozen snapshot</quote> of the volume containing the
418
- database, then copy the whole data directory (not just parts, see
419
- above) from the snapshot to a backup device, then release the frozen
420
- snapshot. This will work even while the database server is running.
421
- However, a backup created in this way saves
422
- the database files in a state as if the database server was not
423
- properly shut down; therefore, when you start the database server
424
- on the backed-up data, it will think the previous server instance
425
- crashed and will replay the WAL log. This is not a problem; just
426
- be aware of it (and be sure to include the WAL files in your backup).
427
- You can perform a <command>CHECKPOINT</command> before taking the
428
- snapshot to reduce recovery time.
429
- </para>
430
-
431
- <para>
432
- If your database is spread across multiple file systems, there might not
433
- be any way to obtain exactly-simultaneous frozen snapshots of all
434
- the volumes. For example, if your data files and WAL log are on different
435
- disks, or if tablespaces are on different file systems, it might
436
- not be possible to use snapshot backup because the snapshots
437
- <emphasis>must</emphasis> be simultaneous.
438
- Read your file system documentation very carefully before trusting
439
- the consistent-snapshot technique in such situations.
440
- </para>
441
-
442
- <para>
443
- If simultaneous snapshots are not possible, one option is to shut down
444
- the database server long enough to establish all the frozen snapshots.
445
- Another option is to perform a continuous archiving base backup (<xref
446
- linkend="backup-base-backup"/>) because such backups are immune to file
447
- system changes during the backup. This requires enabling continuous
448
- archiving just during the backup process; restore is done using
449
- continuous archive recovery (<xref linkend="backup-pitr-recovery"/>).
450
- </para>
451
-
452
- <para>
453
- Another option is to use <application>rsync</application> to perform a file
454
- system backup. This is done by first running <application>rsync</application>
455
- while the database server is running, then shutting down the database
456
- server long enough to do an <command>rsync --checksum</command>.
457
- (<option>--checksum</option> is necessary because <command>rsync</command> only
458
- has file modification-time granularity of one second.) The
459
- second <application>rsync</application> will be quicker than the first,
460
- because it has relatively little data to transfer, and the end result
461
- will be consistent because the server was down. This method
462
- allows a file system backup to be performed with minimal downtime.
463
- </para>
464
-
465
- <para>
466
- Note that a file system backup will typically be larger
467
- than an SQL dump. (<application>pg_dump</application> does not need to dump
468
- the contents of indexes for example, just the commands to recreate
469
- them.) However, taking a file system backup might be faster.
470
- </para>
471
- </sect1>
472
-
473
357
<sect1 id="continuous-archiving">
474
- <title>Continuous Archiving and Point-in-Time Recovery (PITR) </title>
358
+ <title>Physical Backups Using Continuous Archiving </title>
475
359
476
360
<indexterm zone="backup">
477
361
<primary>continuous archiving</primary>
@@ -569,6 +453,28 @@ tar -cf backup.tar /usr/local/pgsql/data
569
453
archiving WAL files.
570
454
</para>
571
455
456
+ <sect2 id="backup-standalone">
457
+ <title>Built-In Standalone Backups</title>
458
+
459
+ <para>
460
+ If all you want is a standalone backup, it is possible to use <productname>
461
+ PostgreSQL</productname>'s backup facilities to produce standalone hot backups.
462
+ These are backups that cannot be used for point-in-time recovery, yet are
463
+ typically much faster to backup and restore than <application>pg_dump</application>
464
+ dumps. (They are also much larger than <application>pg_dump</application> dumps,
465
+ so in some cases the speed advantage might be negated.)
466
+ </para>
467
+
468
+ <para>
469
+ The easiest way to produce a standalone
470
+ hot backup is to use the <xref linkend="app-pgbasebackup"/>
471
+ tool. If you include the <literal>-X</literal> parameter when calling
472
+ it, all the write-ahead log required to use the backup will be
473
+ included in the backup automatically, and no special action is
474
+ required to restore the backup.
475
+ </para>
476
+ </sect2>
477
+
572
478
<sect2 id="backup-archiving-wal">
573
479
<title>Setting Up WAL Archiving</title>
574
480
@@ -1464,28 +1370,6 @@ restore_command = 'cp /mnt/server/archivedir/%f %p'
1464
1370
Some tips for configuring continuous archiving are given here.
1465
1371
</para>
1466
1372
1467
- <sect3 id="backup-standalone">
1468
- <title>Standalone Hot Backups</title>
1469
-
1470
- <para>
1471
- It is possible to use <productname>PostgreSQL</productname>'s backup facilities to
1472
- produce standalone hot backups. These are backups that cannot be used
1473
- for point-in-time recovery, yet are typically much faster to backup and
1474
- restore than <application>pg_dump</application> dumps. (They are also much larger
1475
- than <application>pg_dump</application> dumps, so in some cases the speed advantage
1476
- might be negated.)
1477
- </para>
1478
-
1479
- <para>
1480
- As with base backups, the easiest way to produce a standalone
1481
- hot backup is to use the <xref linkend="app-pgbasebackup"/>
1482
- tool. If you include the <literal>-X</literal> parameter when calling
1483
- it, all the write-ahead log required to use the backup will be
1484
- included in the backup automatically, and no special action is
1485
- required to restore the backup.
1486
- </para>
1487
- </sect3>
1488
-
1489
1373
<sect3 id="compressed-archive-logs">
1490
1374
<title>Compressed Archive Logs</title>
1491
1375
@@ -1617,4 +1501,120 @@ archive_command = 'local_backup_script.sh "%p" "%f"'
1617
1501
</sect2>
1618
1502
</sect1>
1619
1503
1504
+ <sect1 id="backup-file">
1505
+ <title>File System Level Backup</title>
1506
+
1507
+ <para>
1508
+ An older and largely deprecated technique to take a backup is to directly copy
1509
+ the files that <productname>PostgreSQL</productname> uses to store the data in
1510
+ the database; <xref linkend="creating-cluster"/> explains where these files
1511
+ are located. You can use whatever method you prefer for doing file system
1512
+ backups; for example:
1513
+
1514
+ <programlisting>
1515
+ tar -cf backup.tar /usr/local/pgsql/data
1516
+ </programlisting>
1517
+ </para>
1518
+
1519
+ <para>
1520
+ There are two restrictions, however, which make this method
1521
+ impractical, or at least inferior to the <application>pg_dump</application>
1522
+ method:
1523
+
1524
+ <orderedlist>
1525
+ <listitem>
1526
+ <para>
1527
+ The database server <emphasis>must</emphasis> be shut down in order to
1528
+ get a usable backup. Half-way measures such as disallowing all
1529
+ connections will <emphasis>not</emphasis> work
1530
+ (in part because <command>tar</command> and similar tools do not take
1531
+ an atomic snapshot of the state of the file system,
1532
+ but also because of internal buffering within the server).
1533
+ Information about stopping the server can be found in
1534
+ <xref linkend="server-shutdown"/>. Needless to say, you
1535
+ also need to shut down the server before restoring the data.
1536
+ </para>
1537
+ </listitem>
1538
+
1539
+ <listitem>
1540
+ <para>
1541
+ If you have dug into the details of the file system layout of the
1542
+ database, you might be tempted to try to back up or restore only certain
1543
+ individual tables or databases from their respective files or
1544
+ directories. This will <emphasis>not</emphasis> work because the
1545
+ information contained in these files is not usable without
1546
+ the commit log files,
1547
+ <filename>pg_xact/*</filename>, which contain the commit status of
1548
+ all transactions. A table file is only usable with this
1549
+ information. Of course it is also impossible to restore only a
1550
+ table and the associated <filename>pg_xact</filename> data
1551
+ because that would render all other tables in the database
1552
+ cluster useless. So file system backups only work for complete
1553
+ backup and restoration of an entire database cluster.
1554
+ </para>
1555
+ </listitem>
1556
+ </orderedlist>
1557
+ </para>
1558
+
1559
+ <para>
1560
+ An alternative file-system backup approach is to make a
1561
+ <quote>consistent snapshot</quote> of the data directory, if the
1562
+ file system supports that functionality (and you are willing to
1563
+ trust that it is implemented correctly). The typical procedure is
1564
+ to make a <quote>frozen snapshot</quote> of the volume containing the
1565
+ database, then copy the whole data directory (not just parts, see
1566
+ above) from the snapshot to a backup device, then release the frozen
1567
+ snapshot. This will work even while the database server is running.
1568
+ However, a backup created in this way saves
1569
+ the database files in a state as if the database server was not
1570
+ properly shut down; therefore, when you start the database server
1571
+ on the backed-up data, it will think the previous server instance
1572
+ crashed and will replay the WAL log. This is not a problem; just
1573
+ be aware of it (and be sure to include the WAL files in your backup).
1574
+ You can perform a <command>CHECKPOINT</command> before taking the
1575
+ snapshot to reduce recovery time.
1576
+ </para>
1577
+
1578
+ <para>
1579
+ If your database is spread across multiple file systems, there might not
1580
+ be any way to obtain exactly-simultaneous frozen snapshots of all
1581
+ the volumes. For example, if your data files and WAL log are on different
1582
+ disks, or if tablespaces are on different file systems, it might
1583
+ not be possible to use snapshot backup because the snapshots
1584
+ <emphasis>must</emphasis> be simultaneous.
1585
+ Read your file system documentation very carefully before trusting
1586
+ the consistent-snapshot technique in such situations.
1587
+ </para>
1588
+
1589
+ <para>
1590
+ If simultaneous snapshots are not possible, one option is to shut down
1591
+ the database server long enough to establish all the frozen snapshots.
1592
+ Another option is to perform a continuous archiving base backup (<xref
1593
+ linkend="backup-base-backup"/>) because such backups are immune to file
1594
+ system changes during the backup. This requires enabling continuous
1595
+ archiving just during the backup process; restore is done using
1596
+ continuous archive recovery (<xref linkend="backup-pitr-recovery"/>).
1597
+ </para>
1598
+
1599
+ <para>
1600
+ Another option is to use <application>rsync</application> to perform a file
1601
+ system backup. This is done by first running <application>rsync</application>
1602
+ while the database server is running, then shutting down the database
1603
+ server long enough to do an <command>rsync --checksum</command>.
1604
+ (<option>--checksum</option> is necessary because <command>rsync</command> only
1605
+ has file modification-time granularity of one second.) The
1606
+ second <application>rsync</application> will be quicker than the first,
1607
+ because it has relatively little data to transfer, and the end result
1608
+ will be consistent because the server was down. This method
1609
+ allows a file system backup to be performed with minimal downtime.
1610
+ </para>
1611
+
1612
+ <para>
1613
+ Note that a file system backup will typically be larger
1614
+ than an SQL dump. (<application>pg_dump</application> does not need to dump
1615
+ the contents of indexes for example, just the commands to recreate
1616
+ them.) However, taking a file system backup might be faster.
1617
+ </para>
1618
+ </sect1>
1619
+
1620
1620
</chapter>
0 commit comments