æåã®éšåã§ã¯ãå¢åããã¯ã¢ãããäœæãããããããªã¢ãŒããµãŒããŒïŒããã¯ã¢ããã®ãããªããžããªïŒã«ã¢ããããŒãããŠãæåŸã®ããã¯ã¢ããã«ããŒã«ããã¯ããæ¹æ³ãåŠã³ãŸããã
ãã®èšäºã§ã¯ãããã¯ã¢ãããæå·åããïŒ2çªç®ã®ãªããžããªãµãŒããŒã§ã¯ãªãïŒS3äºæã¹ãã¬ãŒãžã«ã¢ããããŒãããã¯ãªãŒã³ã¯ã©ã¹ã¿ãŒã«å埩ããæåŸã«ãã€ã³ãã€ã³ã¿ã€ã å埩ïŒPITRïŒã«åŸ©å ããæ¹æ³ãåŠç¿ããŸãã
ç¬é
äœè ã¯DBAã®ãµããããŸããããèªåã§ãã¹ãŠãèšå®ããŠèŠãã®ã奜ããªå ŽåããããŸãã
ãã¬ãŒãã³ã°
ãã®ããã¥ã¢ã«ãè€è£œããã«ã¯ã次ã®ãã®ãå¿ èŠã§ãã
- ããŒã¿ããŒã¹ãåãããµãŒããŒïŒpgbackrestãã€ã³ã¹ããŒã«ããŸãïŒã
- S3ã¹ãã¬ãŒãžïŒAmazonãŸãã¯S3äºæã®ä»»æã®S3ã䜿çšã§ããŸããAmazonS3ã䜿çšããŸãïŒã
- 3çªç®ã®ãµãŒããŒããªãã·ã§ã³ããã®äžã§ãpostgresqlãšpgbackrestãæåãããããã€ããS3ã¹ãã¬ãŒãžããæ¢åã®ããã¯ã¢ããããããã€ããç·Žç¿ãããŸãïŒãµãŒããŒã®çŒãåããç§»åãªã©ïŒã
postgresqlããã§ã«ã€ã³ã¹ããŒã«ãããŠããããšãåæãšããŠãããããpostgresãŠãŒã¶ãŒãååšããŸãã
ååã®èšäºã§pgbackrestã®ã€ã³ã¹ããŒã«ããã»ã¹ã«ã€ããŠèª¬æããŸããããå床è€è£œããå Žåã«åããŠïŒã€ã³ã¹ããŒã«ããåã«ãèªåçšã®sudoãŠãŒã¶ãŒãäœæããŠãã ãã-pgbackrestãŠãŒã¶ãŒåã®sudoãŠãŒã¶ãŒã䜿çšããŸãïŒã
æç€ºãåçŸããéã®åé¡ãå°ãªãããããã«ãèšäºãæžããããã§ãã¯ããããããšãã«ãã©ã®ãŠãŒã¶ãŒãã©ã®æš©éã§ã³ãã³ããå®è¡ããããã€ã¿ãªãã¯äœã§èšè¿°ããŸãã
次ã®ãã¹ã«åŸããŸã
ãpostgresqlãšpgbackrestãæ§æã
ãŸããããã¯ã¢ããã®æå·åãæ§æããŸãïŒ2è¡ïŒ
ããã¯ã¢ããããŠS3ã¹ãã¬ãŒãžã«éä¿¡ããæ¹æ³ãåŠã³ãŸãïŒ5è¡ïŒ
ããã¯ã¢ãããäœæããŸã
ã¯ã©ã¹ã¿ãŒãå£ããæ°ãããµãŒããŒã«ãããã€ããæ¢åã®S3ãªããžããªã«æ¥ç¶ããŠãããã¯ã¢ãããããŒã«ã¢ãããããšããŸã
ãPITRïŒãã€ã³ãã€ã³ã¿ã€ã ãªã«ããªïŒãèŠãŠã¿ãŸããããç¹å®ã®æç¹ã«ãªã«ããªããŸãïŒpgbackrestããã§ã«ããããããŒãã«ãããã¯ã¢ããããŠãããšããŸãããããã ãã4æéããŒã«ããã¯ããå¿ èŠããããŸãïŒãçæ¿ããŸã æ®ã£ãŠãããïŒ
è¡ããïŒ
pgBackRestã®ã€ã³ã¹ããŒã«
sudo userãŸãã¯rootïŒ
1ãpgbackrestããã¢ãŒã«ã€ããããŠã³ããŒããããã®å 容ã/ buildãã©ã«ããŒã«è»¢éããŸãã
sudo mkdir /build
sudo wget -q -O - \
https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz | \
sudo tar zx -C /build
2.ãã«ãã«å¿ èŠãªäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãã
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev \
libpq-dev
3. pgbackrestããŸãšããïŒ
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src
4.å®è¡å¯èœãã¡ã€ã«ã/ usr / binãã£ã¬ã¯ããªã«ã³ããŒããŸãã
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
5.pgBackRestã«ã¯perlãå¿ èŠã§ããã€ã³ã¹ããŒã«ïŒ
sudo apt-get install perl
6.ãã°çšã®ãã£ã¬ã¯ããªãäœæããç¹å®ã®æš©éãä»äžããŸãã
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
7.ãã§ãã¯ïŒ
pgbackrest version
postgresqlãšpgBackRestã®èšå®
sudo userãŸãã¯rootïŒ
1ãpgBackRestãæ©èœããããã«ãpostgresql.confïŒ/ etc / postgresql / 11 /ã¡ã€ã³ãã©ã«ããŒã«ãããŸãïŒã§å¿ èŠãªèšå®ãè¡ããŸãã
archive_command = 'pgbackrest --stanza=main archive-push %p' # main - . postgres main.
archive_mode = on
max_wal_senders = 3
wal_level = replica
2. pgbackrestæ§æãã¡ã€ã«ïŒ/etc/pgbackrest/pgbackrest.confïŒã§å¿ èŠãªèšå®ãè¡ããŸãããã
[main]
pg1-path=/var/lib/postgresql/11/main
[global]
log-level-file=detail
repo1-cipher-pass=tr5+BXdfdoxeyUqfo6AzLTrW+c+Jfd/1QbQj2CDMMBwtB0YGH3EJajry4+Eeen6D
repo1-cipher-type=aes-256-cbc
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2 # , . .. , . " " - .
repo1-type=s3
repo1-s3-bucket=pgbackrest-part2-tutorial
repo1-s3-endpoint=s3.us-east-1.amazonaws.com
repo1-s3-region=us-east-1
repo1-s3-key=9wdS3G8U5wz7kNsFWVGck7DDZ7DtVDtbM
repo1-s3-key-secret=A9zRmW16zXKt2vVA8mmNsFWy2mUAPYHa
start-fast=y
[global:archive-push]
compress-level=3
ãçè§£ã®ãšãããããã§ã¯ããã«æå·åãæ§æããS3ã¹ãã¬ãŒãžã®ãµããŒããæ§æããŸããã
PSèšå®ã«ã³ã¡ã³ãã¯ãããŸããã
PS匷åãªæå·åããŒãçæããã«ã¯ã次ã®ã³ãã³ãã䜿çšã§ããŸãã
openssl rand -base64 48
ãªããžããªã®äœæ
sudoãŠãŒã¶ãŒãŸãã¯rootïŒ
sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R postgres /var/lib/pgbackrest/
sudo -u postgres pgbackrest --stanza=main stanza-create
ãã¹ãŠãããŸããã£ãå ŽåãS3ãã±ããã«pgbackrestã«ãã£ãŠçæããããã¡ã€ã«ã衚瀺ãããŸãã
ããã¯ã¢ããã®äœæïŒ
sudoãŠãŒã¶ãŒãŸãã¯rootïŒ
sudo -u postgres pgbackrest --log-level-console=info --stanza=main backup
pgBackRestã¯æåã®å®å šããã¯ã¢ãããäœæããŸããå¿ èŠã«å¿ããŠãbackupã³ãã³ããå床å®è¡ããã·ã¹ãã ãå¢åããã¯ã¢ãããäœæããããšã確èªã§ããŸãã
å®å šããã¯ã¢ãããåäœæããå Žåã¯ã远å ã®ãã©ã°ãæå®ããŸãã
sudo -u postgres pgbackrest --log-level-console=info --stanza=main --type=full backup
次ã®ã³ãã³ãã䜿çšããŠãããã¯ã¢ããã®ãªã¹ãã衚瀺ã§ããŸãã
sudo -u postgres pgbackrest --stanza=main info
ããã¯ã¢ããã®åŸ©å ïŒ
sudo userãŸãã¯rootïŒ
1ãå®è¡äžã®ã¯ã©ã¹ã¿ãŒã忢ããŸãã
sudo pg_ctlcluster 11 main stop
2.ããã¯ã¢ããããã®å埩ïŒ
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate restore
ããŒã¿ããŒã¹ãæåŸã®å®å šããã¯ã¢ããã®ç¶æ ã«åŸ©å ããã«ã¯ãrecovery_targetãæå®ããã«æ¬¡ã®ã³ãã³ãã䜿çšããŸãã
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta restore
éèŠïŒãªã«ããªåŸãããŒã¿ããŒã¹ããªã«ããªã¢ãŒãã§ãã³ã°ããããšã倿ããå ŽåããããŸãïŒERRORïŒèªã¿åãå°çšãã©ã³ã¶ã¯ã·ã§ã³ã§DROP DATABASEãå®è¡ã§ããŸããïŒãªã©ã®ãšã©ãŒãçºçããŸããããã¯æ¬¡ã®ããã«è§£æ±ºãããŸãïŒã³ãã³ãã®å®è¡åŸãå°ãåŸ ã€å¿ èŠããããŸãïŒã
sudo -u postgres psql -c "select pg_wal_replay_resume()"
UPDïŒç§ãçè§£ããŠããããã«ããã®ãšã©ãŒã¯ãrecovery_target =峿ã§ã®ãªã«ããªåŸãpgbackrestãããŒã¿ããŒã¹ãäžæåæ¢ãããšããäºå®ãåå ã§çºçããŸãããããåé¿ããã«ã¯ãããã€ãã®ãã©ã°ã远å ã§æå®ããå¿ èŠããããŸãïŒãããšããã§ãããã®æå³ãèªãããšãã§ããŸãïŒïŒ
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate --target-action=promote --type=immediate restore
å®éãç¹å®ã®ããã¯ã¢ããããã®ååã§åŸ©å ããããšã¯å¯èœã§ããããã§ã¯ãããã¥ã¡ã³ãã§ãã®æ©èœã®èª¬æãžã®ãªã³ã¯ã®ã¿ãæäŸããŸããéçºè ã¯ããã®ãã©ã¡ãŒã¿ãŒãæ éã«äœ¿çšããããšããå§ããããã®çç±ã説æããŸããç§èªèº«ãããç§ã¯ããã䜿çšããããšã远å ããããšãã§ããŸããäž»ãªããšã¯ããªã«ããªåŸã«ããŒã¿ããŒã¹ããªã«ããªã¢ãŒããçµäºãïŒpg_is_in_recoveryïŒïŒãéžæãããšãfãã衚瀺ãããã¯ãã§ãïŒããªã«ããªåŸã«å®å šããã¯ã¢ãããäœæããå Žåã«åããŠç¢ºèªããããšã§ãã
3.ã¯ã©ã¹ã¿ãŒãéå§ããŸãã
sudo pg_ctlcluster 11 main start
ããã¯ã¢ããã埩å ããåŸã2çªç®ã®ããã¯ã¢ãããå®è¡ããŸãã
sudo -u postgres pgbackrest --log-level-console=info --stanza=main backup
ã¯ãªãŒã³ãªã¯ã©ã¹ã¿ãŒãžã®ããã¯ã¢ããã®åŸ©å ïŒ
äœãã²ã©ãããšãèµ·ãã£ããšæ³åããŠã¿ãŸããã-ãµãŒããŒãçŒå€±ããŸããïŒèœã¡ããæµžæ°Žãããã¢ã¯ã»ã¹ã倱ãããïŒããã¹ãŠãæ°ããã¯ãªãŒã³ãªãµãŒããŒã«åŸ©å ããå¿ èŠããããŸããæ°ãããµãŒããŒã§ã¯ããã§ã«sudoãŠãŒã¶ãŒãäœæããpgbackrestãã€ã³ã¹ããŒã«ããpostgresqlãã€ã³ã¹ããŒã«ããŠãããã¯ãªãŒã³ã§æ°ããã¡ã€ã³ã¯ã©ã¹ã¿ãŒããããŸãã
åã®ãµãŒããŒãšåãæ¹æ³ã§postgresqlãšpgBackRestã®æ§æãã»ããã¢ããããpostgresqlãåèµ·åããŠãrestoreïŒ
sudo userãŸãã¯rootãšåæ§ã®ã³ãã³ãé åºãå®è¡ããã ãã§ã
ã1ãå®è¡äžã®ã¯ã©ã¹ã¿ãŒã忢ããŸãã
sudo pg_ctlcluster 11 main stop
2.ããã¯ã¢ããããã®å埩ïŒ
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate --target-action=promote --type=immediate restore
PSç§ã¯ãã®ã³ãã³ãã®åŸ®åŠãªéããšåŸ®åŠããäžã§èª¬æããŸããã
3.ã¯ã©ã¹ã¿ãŒãéå§ããŸãã
sudo pg_ctlcluster 11 main start
ããã¯ã¢ããã埩å ããåŸã2çªç®ã®ããã¯ã¢ãããå®è¡ããå¿ èŠããããŸãã
sudo -u postgres pgbackrest --log-level-console=info --stanza=main backup
å®éãããããã¹ãŠã§ããç«ãæ¶ããã
ãã€ã³ãã€ã³ã¿ã€ã ãªã«ããªïŒPITRïŒ
16:00ã«ããã¯ã¢ãããäœæããã18ïŒ05ã«èª€ã£ãŠéèŠãªãã¬ãŒããæ¶å»ããŠããŸãã2æéã§å€±ããããªãéèŠãªããŒã¿ã倧éã«äŸµå ¥ãããšæ³åããŠã¿ãŠãã ãããPostgreSQLãç ç²ã«ããŠPgBackRestã¯ããã®ãããªæ©äŒãæäŸããŸããå埩ããã®ã«ååãªæ å ±ãããã°ãç¹å®ã®æç¹ã«ããŒã«ããã¯ã§ããŸãã
ããã¯ãã®ããã«åäœããŸãïŒ
- 18:04ã®æéã«ããŒã«ããã¯ããããšèšããŸãã
- pgBackRestã¯ãæåŸã®ææ°ã®ããã¯ã¢ããïŒ16:00ïŒãæ€çŽ¢ããŸãã
- ããã埩å ããŸããããã¹ãŠãããŒã«ãªãŒããŒããããã§ã¯ãªãã18.04ããåã«äœãšãå®è¡ã§ãããã®ã ãã§ãã
PSãã®ã¡ã«ããºã ã¯WALãã°ã«åºã¥ããŠæ§ç¯ãããŠããŸããããã§èªãããšãã§ããŸãã
次ã®ã³ãã³ãã䜿çšããŠãç¹å®ã®æç¹ïŒã¯ã©ã¹ã¿ãŒã忢ããåŸïŒãžã®ãªã«ããªãŒãå®è¡ã§ããŸãã
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --type=time "--target=2020-09-06 18:27:24.561458+02" --target-action=promote restore
éèŠãªæ³šæ-PostgreSQLã¯WALãã°ãé æ¹åã«ã®ã¿åçã§ããéæ¹åã«ã¯åçã§ããŸãããããã¯å®éã«ã¯ã©ãããæå³ã§ããïŒ
16:00ã«ããã¯ã¢ãããäœæããããšããŸãããã 18:05ã«èª€ã£ãŠããŒãã«ãåé€ãã18ïŒ10ã«ããã§ã«åé€ãããããŒãã«ã䜿çšããŠããã¯ã¢ãããååºŠäœæãããŸããã PITRãäœæããããšãããšãpgBackRestã¯16:00ã«äœæãããããã¯ã¢ãããååŸãã18ïŒ05ããåã®ãã¹ãŠãããŒã«ãªãŒããŒãã18ïŒ10ã«äœæãããããã¯ã¢ãããååŸããããã¹ãŠãããŒã«ããã¯ããŸãããããçè§£ããããšãéèŠã§ãããã®ã¡ã«ããºã ã«ã€ããŠã¯ãããã§è©³ãã説æããŸãã
ããŒãã«ã®åé€ã«é¢ããæ å ±ããã§ã«å«ãŸããŠããããã¯ã¢ãããäœæãããšããŸãã --setãã©ã°ã䜿çšããŠãããŒã¹ïŒããŒãã«ããŸã ããããã¯ã¢ããïŒã«ã©ã®ããã¯ã¢ããã䜿çšããããèããŠã¿ãŸãããã pgBackRestã¯ãã®ããã¯ã¢ãããåããããŒãã«ãåé€ãããåã®ãã¹ãŠãããŒã«ãªãŒããŒããŸãã
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --type=time --set=20200905-183838F_20200906-182612I "--target=2020-09-06 18:27:24.561458+02" --target-action=promote restore
PSäžèšã®ããã¯ã¢ããã®ãªã¹ããååŸããããã®ã³ãã³ãã瀺ããŸããã
ã¯ã©ã¹ã¿ãŒãèµ·åããŸããããèµ·ååŸããã¡ã€ã«/var/log/postgresql/postgresql-11-main.logã調ã¹ãŠã¿ãŸãããããã®äžã§ãæå®ãããæç¹ãžã®å埩ãæåããããšãç€ºãæ¬¡ã®è¡ã«é¢å¿ããããŸãã
starting point-in-time recovery to 2020-09-07 11:26:52.493127+02
...
recovery stopping before commit of transaction 576, time 2020-09-07 11:27:14.584496+02
...
last completed transaction was at log time 2020-09-07 11:24:09.583761+02
ããã§å šéšã§ããæŠéã§äœ¿çšããåã«ããã®ããŒã«ã詊ããŠã¿ãããšã匷ããå§ãããŸãã