mirror of
https://github.com/postgrespro/pg_probackup.git
synced 2024-12-03 09:59:53 +02:00
add --compress shortcut option
This commit is contained in:
parent
03dfb7bc59
commit
385798e753
184
README.md
184
README.md
@ -1,184 +0,0 @@
|
||||
pg_probackup fork of pg_arman by Postgres Professional
|
||||
========================================
|
||||
|
||||
pg_probackup is a backup and recovery manager for PostgreSQL servers able to do
|
||||
differential and full backup as well as restore a cluster to a
|
||||
state defined by a given recovery target. It is designed to perform
|
||||
periodic backups of an existing PostgreSQL server, combined with WAL
|
||||
archives to provide a way to recover a server in case of failure of
|
||||
server because of a reason or another. Its differential backup
|
||||
facility reduces the amount of data necessary to be taken between
|
||||
two consecutive backups.
|
||||
|
||||
Main features:
|
||||
* incremental backup from WAL and PTRACK
|
||||
* backup from replica
|
||||
* multithreaded backup and restore
|
||||
* autonomous backup without archive command (will need slot replication)
|
||||
|
||||
Requirements:
|
||||
* >=PostgreSQL 9.5
|
||||
* >=gcc 4.4 or >=clang 3.6 or >= XLC 12.1
|
||||
* pthread
|
||||
|
||||
Download
|
||||
--------
|
||||
|
||||
The latest version of this software can be found on the project website at
|
||||
https://github.com/postgrespro/pg_probackup. Original fork of pg_probackup can be
|
||||
found at https://github.com/michaelpq/pg_arman.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Compiling pg_probackup requires a PostgreSQL installation to be in place
|
||||
as well as a raw source tree. Pass the path to the PostgreSQL source tree
|
||||
to make, in the top_srcdir variable:
|
||||
|
||||
make USE_PGXS=1 top_srcdir=<path to PostgreSQL source tree>
|
||||
|
||||
In addition, you must have pg_config in $PATH.
|
||||
|
||||
The current version of pg_probackup is compatible with PostgreSQL 9.5 and
|
||||
upper versions.
|
||||
|
||||
Platforms
|
||||
---------
|
||||
|
||||
pg_probackup has been tested on Linux and Unix-based platforms.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
All the documentation you can find [here](doc/pg_probackup.md).
|
||||
|
||||
Regression tests
|
||||
----------------
|
||||
|
||||
For tests you must have python 2.7 or python 3.3 and higher. Also good idea
|
||||
is make virtual enviroment by `virtualenv`.
|
||||
First of all you need to install `testgres` python module which contains useful
|
||||
functions to start postgres clusters and make queries:
|
||||
|
||||
```
|
||||
pip install testgres
|
||||
```
|
||||
|
||||
To run tests execute:
|
||||
|
||||
```
|
||||
python -m unittest tests
|
||||
```
|
||||
|
||||
from current (root of project) directory. If you want to run a specific postgres build then
|
||||
you should specify the path to your pg_config executable by setting PG_CONFIG
|
||||
environment variable:
|
||||
```
|
||||
export PG_CONFIG=/path/to/pg_config
|
||||
```
|
||||
|
||||
|
||||
Block level incremental backup
|
||||
------------------------------
|
||||
|
||||
Idea of block level incremental backup is that you may backup only blocks
|
||||
changed since last full backup. It gives two major benefits: taking backups
|
||||
faster and making backups smaller.
|
||||
|
||||
The major question here is how to get the list of changed blocks. Since
|
||||
each block contains LSN number, changed blocks could be retrieved by full scan
|
||||
of all the blocks. But this approach consumes as much server IO as full
|
||||
backup.
|
||||
|
||||
This is why we implemented alternative approaches to retrieve
|
||||
list of changed blocks.
|
||||
|
||||
1. Scan WAL archive and extract changed blocks from it. However, shortcoming
|
||||
of these approach is requirement to have WAL archive.
|
||||
|
||||
2. Track bitmap of changes blocks inside PostgreSQL (ptrack). It introduces
|
||||
some overhead to PostgreSQL performance. On our experiments it appears to be
|
||||
less than 3%.
|
||||
|
||||
These two approaches were implemented in this fork of pg_probackup. The second
|
||||
approach requires [patch for PostgreSQL 9.6.2](https://gist.github.com/alubennikova/9daacf35790eca1a09b63a1bca86d836) or
|
||||
[patch for PostgreSQL 10 (master)](https://gist.github.com/alubennikova/d24f61804525f0248fa71a1075158c21).
|
||||
|
||||
Testing block level incremental backup
|
||||
--------------------------------------
|
||||
|
||||
You need to apply ptrack patch to [PostgreSQL 9.6.2](https://gist.github.com/alubennikova/9daacf35790eca1a09b63a1bca86d836)
|
||||
or [PostgreSQL 10 (master)](https://gist.github.com/alubennikova/d24f61804525f0248fa71a1075158c21).
|
||||
Or you can build and install [PGPRO9_5 or PGPRO9_6 branch of PostgreSQL](https://github.com/postgrespro/postgrespro).
|
||||
Note that PGPRO branches currently contain old version of ptrack.
|
||||
|
||||
### Retrieving changed blocks from WAL archive
|
||||
|
||||
You need to enable WAL archive by adding following lines to postgresql.conf:
|
||||
|
||||
```
|
||||
wal_level = archive
|
||||
archive_mode = on
|
||||
archive_command = 'test ! -f /home/postgres/backup/wal/%f && cp %p /home/postgres/backup/wal/%f'
|
||||
```
|
||||
|
||||
Example backup (assuming PostgreSQL is running):
|
||||
```bash
|
||||
# Init pg_aramn backup folder
|
||||
pg_probackup init -B /home/postgres/backup
|
||||
# Make full backup with 2 thread and verbose mode.
|
||||
pg_probackup backup -B /home/postgres/backup -D /home/postgres/pgdata -b full -v -j 2
|
||||
# Show backups information
|
||||
pg_probackup show -B /home/postgres/backup
|
||||
|
||||
# Now you can insert or update some data in your database
|
||||
|
||||
# Then start the incremental backup.
|
||||
pg_probackup backup -B /home/postgres/backup -D /home/postgres/pgdata -b page -v -j 2
|
||||
# You should see that increment is really small
|
||||
pg_probackup show -B /home/postgres/backup
|
||||
```
|
||||
|
||||
For restore after remove your pgdata you can use:
|
||||
```
|
||||
pg_probackup restore -B /home/postgres/backup -D /home/postgres/pgdata -j 4 --verbose
|
||||
```
|
||||
|
||||
### Retrieving changed blocks from ptrack
|
||||
|
||||
The advantage of this approach is that you don't have to save WAL archive. You will need to enable ptrack in postgresql.conf (restart required).
|
||||
|
||||
```
|
||||
ptrack_enable = on
|
||||
```
|
||||
|
||||
Also, some WALs still need to be fetched in order to get consistent backup. pg_probackup can fetch them trough the streaming replication protocol. Thus, you also need to [enable streaming replication connection](https://wiki.postgresql.org/wiki/Streaming_Replication).
|
||||
|
||||
Example backup (assuming PostgreSQL is running):
|
||||
```bash
|
||||
# Init pg_aramn backup folder
|
||||
pg_probackup init -B /home/postgres/backup
|
||||
# Make full backup with 2 thread and verbose mode.
|
||||
pg_probackup backup -B /home/postgres/backup -D /home/postgres/pgdata -b full -v -j 2 --stream
|
||||
# Show backups information
|
||||
pg_probackup show -B /home/postgres/backup
|
||||
|
||||
# Now you can insert or update some data in your database
|
||||
|
||||
# Then start the incremental backup.
|
||||
pg_probackup backup -B /home/postgres/backup -D /home/postgres/pgdata -b ptrack -v -j 2 --stream
|
||||
# You should see that increment is really small
|
||||
pg_probackup show -B /home/postgres/backup
|
||||
```
|
||||
|
||||
For restore after remove your pgdata you can use:
|
||||
```
|
||||
pg_probackup restore -B /home/postgres/backup -D /home/postgres/pgdata -j 4 --verbose --stream
|
||||
```
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
pg_probackup can be distributed under the PostgreSQL license. See COPYRIGHT
|
||||
file for more information. pg_arman is a fork of the existing project
|
||||
pg_rman, initially created and maintained by NTT and Itagaki Takahiro.
|
@ -72,6 +72,7 @@ uint32 retention_window = 0;
|
||||
/* compression options */
|
||||
CompressAlg compress_alg = NOT_DEFINED_COMPRESS;
|
||||
int compress_level = DEFAULT_COMPRESS_LEVEL;
|
||||
bool compress_shortcut = false;
|
||||
|
||||
/* other options */
|
||||
char *instance_name;
|
||||
@ -132,6 +133,7 @@ static pgut_option options[] =
|
||||
/* compression options */
|
||||
{ 'f', 36, "compress-algorithm", opt_compress_alg, SOURCE_CMDLINE },
|
||||
{ 'u', 37, "compress-level", &compress_level, SOURCE_CMDLINE },
|
||||
{ 'b', 38, "compress", &compress_shortcut, SOURCE_CMDLINE },
|
||||
/* logging options */
|
||||
{ 'f', 40, "log-level", opt_log_level, SOURCE_CMDLINE },
|
||||
{ 's', 41, "log-filename", &log_filename, SOURCE_CMDLINE },
|
||||
@ -353,6 +355,9 @@ main(int argc, char *argv[])
|
||||
if (num_threads < 1)
|
||||
num_threads = 1;
|
||||
|
||||
if (compress_shortcut)
|
||||
compress_alg = ZLIB_COMPRESS;
|
||||
|
||||
if (backup_subcmd != SET_CONFIG)
|
||||
{
|
||||
if (compress_level != DEFAULT_COMPRESS_LEVEL
|
||||
|
@ -294,6 +294,7 @@ extern uint32 retention_window;
|
||||
/* compression options */
|
||||
extern CompressAlg compress_alg;
|
||||
extern int compress_level;
|
||||
extern bool compress_shortcut;
|
||||
|
||||
#define DEFAULT_COMPRESS_LEVEL 6
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user