рдХреНрд▓рд╛рдЙрдбрд╡рд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓рдЪрд╛ рдмреЕрдХрдЕрдк рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдПрдХ рд╕реЛрдкреЗ рдЖрдгрд┐ рдкреНрд░рднрд╛рд╡реА рд╕рд╛рдзрди рдЖрд╣реЗ. рддреНрдпрд╛рдЪреНрдпрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рд╣реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рдзрдирд╛рдЪреЗ рд╡рд╛рд░рд╕ рдЖрд╣реЗ , рдкрд░рдВрддреБ Go рдордзреНрдпреЗ рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд┐рд▓реЗ. рдкрд░рдВрддреБ WAL-G рдордзреНрдпреЗ рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЖрд╣реЗ - рдбреЗрд▓реНрдЯрд╛ рдкреНрд░рддреА. рдбреЗрд▓реНрдЯрд╛ рдкреНрд░рддреА рдмреЕрдХрдЕрдкрдЪреНрдпрд╛ рдорд╛рдЧреАрд▓ рдЖрд╡реГрддреНрддреАрдкрд╛рд╕реВрди рдмрджрд▓рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реАрдВрдЪреА рдкреГрд╖реНрдареЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рд╛. WAL-G рд╕рдорд╛рдВрддрд░ рдмреЕрдХрдЕрдкрд╕рд╛рдареА рдмрд░реЗрдЪ рддрдВрддреНрд░рдЬреНрдЮрд╛рди рд▓рд╛рдЧреВ рдХрд░рддреЗ. WAL-G WAL-E рдкреЗрдХреНрд╖рд╛ рдЦреВрдк рд╡реЗрдЧрд╡рд╛рди рдЖрд╣реЗ.
wal-g рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдпрд╛рдЪреЗ рддрдкрд╢реАрд▓ рд▓реЗрдЦрд╛рдд рдЖрдврд│реВ рд╢рдХрддрд╛рдд:
рдбреЗрдЯрд╛ рд╕рд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА S3 рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓реЛрдХрдкреНрд░рд┐рдп рдЭрд╛рд▓рд╛ рдЖрд╣реЗ. S3 рдЪрд╛ рдПрдХ рдлрд╛рдпрджрд╛ рдореНрд╣рдгрдЬреЗ API рджреНрд╡рд╛рд░реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛, рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрдЯреЛрд░реЗрдЬрд╕рд╣ рд▓рд╡рдЪрд┐рдХ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╛рдЪрди рдкреНрд░рд╡реЗрд╢рд╛рд╕рд╣, рд╕реНрдЯреЛрд░реЗрдЬрдордзреАрд▓ рдорд╛рд╣рд┐рддреА рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреЗ рдХреЗрд╡рд│ рдЕрдзрд┐рдХреГрдд рд╡реНрдпрдХреНрддреАрдВрджреНрд╡рд╛рд░реЗрдЪ рд╣реЛрддреЗ.
рдЕрдиреЗрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдгрд┐ рдЦрд╛рдЬрдЧреА рд╕реНрдЯреЛрд░реЗрдЬ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЖрд╣реЗрдд рдЬреА S3 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд╛рдкрд░рддрд╛рдд. рдЖрдЬ рдЖрдкрдг рд▓рд╣рд╛рди рд╕реНрдЯреЛрд░реЗрдЬ рд╕реБрд╡рд┐рдзрд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрдкрд╛рдп рдкрд╛рд╣реВ - Minio.
рдПрдХрдЪ PostgreSQL рд╕рд░реНрд╡реНрд╣рд░ wal-g рдЪрд╛рдЪрдгреАрд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрд╣реЗ, рдЖрдгрд┐ Minio рдЪрд╛ рд╡рд╛рдкрд░ S3 рд╕рд╛рдареА рдмрджрд▓реА рдореНрд╣рдгреВрди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.
Minio рд╕рд░реНрд╡реНрд╣рд░
Minio рд╕реНрдерд╛рдкрдирд╛
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio/etc/minio/minio.conf рдордзреНрдпреЗ AccessKey рдЖрдгрд┐ SecretKey рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреЗ
vi /etc/minio/minio.confрдЬрд░ рддреБрдореНрд╣реА Minio рдкреВрд░реНрд╡реА nginx рд╡рд╛рдкрд░рдд рдирд╕рд╛рд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдмрджрд▓рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдЖрд╣реЗ
--address 127.0.0.1:9000--address 0.0.0.0:9000Minio рд▓рд╛рдБрдЪ рдХрд░рд╛
systemctl start minioMinio рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд░ рдЬрд╛ рдЖрдгрд┐ рдПрдХ рдмрд╛рджрд▓реА рддрдпрд╛рд░ рдХрд░рд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, pg-backup).
рдбреАрдмреА рд╕рд░реНрд╡реНрд╣рд░
rpm рдордзреАрд▓ WAL-G рдореА (Anton Patsev) рдПрдХрддреНрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ. , .
рдХреЛрдгрд╛рдХрдбреЗ RPM-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдирд╛рд╣реА, рдЕрдзрд┐рдХреГрдд рд╡рд╛рдкрд░рд╛ рд╕реНрдерд╛рдкрдиреЗрджреНрд╡рд╛рд░реЗ.
wal-g рдмрд╛рдпрдирд░реА рд╕реЛрдмрдд, rpm рдордзреНрдпреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд╕рддрд╛рдд рдЬреЗ /etc/wal-gd/server-s3.conf рдлрд╛рдЗрд▓рдордзреВрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЖрдпрд╛рдд рдХрд░рддрд╛рдд.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.shwal-g рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-gwal-g рдЖрд╡реГрддреНрддреА рддрдкрд╛рд╕рдд рдЖрд╣реЗ.
wal-g --version
wal-g version v0.2.14рддреБрдордЪреНрдпрд╛ рдЧрд░рдЬреЗрдиреБрд╕рд╛рд░ /etc/wal-gd/server-s3.conf рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рд╛.
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╕реНрдЯрд░рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдпрд▓реА рдЖрдгрд┐ рдбреЗрдЯрд╛ рдлрд╛рдпрд▓реА рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХрдкрдгреЗ рдХреНрд▓рд╕реНрдЯрд░ рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдПрдХрддреНрд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд, рдЬреНрдпрд╛рд▓рд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ PGDATA
#!/bin/bash
export PG_VER="9.6"
export WALE_S3_PREFIX="s3://pg-backups" # ╨▒╨░╨║╨╡╤В, ╨║╨╛╤В╨╛╤А╤Л╨╣ ╨╝╤Л ╤Б╨╛╨╖╨┤╨░╨╗╨╕ ╨▓ S3
export AWS_ACCESS_KEY_ID="xxxx" # AccessKey ╨╕╨╖ /etc/minio/minio.conf
export AWS_ENDPOINT="http://ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-minio:9000"
export AWS_S3_FORCE_PATH_STYLE="true"
export AWS_SECRET_ACCESS_KEY="yyyy" # SecretKey ╨╕╨╖ /etc/minio/minio.conf
export PGDATA=/var/lib/pgsql/$PG_VER/data/
export PGHOST=/var/run/postgresql/.s.PGSQL.5432 # ╨б╨╛╨║╨╡╤В ╨┤╨╗╤П ╨┐╨╛╨┤╨║╨╗╤О╤З╨╡╨╜╨╕╤П ╨║ PostgreSQL
export WALG_UPLOAD_CONCURRENCY=2 # ╨Ъ╨╛╨╗-╨▓╨╛ ╨┐╨╛╤В╨╛╨║╨╛╨▓ ╨┤╨╗╤П ╨╖╨░╨║╨░╤З╨║╨╕
export WALG_DOWNLOAD_CONCURRENCY=2 # ╨Ъ╨╛╨╗-╨▓╨╛ ╨┐╨╛╤В╨╛╨║╨╛╨▓ ╨┤╨╗╤П ╤Б╨║╨░╤З╨╕╨▓╨░╨╜╨╕╤П
export WALG_UPLOAD_DISK_CONCURRENCY=2 # ╨Ъ╨╛╨╗-╨▓╨╛ ╨┐╨╛╤В╨╛╨║╨╛╨▓ ╨╜╨░ ╨┤╨╕╤Б╨║╨╡ ╨┤╨╗╤П ╨╖╨░╨║╨░╤З╨║╨╕
export WALG_DELTA_MAX_STEPS=7
export WALG_COMPRESSION_METHOD=brotli # ╨Ъ╨░╨║╨╛╨╣ ╨╝╨╡╤В╨╛╨┤ ╤Б╨╢╨░╤В╨╕╤П ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М.
WAL-G рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддрд╛рдирд╛, рддреБрдореНрд╣реА WALG_DELTA_MAX_STEPS - рдмреЗрд╕ рдмреЕрдХрдЕрдкрдордзреВрди рдбреЗрд▓реНрдЯрд╛ рдмреЕрдХрдЕрдк рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд╛рдпрд▒реНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЖрдгрд┐ рдбреЗрд▓реНрдЯрд╛ рдХреЙрдкреА рдзреЛрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛. рдПрдХрддрд░ рддреБрдореНрд╣реА рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдбреЗрд▓реНрдЯрд╛рдЪреА рдкреНрд░рдд рдмрдирд╡рддрд╛ рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рдореВрд│ рдкреВрд░реНрдг рдмреЕрдХрдЕрдкрдордзреВрди рдбреЗрд▓реНрдЯрд╛ рдмрдирд╡рд╛рд▓. рдЬреЗрд╡реНрд╣рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдЪрд╛ рд╕рдорд╛рди рдШрдЯрдХ рдЖрдкрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдиреЗрд╣рдореА рдмрджрд▓рдд рдЕрд╕рддреЛ, рддреЛрдЪ рдбреЗрдЯрд╛ рд╕рддрдд рдмрджрд▓рдд рдЕрд╕рддреЛ рддреЗрд╡реНрд╣рд╛ рд╣реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдд рдЖрд╣реЗ.
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.
noarch.rpm
yum install -y postgresql96 postgresql96-server mcрдбреЗрдЯрд╛рдмреЗрд╕ рд╕реБрд░реВ рдХрд░реВ.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OKрдЬрд░ рддреБрдореНрд╣реА 1 рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЪрд╛рдЪрдгреА рдХрд░рдд рдЕрд╕рд╛рд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ 10 рдкреЗрдХреНрд╖рд╛ рдХрдореА PostgreSQL рдЖрд╡реГрддреНрддреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА wal_level рдкреЕрд░рд╛рдореАрдЯрд░ рдкреБрдиреНрд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ PostgreSQL рдЖрд╡реГрддреНрддреА 10 рдЖрдгрд┐ рдЬреБрдиреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддрд┐рдХреГрддреА.
wal_level = archivePostgreSQL рд╡рд╛рдкрд░реВрди рдкреНрд░рддреНрдпреЗрдХ 60 рд╕реЗрдХрдВрджрд╛рдВрдиреА WAL рд╕рдВрдЧреНрд░рд╣рдгрд╛рдВрдЪрд╛ рдмреЕрдХрдЕрдк рдШреЗрдК. рдЙрддреНрдкрд╛рджрдирд╛рдордзреНрдпреЗ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рднрд┐рдиреНрди рд╕рдВрдЧреНрд░рд╣рдг_рдХрд╛рд▓рдмрд╛рд╣реНрдп рдореВрд▓реНрдп рдЕрд╕реЗрд▓.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # ╨Ъ╨░╨╢╨┤╤Л╨╡ 60 ╤Б╨╡╨║╤Г╨╜╨┤ ╨▒╤Г╨┤╨╡╤В ╨▓╤Л╨┐╨╛╨╗╨╜╤П╤В╤Б╤П ╨║╨╛╨╝╨░╨╜╨┤╨░ archive_command.PostgreSQL рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ
systemctl start postgresql-9.6рд╡реЗрдЧрд│реНрдпрд╛ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ, рдЖрдореНрд╣реА рддреНрд░реБрдЯреАрдВрд╕рд╛рдареА PostgreSQL рд▓реЙрдЧ рдкрд╛рд╣рддреЛ: (postgresql-Wed.log рд╡рд░реНрддрдорд╛рди рдордзреНрдпреЗ рдмрджрд▓рд╛).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logрдЪрд▓рд╛ psql рд╡рд░ рдЬрд╛рдКрдпрд╛.
su - postgres
psqlpsql рдордзреНрдпреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдХрд░рд╛
рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрд╕реНрдЯ 1 рдордзреНрдпреЗ рдПрдХ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░рд╛.
create database test1;рдбреЗрдЯрд╛рдмреЗрд╕ рдЪрд╛рдЪрдгреАрд╡рд░ рдЬрд╛.
postgres=# c test1;рдПрдХ рдЯреЗрдмрд▓ indexing_table рддрдпрд╛рд░ рдХрд░рд╛.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());рдбреЗрдЯрд╛ рдЬреЛрдбрдд рдЖрд╣реЗ.
рдЖрдореНрд╣реА рдбреЗрдЯрд╛ рдШрд╛рд▓рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рддреЛ. рдЖрдореНрд╣реА 10-20 рдорд┐рдирд┐рдЯреЗ рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЖрд╣реЛрдд.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
doneрдкреВрд░реНрдг рдмреЕрдХрдЕрдк рдШреЗрдгреНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛.
su - postgres
/usr/local/bin/backup-push.shрдЖрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрд╕реНрдЯ1 рдордзреАрд▓ рдЯреЗрдмрд▓рдордзреАрд▓ рд░реЗрдХреЙрд░реНрдб рдкрд╛рд╣рддреЛ
select * from indexing_table;
2020-01-29 09:41:25.226198+
2020-01-29 09:42:25.336989+
2020-01-29 09:43:25.356069+
2020-01-29 09:44:25.37381+
2020-01-29 09:45:25.392944+
2020-01-29 09:46:25.412327+
2020-01-29 09:47:25.432564+
2020-01-29 09:48:25.451985+
2020-01-29 09:49:25.472653+
2020-01-29 09:50:25.491974+
2020-01-29 09:51:25.510178+рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реА рд╡рд░реНрддрдорд╛рди рд╡реЗрд│ рдЖрд╣реЗ.
рд╕рдВрдкреВрд░реНрдг рдмреЕрдХрдЕрдкрдЪреА рдпрд╛рджреА рдкрд╣рд╛
/usr/local/bin/backup-list.shрдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА рдЪрд╛рдЪрдгреА
рд╕рд░реНрд╡ рдЙрдкрд▓рдмреНрдз WAL рд░реЛрд▓рд┐рдВрдЧрд╕рд╣ рдкреВрд░реНрдг рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА.
Postgresql рдерд╛рдВрдмрд╡рд╛.
/var/lib/pgsql/9.6/data рдлреЛрд▓реНрдбрд░рдордзреВрди рд╕рд░реНрд╡рдХрд╛рд╣реА рд╣рдЯрд╡рд╛.
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореНрд╣рдгреВрди /usr/local/bin/backup-fetch.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рд╛.
su - postgres
/usr/local/bin/backup-fetch.shрдмреЕрдХрдЕрдк рдХрд╛рдврдгреЗ рдкреВрд░реНрдг рдЭрд╛рд▓реЗ.
рдЦрд╛рд▓реАрд▓ рд╕рд╛рдордЧреНрд░реАрд╕рд╣ /var/lib/pgsql/9.6/data рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ recovery.conf рдЬреЛрдбрд╛.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'рдЖрдореНрд╣реА PostgreSQL рд╕реБрд░реВ рдХрд░рддреЛ. PostgreSQL рд╕рдВрдЧреНрд░рд╣рд┐рдд WAL рдордзреВрди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХрд░реЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдШрдбреЗрд▓.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logрд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрд│реЗрд╕рд╛рдареА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА.
рдЬрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд┐рдирд┐рдЯрд╛рдкрд░реНрдпрдВрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХрд░рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓, рддрд░ рдЖрдореНрд╣реА recovery.conf рдордзреНрдпреЗ recovery_target_time рдкреЕрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрддреЛ - рдЖрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛрдгрддреНрдпрд╛ рд╡реЗрд│реА рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХрд░рд╛рдпрдЪрд╛ рддреЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЛ.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреАрдирдВрддрд░, рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ_рдЯреЗрдмрд▓ рдЯреЗрдмрд▓ рдкрд╣рд╛
2020-01-29 09:41:25.226198+00
2020-01-29 09:42:25.336989+00
2020-01-29 09:43:25.356069+00
2020-01-29 09:44:25.37381+00
2020-01-29 09:45:25.392944+00рдЖрдореНрд╣реА PostgreSQL рд╕реБрд░реВ рдХрд░рддреЛ. PostgreSQL рд╕рдВрдЧреНрд░рд╣рд┐рдд WAL рдордзреВрди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХрд░реЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдШрдбреЗрд▓.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.logрдЪрд╛рдЪрдгреА
рдпреЗрдереЗ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ 1GB рдбреЗрдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ
1GB рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдмрдХреЗрдЯ рдЖрдХрд╛рд░рд╛рдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдд рдЖрд╣реЗ.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MBs4cmd тАФ ╨▒╨╡╤Б╨┐╨╗╨░╤В╨╜╤Л╨╣ ╨╕╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╨┤╨╗╤П ╤А╨░╨▒╨╛╤В╤Л ╤Б ╨┤╨░╨╜╨╜╤Л╨╝╨╕, ╤А╨░╤Б╨┐╨╛╨╗╨╛╨╢╨╡╨╜╨╜╤Л╨╝╨╕ ╨▓ ╤Е╤А╨░╨╜╨╕╨╗╨╕╤Й╨╡ Amazon S3. ╨г╤В╨╕╨╗╨╕╤В╨░ ╨╜╨░╨┐╨╕╤Б╨░╨╜╨░ ╨╜╨░ ╤П╨╖╤Л╨║╨╡ ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╕╤А╨╛╨▓╨░╨╜╨╕╤П python, ╨╕ ╨▒╨╗╨░╨│╨╛╨┤╨░╤А╤П ╤Н╤В╨╛╨╝╤Г ╨╝╨╛╨╢╨╡╤В ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М╤Б╤П ╨▓ ╨╛╨┐╨╡╤А╨░╤Ж╨╕╨╛╨╜╨╜╤Л╤Е ╤Б╨╕╤Б╤В╨╡╨╝╨░╤Е ╨╕ WindowsрдЖрдгрд┐ Linux.
s4cmd рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдд рдЖрд╣реЗ
pip install s4cmdLZ4
s4cmd --endpoint-url=http://ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-minio:9000 --access-key=xxxx --secret-key=yyyy du -r s3://pg-backups
840540822 s3://pg-backups/wal_005/
840 ╨Ь╨С ╨▓ ╤Д╨╛╤А╨╝╨░╤В╨╡ lz4 ╤В╨╛╨╗╤М╨║╨╛ WAL ╨╗╨╛╨│╨╛╨▓
╨Я╨╛╨╗╨╜╤Л╨╣ ╨▒╨╡╨║╨░╨┐ ╤Б lz4 - 1GB ╨┤╨░╨╜╨╜╤Л╤Е
time backup_push.sh
real 0m18.582s
╨а╨░╨╖╨╝╨╡╤А S3 ╨▒╨░╨║╨╡╤В╨░ ╨┐╨╛╤Б╨╗╨╡ ╨┐╨╛╨╗╨╜╨╛╨│╨╛ ╨▒╨╡╨║╨░╨┐╨░
581480085 s3://pg-backups/basebackups_005/
842374424 s3://pg-backups/wal_005
581 ╨Ь╨С ╨╖╨░╨╜╨╕╨╝╨░╨╡╤В ╨┐╨╛╨╗╨╜╤Л╨╣ ╨▒╨╡╨║╨░╨┐рдПрд▓рдЭреЗрдбрдПрдордП
╨Я╨╛╤Б╨╗╨╡ ╨│╨╡╨╜╨╡╤А╨░╤Ж╨╕╨╕ 1╨У╨С ╨┤╨░╨╜╨╜╤Л╤Е
338413694 s3://pg-backups/wal_005/
338 ╨╝╨▒ ╨╗╨╛╨│╨╛╨▓ ╨▓ ╤Д╨╛╤А╨╝╨░╤В╨╡ lzma
╨Т╤А╨╡╨╝╤П ╨│╨╡╨╜╨╡╤А╨░╤Ж╨╕╨╕ ╨┐╨╛╨╗╨╜╨╛╨│╨╛ ╨▒╨╡╨║╨░╨┐╨░
time backup_push.sh
real 5m25.054s
╨а╨░╨╖╨╝╨╡╤А ╨▒╨░╨║╨╡╤В╨░ ╨▓ S3
270310495 s3://pg-backups/basebackups_005/
433485092 s3://pg-backups/wal_005/
270 ╨╝╨▒ ╨╖╨░╨╜╨╕╨╝╨░╨╡╤В ╨┐╨╛╨╗╨╜╤Л╨╣ ╨▒╨╡╨║╨░╨┐ ╨▓ ╤Д╨╛╤А╨╝╨░╤В╨╡ lzmaрдмреНрд░реЛрдЯрд▓реА
╨Я╨╛╤Б╨╗╨╡ ╨│╨╡╨╜╨╡╤А╨░╤Ж╨╕╨╕ 1╨У╨С ╨┤╨░╨╜╨╜╤Л╤Е
459229886 s3://pg-backups/wal_005/
459 ╨╝╨▒ ╨╗╨╛╨│╨╛╨▓ ╨▓ ╤Д╨╛╤А╨╝╨░╤В╨╡ brotli
╨Т╤А╨╡╨╝╤П ╨│╨╡╨╜╨╡╤А╨░╤Ж╨╕╨╕ ╨┐╨╛╨╗╨╜╨╛╨│╨╛ ╨▒╨╡╨║╨░╨┐╨░
real 0m23.408s
╨а╨░╨╖╨╝╨╡╤А ╨▒╨░╨║╨╡╤В╨░ ╨▓ S3
312960942 s3://pg-backups/basebackups_005/
459309262 s3://pg-backups/wal_005/
312 ╨╝╨▒ ╨╖╨░╨╜╨╕╨╝╨░╨╡╤В ╨┐╨╛╨╗╨╜╤Л╨╣ ╨▒╨╡╨║╨░╨┐ ╨▓ ╤Д╨╛╤А╨╝╨░╤В╨╡ brotli
рдЖрд▓реЗрдЦрд╛рд╡рд░реАрд▓ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреА рддреБрд▓рдирд╛.

рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдмреНрд░реЙрдЯрд▓реА рдЖрдХрд╛рд░рд╛рдд LZMA рд╢реА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рдпреЗрддреЗ, рдкрд░рдВрддреБ рдмреЕрдХрдЕрдк LZ4 рд╡реЗрд│реЗрдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.
рд░рд╢рд┐рдпрди рднрд╛рд╖рд┐рдХ PostgreSQL рд╕рдореБрджрд╛рдпрд╛рдЪреНрдпрд╛ рдЧрдкреНрдкрд╛:
рдХреГрдкрдпрд╛ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕ Github рд▓рд╛ рдПрдХ рддрд╛рд░рд╛ рджреНрдпрд╛
рд╕реНрддреНрд░реЛрдд: www.habr.com
