рд╡реЙрд▓-рдЬреА рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдмреИрдХрдЕрдк рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкрд░рд┐рдЪрдп

рд╡рд╛рд▓-рдЬреА рдХреНрд▓рд╛рдЙрдб рдкрд░ PostgreSQL рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рдкреНрд░рднрд╛рд╡реА рдЙрдкрдХрд░рдг рд╣реИред рдЕрдкрдиреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рд▓реЛрдХрдкреНрд░рд┐рдп рдЯреВрд▓ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ WALE, рд▓реЗрдХрд┐рди рдЧреЛ рдореЗрдВ рдкреБрдирдГ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рд╡рд╛рд▓-рдЬреА рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ - рдбреЗрд▓реНрдЯрд╛ рдкреНрд░рддрд┐рдпрд╛рдВред рдбреЗрд▓реНрдЯрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐рдпрд╛рдБ рд╡рд╛рд▓-рдЬреА рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдмреИрдХрдЕрдк рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ рдмрджрд▓ рдЧрдП рд╣реИрдВред рд╡рд╛рд▓-рдЬреА рдмреИрдХрдЕрдк рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд╛рд░реА рддрдХрдиреАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд▓-рдЬреА, рд╡рд╛рд▓-рдИ рд╕реЗ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред

рд╡реЙрд▓-рдЬреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╣рдо рдмреИрдХрдЕрдк рдХреЛ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдВрдбреЗрдХреНрд╕ рд╡реНрдпрд╛рдЦреНрдпрд╛рди

рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП S3 рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред S3 рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд╕рд╛рде рд▓рдЪреАрд▓реЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реАрдб рдПрдХреНрд╕реЗрд╕ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХреГрдд рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддрд╛ рд╣реИред

рдРрд╕реЗ рдХрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рднрдВрдбрд╛рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ рдЬреЛ S3 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЬ рд╣рдо рдЫреЛрдЯреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдорд╛рдзрд╛рди - рдорд┐рдирд┐рдпреЛ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред

рд╡реЙрд▓-рдЬреА рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ PostgreSQL рд╕рд░реНрд╡рд░ рдареАрдХ рд╣реИ, рдФрд░ Minio рдХрд╛ рдЙрдкрдпреЛрдЧ S3 рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд┐рдирд┐рдпреЛ рд╕рд░реНрд╡рд░

рдорд┐рдирд┐рдпреЛ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди

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:9000

рдорд┐рдирд┐рдпреЛ рд▓реЙрдиреНрдЪ рд╣реЛ рд░рд╣рд╛ рд╣реИ

systemctl start minio

рдорд┐рдирд┐рдпреЛ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдЬрд╛рдПрдБ http://ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-minio:9000 рдФрд░ рдПрдХ рдмрдХреЗрдЯ рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреАрдЬреА-рдмреИрдХрдЕрдк)ред

рдбреАрдмреА рд╕рд░реНрд╡рд░

рдЖрд░рдкреАрдПрдо рдореЗрдВ рд╡рд╛рд▓-рдЬреА рдореЗрд░реЗ (рдПрдВрдЯреЛрди рдкрд╛рдЯрд╕реЗрд╡) рджреНрд╡рд╛рд░рд╛ рдЕрд╕реЗрдВрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Github, рдлреЗрдбреЛрд░рд╛ COPR.

рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЖрд░рдкреАрдПрдо-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЕрдиреБрджреЗрд╢ рд╕реНрдерд╛рдкрдирд╛ рджреНрд╡рд╛рд░рд╛.

рд╡реЙрд▓-рдЬреА рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде, рдЖрд░рдкреАрдПрдо рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ /etc/wal-gd/server-s3.conf рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИрдВред

backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh

рд╡рд╛рд▓реНрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ.

yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-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 рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ PostgreSQL рд╕рдВрд╕реНрдХрд░рдг 10 рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП wal_level рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

wal_level = archive

рдЖрдЗрдП PostgreSQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд░ 60 рд╕реЗрдХрдВрдб рдореЗрдВ WAL рдЖрд░реНрдХрд╛рдЗрд╡ рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗрдВред рдЙрддреНрдкрд╛рдж рдкрд░, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ Archive_timeout рдорд╛рди рд╣реЛрдЧрд╛ред

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
psql

psql рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ

рдбреЗрдЯрд╛рдмреЗрд╕ test1 рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдБред

create database test1;

рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░реАрдХреНрд╖рдг рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ.

postgres=# c test1;

рд╣рдо рдЯреЗрдмрд▓ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ_рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред

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

рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ test1 рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦрддреЗ рд╣реИрдВ

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

рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкрд░реАрдХреНрд╖рдг

рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╡рд╛рд▓ рдХреЛ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ред

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реНрдХреНрд▓ рдмрдВрдж рдХрд░реЛ.

/var/lib/pgsql/9.6/рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрдВред

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ /usr/local/bin/backup-fetch.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБред

su - postgres
/usr/local/bin/backup-fetch.sh

рдмреИрдХрдЕрдк рдирд┐рд╖реНрдХрд░реНрд╖рдг рдкреВрд░реНрдг.

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде /var/lib/pgsql/9.6/data рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐.conf рдЬреЛрдбрд╝реЗрдВред

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'

рд╣рдо PostgreSQL рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред PostgreSQL рд╕рдВрдЧреНрд░рд╣реАрдд WALs рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдЦреБрд▓реЗрдЧрд╛ред

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐.

рдпрджрд┐ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд┐рдирдЯ рддрдХ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐_target_time рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐.conf рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХрд┐рд╕ рд╕рдордп рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред

restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'

рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рдмрд╛рдж, рддрд╛рд▓рд┐рдХрд╛ Indexing_table рдХреЛ рджреЗрдЦреЗрдВ

 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 рд╕рдВрдЧреНрд░рд╣реАрдд WALs рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдЦреБрд▓реЗрдЧрд╛ред

systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log

рдкрд░реАрдХреНрд╖рдг

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ 1GB рдбреЗрдЯрд╛рдмреЗрд╕ рддреИрдпрд╛рд░ рдХрд░рдирд╛ https://gist.github.com/ololobus/5b25c432f208d7eb31051a5f238dffff

1GB рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмрдХреЗрдЯ рд╕рд╛рдЗрдЬрд╝ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ред

postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB

s4cmd рдЕрдореЗрдЬрд╝рди S3 рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реИред рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ рджреЛрдиреЛрдВ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

S4cmd рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

pip install s4cmd

LZ4

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 ╨Ь╨С ╨╖╨░╨╜╨╕╨╝╨░╨╡╤В ╨┐╨╛╨╗╨╜╤Л╨╣ ╨▒╨╡╨║╨░╨┐

LZMA

╨Я╨╛╤Б╨╗╨╡ ╨│╨╡╨╜╨╡╤А╨░╤Ж╨╕╨╕ 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

Brotli

╨Я╨╛╤Б╨╗╨╡ ╨│╨╡╨╜╨╡╤А╨░╤Ж╨╕╨╕ 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 рд╕рдореБрджрд╛рдп рдХреА рдЪреИрдЯ: https://t.me/pgsql

рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдЬреАрдердм рдХреЛ рдПрдХ рд╕реНрдЯрд╛рд░ рджреЗрдВ рд╡рд╛рд▓-рдЬреА

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ