@@ -354,124 +354,8 @@ pg_dump -j <replaceable class="parameter">num</replaceable> -F d -f <replaceable
354354  </sect2>
355355 </sect1>
356356
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- 
473357 <sect1 id="continuous-archiving">
474-   <title>Continuous Archiving and Point-in-Time Recovery (PITR) </title>
358+   <title>Physical Backups Using Continuous Archiving </title>
475359
476360  <indexterm zone="backup">
477361   <primary>continuous archiving</primary>
@@ -569,6 +453,28 @@ tar -cf backup.tar /usr/local/pgsql/data
569453   archiving WAL files.
570454  </para>
571455
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+ 
572478  <sect2 id="backup-archiving-wal">
573479   <title>Setting Up WAL Archiving</title>
574480
@@ -1464,28 +1370,6 @@ restore_command = 'cp /mnt/server/archivedir/%f %p'
14641370    Some tips for configuring continuous archiving are given here.
14651371   </para>
14661372
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- 
14891373    <sect3 id="compressed-archive-logs">
14901374     <title>Compressed Archive Logs</title>
14911375
@@ -1617,4 +1501,120 @@ archive_command = 'local_backup_script.sh "%p" "%f"'
16171501  </sect2>
16181502 </sect1>
16191503
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+ 
16201620</chapter>
0 commit comments