WAL-G: PostgreSQL DBMS āĻāϰ āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ

āĻāϟāĻŋ āĻĻā§€āĻ°ā§āϘāĻĻāĻŋāύ āϧāϰ⧇āχ āϜāĻžāύāĻž āϗ⧇āϛ⧇ āϝ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āĻĄāĻžāĻŽā§āĻĒāϗ⧁āϞāĻŋāϤ⧇ āĻŦā§āϝāĻžāĻ•āφāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻž (āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ pg_dump āĻŦāĻž pg_dumpall) āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āϧāĻžāϰāĻŖāĻž āύāϝāĻŧāĨ¤ PostgreSQL DBMS āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻ•āϰāϤ⧇, āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻ­āĻžāϞ pg_basebackup, āϝāĻž WAL āϞāϗ⧇āϰ āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ•āĻĒāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϝāĻ–āύ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻžāϰ āĻĒ⧁āϰ⧋ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϟāĻŋ āĻ…āĻ§ā§āϝāϝāĻŧāύ āĻ•āϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ⧇āύ, āϤāĻ–āύ āφāĻĒāύāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āϝ⧇ āĻāϟāĻŋ āϏāĻŽāĻ¸ā§āϤ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϕ⧇ āĻ•āĻŽāĻĒāĻ•ā§āώ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻŸā§āϰāĻžāχāϏāĻžāχāϕ⧇āϞ āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āωāĻĒāϰ⧇ āĻāĻŦāĻ‚ āύ⧀āĻšā§‡ āωāĻ­āϝāĻŧāχ āĻŦā§āϝāĻĨāĻž āϏ⧃āĻˇā§āϟāĻŋ āĻ•āϰāĻŦ⧇ āύāĻžāĨ¤ āĻĻ⧁āĻ°ā§āĻ­ā§‹āĻ— āĻ•āĻŽāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ, WAL-G āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤

āĻ“āϝāĻŧāĻžāϞ-āϜāĻŋ PostgreSQL āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦā§āϝāĻžāĻ• āφāĻĒ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ Go-āϤ⧇ āϞ⧇āĻ–āĻž āĻāĻ•āϟāĻŋ āϟ⧁āϞ (āĻāĻŦāĻ‚ āĻ…āϤāĻŋ āϏāĻŽā§āĻĒā§āϰāϤāĻŋ MySQL/MariaDB, MongoDB āĻāĻŦāĻ‚ FoundationDB) āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻŽāĻžāϜāύ S3 āĻ¸ā§āĻŸā§‹āϰ⧇āϜ (āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāύāĻžāϞāĻ—āϗ⧁āϞāĻŋ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āχāϝāĻŧāĻžāύāĻĄā§‡āĻ•ā§āϏ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ), āϏ⧇āχāϏāĻžāĻĨ⧇ āϗ⧁āĻ—āϞ āĻ•ā§āϞāĻžāωāĻĄ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ, āĻ…ā§āϝāĻžāϜ⧁āϰ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ, āϏ⧁āχāĻĢāϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻŦāĻ‚ āϏāĻšāϜāĻ­āĻžāĻŦ⧇ āĻĢāĻžāχāϞ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻž āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇āĨ¤ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϏ⧇āϟāφāĻĒāϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϧāĻžāĻĒ⧇ āύ⧇āĻŽā§‡ āφāϏ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāχ āĻŦāĻŋāώāϝāĻŧ⧇ āύāĻŋāĻŦāĻ¨ā§āϧāϗ⧁āϞāĻŋ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āϜ⧁āĻĄāĻŧ⧇ āĻ›āĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻ›āĻŋāϟāĻŋāϝāĻŧ⧇ āĻĨāĻžāĻ•āĻžāϰ āĻ•āĻžāϰāϪ⧇, āĻļ⧁āϰ⧁ āĻĨ⧇āϕ⧇ āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏāĻŽāĻ¸ā§āϤ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϗ⧁āϞāĻŋ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϕ⧋āύāĻ“ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āύ⧇āχ (āĻšāĻžāĻŦā§āϰ⧇āϤ⧇ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĒā§‹āĻ¸ā§āϟ āϰāϝāĻŧ⧇āϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏ⧇āĻ–āĻžāύ⧇ āĻ…āύ⧇āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻŽāĻŋāϏ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇)āĨ¤

WAL-G: PostgreSQL DBMS āĻāϰ āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āφāĻŽāĻžāϰ āĻœā§āĻžāĻžāύ āĻĒāĻĻā§āϧāϤāĻŋāĻ—āϤāĻ­āĻžāĻŦ⧇ āϞ⧇āĻ–āĻž āĻšāϝāĻŧ⧇āϛ⧇. āφāĻŽāĻŋ āĻāĻ•āϜāύ DBA āύāχ āĻāĻŦāĻ‚ āφāĻŽāĻŋ āϕ⧋āĻĨāĻžāĻ“ āϏāĻžāϧāĻžāϰāĻŖ āĻŽāĻžāύ⧁āώ⧇āϰ āĻ­āĻžāώāĻžāϝāĻŧ āύāĻŋāĻœā§‡āϕ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ, āϤāĻžāχ āϝ⧇āϕ⧋āύ⧋ āϏāĻ‚āĻļā§‹āϧāύ āĻ¸ā§āĻŦāĻžāĻ—āϤ āϜāĻžāύāĻžāχ!

āφāĻŽāĻŋ āφāϞāĻžāĻĻāĻžāĻ­āĻžāĻŦ⧇ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāϤ⧇ āϚāĻžāχ āϝ⧇, āύ⧀āĻšā§‡āϰ āϏāĻŦāĻ•āĻŋāϛ⧁āχ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ• āĻāĻŦāĻ‚ PostgreSQL 12.3-āĻāϰ āϜāĻ¨ā§āϝ āĻĒāϰ⧀āĻ•ā§āώāĻŋāϤāĨ¤ Ubuntu ā§§ā§Ž.ā§Ļā§Ē, āϏāĻ•āϞ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ…āĻŦāĻļā§āϝāχ āĻāĻ•āϜāύ āĻŦāĻŋāĻļ⧇āώāĻžāϧāĻŋāĻ•āĻžāϰāĻĒā§āϰāĻžāĻĒā§āϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāĻžāϞāĻžāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āϞ⧇āĻ–āĻžāϰ āϏāĻŽāϝāĻŧ, WAL-G āĻāϰ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ v0.2.15 (āĻŽāĻžāĻ°ā§āϚ 2020). āĻāϟāĻŋāχ āφāĻŽāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ (āϤāĻŦ⧇ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŽāĻžāĻ¸ā§āϟāĻžāϰ āĻļāĻžāĻ–āĻž āĻĨ⧇āϕ⧇ āĻāϟāĻŋ āύāĻŋāĻœā§‡āχ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻŦ⧇ āĻ—āĻŋāĻĨ⧁āĻŦ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ⧇ āĻāϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ¸ā§āϤ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϰāϝāĻŧ⧇āϛ⧇) āĻĄāĻžāωāύāϞ⧋āĻĄ āĻāĻŦāĻ‚ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϕ⧇ āϝāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇:

#!/bin/bash

curl -L "https://github.com/wal-g/wal-g/releases/download/v0.2.15/wal-g.linux-amd64.tar.gz" -o "wal-g.linux-amd64.tar.gz"
tar -xzf wal-g.linux-amd64.tar.gz
mv wal-g /usr/local/bin/

āĻāϰ āĻĒāϰ⧇, āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ WAL-G āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ PostgreSQL āύāĻŋāĻœā§‡āχāĨ¤

WAL-G āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻŦā§āϝāĻžāĻ•āφāĻĒ āϏāĻ‚āϰāĻ•ā§āώāϪ⧇āϰ āωāĻĻāĻžāĻšāϰāϪ⧇āϰ āϜāĻ¨ā§āϝ, Amazon S3 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻŦ⧇ (āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āφāĻŽāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ āĻāĻŦāĻ‚ āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āϖ⧁āĻŦāχ āϏāĻ¸ā§āϤāĻž) āĻāϟāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϰ āĻāĻ•āϟāĻŋ "s3 āĻŦāĻžāϞāϤāĻŋ" āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āϕ⧀āϗ⧁āϞāĻŋāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧎

WAL-G āϏāĻŽā§āĻŦāĻ¨ā§āϧ⧇ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϏāĻŽāĻ¸ā§āϤ āύāĻŋāĻŦāĻ¨ā§āϧ āĻĒāϰāĻŋāĻŦ⧇āĻļ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāχ āϰāĻŋāϞāĻŋāĻœā§‡āϰ āϏāĻžāĻĨ⧇ āϏ⧇āϟāĻŋāĻ‚āϏ āĻāĻ–āĻžāύ⧇ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ .walg.json āĻĢāĻžāχāϞ āĻĒā§‹āĻ¸ā§āϟāĻ—ā§āϰ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻšā§‹āĻŽ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϤ⧇āĨ¤ āĻāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻŦā§āϝāĻžāĻļ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϟāĻŋ āϚāĻžāϞāĻžāύ:

#!/bin/bash

cat > /var/lib/postgresql/.walg.json << EOF
{
    "WALG_S3_PREFIX": "s3://your_bucket/path",
    "AWS_ACCESS_KEY_ID": "key_id",
    "AWS_SECRET_ACCESS_KEY": "secret_key",
    "WALG_COMPRESSION_METHOD": "brotli",
    "WALG_DELTA_MAX_STEPS": "5",
    "PGDATA": "/var/lib/postgresql/12/main",
    "PGHOST": "/var/run/postgresql/.s.PGSQL.5432"
}
EOF
# ĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊĐž ĐŧĐĩĐŊŅĐĩĐŧ вĐģадĐĩĐģŅŒŅ†Đ° Ņ„Đ°ĐšĐģа:
chown postgres: /var/lib/postgresql/.walg.json

āφāĻŽāĻžāϕ⧇ āϏāĻŽāĻ¸ā§āϤ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāĻ•āϟ⧁ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āϝāĻžāĻ•:

  • WALG_S3_PREFIX - āφāĻĒāύāĻžāϰ S3 āĻŦāĻžāϞāϤāĻŋāϤ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāϰ āĻĒāĻĨ āϝ⧇āĻ–āĻžāύ⧇ āĻŦā§āϝāĻžāĻ•āφāĻĒ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻšāĻŦ⧇ (āφāĻĒāύāĻŋ āϰ⧁āϟ āĻŦāĻž āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ);
  • AWS_ACCESS_KEY_ID - S3 āĻ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āϕ⧀ (āĻāĻ•āϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻāχ āϕ⧀āϗ⧁āϞāĻŋāϰ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒāĻ āύ āύ⧀āϤāĻŋ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇! āĻāϟāĻŋ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ⧇āϰ āĻŦāĻŋāĻ­āĻžāϗ⧇ āφāϰāĻ“ āĻŦāĻŋāĻļāĻĻ⧇ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤);
  • AWS_SECRET_ACCESS_KEY - S3 āĻ¸ā§āĻŸā§‹āϰ⧇āĻœā§‡ āĻ—ā§‹āĻĒāύ āϕ⧀;
  • WALG_COMPRESSION_METHOD - āĻ•āĻŽā§āĻĒā§āϰ⧇āĻļāύ āĻĒāĻĻā§āϧāϤāĻŋ, āĻŦā§āϰāϟāϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻ­āĻžāϞ (āϝ⧇āĻšā§‡āϤ⧁ āĻāϟāĻŋ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āφāĻ•āĻžāϰ āĻāĻŦāĻ‚ āĻ•āĻŽā§āĻĒā§āϰ⧇āĻļāύ/āĻĄāĻŋāĻ•āĻŽā§āĻĒā§āϰ⧇āĻļāύ āĻ—āϤāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ āϏ⧋āύāĻžāϞ⧀ āĻ—āĻĄāĻŧ);
  • WALG_DELTA_MAX_STEPS - āĻāĻ•āϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦā§āϝāĻžāĻ•āφāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āφāϗ⧇ "āĻĄā§‡āĻ˛ā§āϟāĻž" āĻāϰ āϏāĻ‚āĻ–ā§āϝāĻž (āϤāĻžāϰāĻž āϏāĻŽāϝāĻŧ āĻāĻŦāĻ‚ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻž āĻĄā§‡āϟāĻžāϰ āφāĻ•āĻžāϰ āĻŦāĻžāρāϚāĻžāϝāĻŧ, āϤāĻŦ⧇ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ⧇āϰ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϟāĻŋāϕ⧇ āĻ•āĻŋāϛ⧁āϟāĻž āϧ⧀āϰ āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇, āϤāĻžāχ āĻŦāĻĄāĻŧ āĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧁āĻ•ā§āϤāĻŋāϝ⧁āĻ•ā§āϤ āύāϝāĻŧ);
  • PGDATA - āφāĻĒāύāĻžāϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĄā§‡āϟāĻž āϏāĻš āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϰ āĻĒāĻĨ (āφāĻĒāύāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϚāĻžāϞāĻžāύ⧋āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύ pg_lsclusters);
  • PGHOST - āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻž, āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻŦā§āϝāĻžāĻ•āφāĻĒ āϏāĻš āĻāχ āωāĻĻāĻžāĻšāϰāϪ⧇āϰ āĻŽāϤ⧋ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻ•ā§āϏ-āϏāϕ⧇āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāϟāĻŋ āĻ•āϰāĻž āĻ­āĻžāϞāĨ¤

āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻŦ⧇: https://github.com/wal-g/wal-g/blob/v0.2.15/PostgreSQL.md#configuration.

PostgreSQL āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āφāĻ°ā§āĻ•āĻžāχāĻ­āĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻ•ā§āϞāĻžāωāĻĄā§‡ WAL āϞāĻ— āφāĻĒāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ (āϝāĻĻāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ), āφāĻĒāύāĻžāϕ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ⧇ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ /etc/postgresql/12/main/postgresql.conf. āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻļ⧁āϰ⧁āϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āύāĻŋāĻšā§‡āϰ āϕ⧋āύ⧋ āϏ⧇āϟāĻŋāĻ‚āϏ āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āĻŽāĻžāύ āϏ⧇āϟ āĻ•āϰāĻž āύ⧇āχ, āϝāĻžāϤ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϞ⧋āĻĄ āĻ•āϰāĻž āĻšāϝāĻŧ, DBMS āĻ•ā§āĻ°ā§āϝāĻžāĻļ āύāĻž āĻšāϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāχ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

#!/bin/bash

echo "wal_level=replica" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_mode=on" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_command='/usr/local/bin/wal-g wal-push "%p" >> /var/log/postgresql/archive_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf
echo “archive_timeout=60” >> /etc/postgresql/12/main/postgresql.conf
echo "restore_command='/usr/local/bin/wal-g wal-fetch "%f" "%p" >> /var/log/postgresql/restore_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf

# ĐŋĐĩŅ€ĐĩĐˇĐ°ĐŗŅ€ŅƒĐļаĐĩĐŧ ĐēĐžĐŊŅ„Đ¸Đŗ ҇ĐĩŅ€ĐĩС ĐžŅ‚ĐŋŅ€Đ°Đ˛Đē҃ SIGHUP ŅĐ¸ĐŗĐŊаĐģа Đ˛ŅĐĩĐŧ ĐŋŅ€ĐžŅ†ĐĩŅŅĐ°Đŧ БД
killall -s HUP postgres

āϏ⧇āϟ āĻ•āϰāĻž āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋāϗ⧁āϞāĻŋāϰ āĻŦāĻ°ā§āĻŖāύāĻž:

  • āĻ“āϝāĻŧāĻžāϞ_āϞ⧇āϭ⧇āϞ - WAL āϞāĻ—āϗ⧁āϞāĻŋāϤ⧇ āĻ•āϤ āϤāĻĨā§āϝ āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇, "āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ" - āϏāĻŦāĻ•āĻŋāϛ⧁ āϞāĻŋāϖ⧁āύ;
  • āϏāĻ‚āϰāĻ•ā§āώāĻŖāĻžāĻ—āĻžāϰ_āĻŽā§‹āĻĄ - āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĨ⧇āϕ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ WAL āϞāĻ— āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻž āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ āϏāĻ‚āϰāĻ•ā§āώāĻŖāĻžāĻ—āĻžāϰ_āĻ•āĻŽāĻžāĻ¨ā§āĻĄ;
  • āϏāĻ‚āϰāĻ•ā§āώāĻŖāĻžāĻ—āĻžāϰ_āĻ•āĻŽāĻžāĻ¨ā§āĻĄ - āĻāĻ•āϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ WAL āϞāĻ— āφāĻ°ā§āĻ•āĻžāχāĻ­ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ;
  • āφāĻ°ā§āĻ•āĻžāχāĻ­_āϟāĻžāχāĻŽāφāωāϟ - āϞāϗ⧇āϰ āφāĻ°ā§āĻ•āĻžāχāĻ­āĻŋāĻ‚ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏāĻŽā§āĻĒāĻ¨ā§āύ āĻšāϞ⧇āχ āϏāĻžā§āϚāĻžāϞāĻŋāϤ āĻšāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϏāĻžāĻŽāĻžāĻ¨ā§āϝ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ/āϏāĻ‚āϝ⧋āϜāύ āĻ•āϰ⧇, āϤāĻžāĻšāϞ⧇ āĻāĻ–āĻžāύ⧇ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āϏ⧀āĻŽāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āĻŦā§‹āϧāĻ—āĻŽā§āϝ āĻšāϝāĻŧ, āϝāĻžāϰ āĻĒāϰ⧇ āφāĻ°ā§āĻ•āĻžāχāĻ­āĻŋāĻ‚ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϕ⧇ āĻœā§‹āϰ āĻ•āϰ⧇ āĻĄāĻžāĻ•āĻž āĻšāĻŦ⧇ (āφāĻŽāĻŋ āĻĒā§āϰāϤāĻŋ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āύāĻŋāĻŦāĻŋāĻĄāĻŧāĻ­āĻžāĻŦ⧇ āϞāĻŋāĻ–āĻŋ, āϤāĻžāχ āφāĻŽāĻŋ āĻāχ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāϟāĻŋ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇ āϏ⧇āϟ āύāĻž āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ);
  • restore_command - āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻĨ⧇āϕ⧇ WAL āϞāĻ— āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻžāϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻŦ⧇ āϝāĻĻāĻŋ "āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦā§āϝāĻžāĻ•āφāĻĒ" (āĻŦ⧇āϏ āĻŦā§āϝāĻžāĻ•āφāĻĒ) āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ• āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āύāĻž āĻĨāĻžāϕ⧇āĨ¤

āφāĻĒāύāĻŋ āĻ…āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇āϰ āĻ…āύ⧁āĻŦāĻžāĻĻ⧇ āĻāχ āϏāĻŽāĻ¸ā§āϤ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇āύ: https://postgrespro.ru/docs/postgresql/12/runtime-config-wal.

āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻžāĻ•āφāĻĒ āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€ āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇⧎

āϝ⧇ āϝāĻžāχ āĻŦāϞ⧁āĻ• āύāĻž āϕ⧇āύ, āĻāϟāĻŋ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āωāĻĒāĻžāϝāĻŧ āĻšāϞ āĻ•ā§āϰ⧋āύāĨ¤ āĻāϟāĻŋāχ āφāĻŽāϰāĻž āĻŦā§āϝāĻžāĻ•āφāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻŦāĨ¤ āĻāĻ•āϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦā§āϝāĻžāĻ•āφāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•: wal-g-āĻ āĻāϟāĻŋ āϞāĻžā§āϚ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻŦā§āϝāĻžāĻ•āφāĻĒ-āĻĒ⧁āĻļ. āϤāĻŦ⧇ āĻĒā§āϰāĻĨāĻŽā§‡, āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ āĻŋāĻ• āφāϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻĒā§‹āĻ¸ā§āϟāĻ—ā§āϰ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻāχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϚāĻžāϞāĻžāύ⧋ āĻ­āĻžāϞ (āĻāĻŦāĻ‚ āϕ⧋āύāĻ“ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ¤ā§āϰ⧁āϟāĻŋ āύ⧇āχ):

#!/bin/bash

su - postgres -c '/usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main'

āϞāĻžā§āϚ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟāϗ⧁āϞāĻŋ āĻĄā§‡āϟāĻž āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϰ āĻĒāĻĨ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ - āφāĻŽāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻŽāύ⧇ āĻ•āϰāĻŋāϝāĻŧ⧇ āĻĻāĻŋāĻšā§āĻ›āĻŋ āϝ⧇ āφāĻĒāύāĻŋ āĻāϟāĻŋ āϚāĻžāϞāĻŋāϝāĻŧ⧇ āĻāϟāĻŋ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύ pg_lsclusters.

āϝāĻĻāĻŋ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ¤ā§āϰ⧁āϟāĻŋ āĻ›āĻžāĻĄāĻŧāĻžāχ āϚāϞ⧇ āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āĻĄā§‡āϟāĻž S3 āĻ¸ā§āĻŸā§‹āϰ⧇āĻœā§‡ āϞ⧋āĻĄ āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻŋ āĻ•ā§āϰāύāϟāĻžāĻŦ⧇ āĻĒāĻ°ā§āϝāĻžāϝāĻŧāĻ•ā§āϰāĻŽāĻŋāĻ• āϞāĻžā§āϚ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

#!/bin/bash

echo "15 4 * * *    /usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main >> /var/log/postgresql/walg_backup.log 2>&1" >> /var/spool/cron/crontabs/postgres
# СадаĐĩĐŧ вĐģадĐĩĐģŅŒŅ†Đ° и Đ˛Ņ‹ŅŅ‚Đ°Đ˛ĐģŅĐĩĐŧ ĐŋŅ€Đ°Đ˛Đ¸ĐģҌĐŊŅ‹Đĩ ĐŋŅ€Đ°Đ˛Đ° Ņ„Đ°ĐšĐģ҃
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

āĻāχ āωāĻĻāĻžāĻšāϰāϪ⧇, āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āϏāĻ•āĻžāϞ 4:15 āĻ āĻļ⧁āϰ⧁ āĻšāϝāĻŧāĨ¤

āĻĒ⧁āϰāĻžāύ⧋ āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāĻšā§āϛ⧇

āϖ⧁āĻŦ āϏāĻŽā§āĻ­āĻŦāϤ, āφāĻĒāύāĻžāϕ⧇ āĻŽā§‡āϏ⧋āĻœā§‹āϝāĻŧāĻŋāĻ• āϝ⧁āϗ⧇āϰ āĻāϕ⧇āĻŦāĻžāϰ⧇ āϏāĻŽāĻ¸ā§āϤ āĻŦā§āϝāĻžāĻ•āφāĻĒ āϰāĻžāĻ–āϤ⧇ āĻšāĻŦ⧇ āύāĻž, āϤāĻžāχ āĻāϟāĻŋ āĻĒāĻ°ā§āϝāĻžāϝāĻŧāĻ•ā§āϰāĻŽā§‡ āφāĻĒāύāĻžāϰ āĻ¸ā§āĻŸā§‹āϰ⧇āϜāϕ⧇ "āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ" āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āωāĻĒāϝ⧋āĻ—ā§€ āĻšāĻŦ⧇ (āωāĻ­āϝāĻŧ "āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦā§āϝāĻžāĻ•āφāĻĒ" āĻāĻŦāĻ‚ āĻ“āϝāĻŧāĻžāϞ āϞāĻ—)āĨ¤ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻ•ā§āϰ⧋āύ āϟāĻžāĻ¸ā§āϕ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāϟāĻŋ āĻ•āϰāĻŦ:

#!/bin/bash

echo "30 6 * * *    /usr/local/bin/wal-g delete before FIND_FULL $(date -d '-10 days' '+%FT%TZ') --confirm >> /var/log/postgresql/walg_delete.log 2>&1" >> /var/spool/cron/crontabs/postgres
# Đĩ҉ґ Ņ€Đ°Đˇ СадаĐĩĐŧ вĐģадĐĩĐģŅŒŅ†Đ° и Đ˛Ņ‹ŅŅ‚Đ°Đ˛ĐģŅĐĩĐŧ ĐŋŅ€Đ°Đ˛Đ¸ĐģҌĐŊŅ‹Đĩ ĐŋŅ€Đ°Đ˛Đ° Ņ„Đ°ĐšĐģ҃ (Ņ…ĐžŅ‚ŅŒ ŅŅ‚Đž ĐžĐąŅ‹Ņ‡ĐŊĐž ŅŅ‚Đž и ĐŊĐĩ ĐŊ҃ĐļĐŊĐž ĐŋĐžĐ˛Ņ‚ĐžŅ€ĐŊĐž Đ´ĐĩĐģĐ°Ņ‚ŅŒ)
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

āĻ•ā§āϰ⧋āύ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āϏāĻ•āĻžāϞ 6:30 āϟāĻžāϝāĻŧ āĻāχ āϟāĻžāĻ¸ā§āĻ•āϟāĻŋ āϚāĻžāϞāĻžāĻŦ⧇, āĻ—āϤ 10 āĻĻāĻŋāύ⧇āϰ āĻ•āĻĒāĻŋ āĻŦā§āϝāϤ⧀āϤ āϏāĻŦāĻ•āĻŋāϛ⧁ (āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦā§āϝāĻžāĻ•āφāĻĒ, āĻĄā§‡āĻ˛ā§āϟāĻž āĻāĻŦāĻ‚ āĻ“āϝāĻŧāĻžāϞ) āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻŦ⧇, āϤāĻŦ⧇ āĻ•āĻŽāĻĒāĻ•ā§āώ⧇ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻžāĻ•āφāĻĒ āϰ⧇āϖ⧇ āϝāĻžāĻŦ⧇ āĻĨ⧇āϕ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϤāĻžāϰāĻŋāĻ– āϝāĻžāϤ⧇ āϕ⧋āύ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ ĐŋĐžŅĐģĐĩ āϤāĻžāϰāĻŋāĻ–āϗ⧁āϞāĻŋ āĻĒāĻŋāφāχāϟāĻŋāφāϰ-āĻ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ›āĻŋāϞāĨ¤

āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻĨ⧇āϕ⧇ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻāϟāĻŋ āϕ⧋āύāĻ“ āĻ—ā§‹āĻĒāύ āĻŦāĻŋāώāϝāĻŧ āύāϝāĻŧ āϝ⧇ āĻāĻ•āϟāĻŋ āϏ⧁āĻ¸ā§āĻĨ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āϚāĻžāĻŦāĻŋāĻ•āĻžāĻ āĻŋ āĻšāϞ āĻĒāĻ°ā§āϝāĻžāϝāĻŧāĻ•ā§āϰāĻŽāĻŋāĻ• āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻāĻŦāĻ‚ āĻ­āĻŋāϤāϰ⧇ āĻĨāĻžāĻ•āĻž āĻĄā§‡āϟāĻžāϰ āĻ…āĻ–āĻŖā§āĻĄāϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāĻžāĨ¤ āφāĻŽāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻāχ āĻŦāĻŋāĻ­āĻžāϗ⧇ WAL-G āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻŦāϞāĻŦ, āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻĒāϰ⧇ āĻšā§‡āĻ•āϗ⧁āϞāĻŋāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻŦāĨ¤

āĻāϟāĻŋ āĻĒ⧃āĻĨāĻ•āĻ­āĻžāĻŦ⧇ āϞāĻ•ā§āώ āĻ•āϰāĻž āωāϚāĻŋāϤ āϝ⧇āϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ (āϏāĻŦāĻ•āĻŋāϛ⧁ āϝāĻž āĻ‰ā§ŽāĻĒāĻžāĻĻāύ āύāϝāĻŧ) āφāĻĒāύāĻžāϕ⧇ S3-āĻ āĻāĻ•āϟāĻŋ āĻĒāĻ āύāϝ⧋āĻ—ā§āϝ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āĻĻ⧁āĻ°ā§āϘāϟāύāĻžāĻ•ā§āϰāĻŽā§‡ āĻŦā§āϝāĻžāĻ•āφāĻĒāϗ⧁āϞāĻŋ āĻ“āĻ­āĻžāϰāϰāĻžāχāϟ āύāĻž āĻšāϝāĻŧāĨ¤ WAL-G-āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻĒāύāĻžāϕ⧇ āĻ—ā§āϰ⧁āĻĒ āύ⧀āϤāĻŋāϤ⧇ S3 āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ…āϧāĻŋāĻ•āĻžāϰāϗ⧁āϞāĻŋ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ (āĻĒā§āϰāĻ­āĻžāĻŦ: āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻāĻŋāύ): s3: GetObject, s3:āϞāĻŋāĻ¸ā§āϟāĻŦāĻžāϕ⧇āϟ, s3: GetBucketLocation. āĻāĻŦāĻ‚, āĻ…āĻŦāĻļā§āϝāχ, āϏ⧇āϟ āĻ•āϰāϤ⧇ āϭ⧁āϞāĻŦ⧇āύ āύāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖāĻžāĻ—āĻžāϰ_āĻŽā§‹āĻĄ = āĻŦāĻ¨ā§āϧ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĢāĻžāχāϞ⧇ postgresql.conf, āϝāĻžāϤ⧇ āφāĻĒāύāĻžāϰ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻļāĻžāĻ¨ā§āϤāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻžāĻ• āφāĻĒ āĻ•āϰāϤ⧇ āϚāĻžāϝāĻŧ āύāĻžāĨ¤

āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻšāĻžāϤ āĻāĻ•āϟāĻŋ āϏāĻžāĻŽāĻžāĻ¨ā§āϝ āφāĻ¨ā§āĻĻā§‹āϞāύ āϏāĻ™ā§āϗ⧇ āĻŦāĻžāĻšāĻŋāϤ āĻšāϝāĻŧ āϏāĻŽāĻ¸ā§āϤ PostgreSQL āĻĄā§‡āϟāĻž āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāĻšā§āϛ⧇ (āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻš), āϤāĻžāχ āφāĻĒāύāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āϏāϤāĻ°ā§āĻ•āϤāĻž āĻ…āĻŦāϞāĻŽā§āĻŦāύ āĻ•āϰ⧁āύāĨ¤

#!/bin/bash

# ĐĩҁĐģи ĐĩŅŅ‚ŅŒ йаĐģаĐŊŅĐ¸Ņ€ĐžĐ˛Ņ‰Đ¸Đē ĐŋОдĐēĐģŅŽŅ‡ĐĩĐŊиК (ĐŊаĐŋŅ€Đ¸ĐŧĐĩŅ€, pgbouncer), Ņ‚Đž вĐŊĐ°Ņ‡Đ°ĐģĐĩ ĐžŅ‚ĐēĐģŅŽŅ‡Đ°ĐĩĐŧ ĐĩĐŗĐž, Ņ‡Ņ‚ĐžĐąŅ‹ ĐžĐŊ ĐŊĐĩ ĐŊĐ°Ņ€Ņ‹ĐŗĐ°Đģ ĐžŅˆĐ¸ĐąĐžĐē в ĐģĐžĐŗ
service pgbouncer stop
# ĐĩҁĐģи ĐĩŅŅ‚ŅŒ Đ´ĐĩĐŧĐžĐŊ, ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ĐŋĐĩŅ€ĐĩСаĐŋ҃ҁĐēаĐĩŅ‚ ҃ĐŋĐ°Đ˛ŅˆĐ¸Đĩ ĐŋŅ€ĐžŅ†Đĩҁҁҋ (ĐŊаĐŋŅ€Đ¸ĐŧĐĩŅ€, monit), Ņ‚Đž ĐžŅŅ‚Đ°ĐŊавĐģиваĐĩĐŧ в ĐŊŅ‘Đŧ ĐŋŅ€ĐžŅ†Đĩҁҁ ĐŧĐžĐŊĐ¸Ņ‚ĐžŅ€Đ¸ĐŊĐŗĐ° ĐąĐ°ĐˇŅ‹ (҃ ĐŧĐĩĐŊŅ ŅŅ‚Đž pgsql12)
monit stop pgsql12
# иĐģи ĐžŅŅ‚Đ°ĐŊавĐģиваĐĩĐŧ ĐŧĐžĐŊĐ¸Ņ‚ĐžŅ€Đ¸ĐŊĐŗ ĐŋĐžĐģĐŊĐžŅŅ‚ŅŒŅŽ
service monit stop
# ĐžŅŅ‚Đ°ĐŊавĐģиваĐĩĐŧ ŅĐ°Đŧ҃ ĐąĐ°ĐˇŅƒ даĐŊĐŊҋ҅
service postgresql stop
# ŅƒĐ´Đ°ĐģŅĐĩĐŧ Đ˛ŅĐĩ даĐŊĐŊŅ‹Đĩ иС Ņ‚ĐĩĐēŅƒŅ‰ĐĩĐš ĐąĐ°ĐˇŅ‹ (!!!); ĐģŅƒŅ‡ŅˆĐĩ ĐŋŅ€ĐĩĐ´Đ˛Đ°Ņ€Đ¸Ņ‚ĐĩĐģҌĐŊĐž ŅĐ´ĐĩĐģĐ°Ņ‚ŅŒ Đ¸Ņ… ĐēĐžĐŋĐ¸ŅŽ, ĐĩҁĐģи ĐĩŅŅ‚ŅŒ ŅĐ˛ĐžĐąĐžĐ´ĐŊĐžĐĩ ĐŧĐĩŅŅ‚Đž ĐŊа Đ´Đ¸ŅĐēĐĩ
rm -rf /var/lib/postgresql/12/main
# ҁĐēĐ°Ņ‡Đ¸Đ˛Đ°ĐĩĐŧ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽ и Ņ€Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€ŅƒĐĩĐŧ ĐĩŅ‘
su - postgres -c '/usr/local/bin/wal-g backup-fetch /var/lib/postgresql/12/main LATEST'
# ĐŋĐžĐŧĐĩŅ‰Đ°ĐĩĐŧ Ņ€ŅĐ´ĐžĐŧ ҁ йаСОК ҁĐŋĐĩŅ†Đ¸Đ°ĐģҌĐŊŅ‹Đš Ņ„Đ°ĐšĐģ-ŅĐ¸ĐŗĐŊаĐģ Đ´ĐģŅ Đ˛ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐ¸Ņ (ҁĐŧ. https://postgrespro.ru/docs/postgresql/12/runtime-config-wal#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY ), ĐžĐŊ ĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊĐž Đ´ĐžĐģĐļĐĩĐŊ ĐąŅ‹Ņ‚ŅŒ ŅĐžĐˇĐ´Đ°ĐŊ ĐžŅ‚ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ postgres
su - postgres -c 'touch /var/lib/postgresql/12/main/recovery.signal'
# СаĐŋ҃ҁĐēаĐĩĐŧ ĐąĐ°ĐˇŅƒ даĐŊĐŊҋ҅, Ņ‡Ņ‚ĐžĐąŅ‹ ĐžĐŊа иĐŊĐ¸Ņ†Đ¸Đ¸Ņ€ĐžĐ˛Đ°Đģа ĐŋŅ€ĐžŅ†Đĩҁҁ Đ˛ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐ¸Ņ
service postgresql start

āϝāĻžāϰāĻž āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ⧇āϰ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ, āĻŦā§āϝāĻžāĻļ āĻŽā§āϝāĻžāϜāĻŋāϕ⧇āϰ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻ…āĻ‚āĻļ āύ⧀āĻšā§‡ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϝāĻžāϤ⧇ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ⧇, āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϟāĻŋ āĻāĻ•āϟāĻŋ āύāύ-āϜāĻŋāϰ⧋ āĻāĻ•ā§āϏāĻŋāϟ āϕ⧋āĻĄ āϏāĻš āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻšāĻŦ⧇āĨ¤ āĻāχ āωāĻĻāĻžāĻšāϰāϪ⧇, āϏāĻŋāĻ—āĻ¨ā§āϝāĻžāϞ āĻĢāĻžāχāϞāϟāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāϤ⧇ 120 āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āϟāĻžāχāĻŽāφāωāϟ (āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻŽā§‹āϟ 5 āĻŽāĻŋāύāĻŋāϟ) 10āϟāĻŋ āĻšā§‡āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ (āĻāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āϏāĻĢāϞ āĻšāϝāĻŧ⧇āϛ⧇):

#!/bin/bash

CHECK_RECOVERY_SIGNAL_ITER=0
while [ ${CHECK_RECOVERY_SIGNAL_ITER} -le 120 ]
do
    if [ ! -f "/var/lib/postgresql/12/main/recovery.signal" ]
    then
        echo "recovery.signal removed"
        break
    fi
    sleep 5
    ((CHECK_RECOVERY_SIGNAL_ITER+1))
done

# ĐĩҁĐģи ĐŋĐžŅĐģĐĩ Đ˛ŅĐĩŅ… ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐžĐē Ņ„Đ°ĐšĐģ Đ˛ŅŅ‘ Ņ€Đ°Đ˛ĐŊĐž ŅŅƒŅ‰ĐĩŅŅ‚Đ˛ŅƒĐĩŅ‚, Ņ‚Đž ĐŋадаĐĩĐŧ ҁ ĐžŅˆĐ¸ĐąĐēОК
if [ -f "/var/lib/postgresql/12/main/recovery.signal" ]
then
    echo "recovery.signal still exists!"
    exit 17
fi

āϏāĻĢāϞ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ⧇āϰ āĻĒāϰ⧇, āϏāĻŽāĻ¸ā§āϤ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āφāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇ āϭ⧁āϞāĻŦ⧇āύ āύāĻž (pgbouncer/monit, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ)āĨ¤

āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ⧇āϰ āĻĒāϰ⧇ āĻĄā§‡āϟāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻĒ⧁āύāσāĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āĻĒāϰ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻ…āĻ–āĻŖā§āĻĄāϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻ…āĻĒāϰāĻŋāĻšāĻžāĻ°ā§āϝ, āϝāĻžāϤ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻžāĻ™ā§āĻ—āĻž/āϕ⧁āϟāĻŋāϞ āĻŦā§āϝāĻžāĻ•āφāĻĒ āϏāĻš āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āϤ⧈āϰāĻŋ āύāĻž āĻšāϝāĻŧāĨ¤ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖāĻžāĻ—āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻāϟāĻŋ āĻ•āϰāĻž āφāϰāĻ“ āĻ­āĻžāϞ, āϤāĻŦ⧇ āϕ⧋āĻĨāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϕ⧀āĻ­āĻžāĻŦ⧇ āϤāĻž āϕ⧇āĻŦāϞāĻŽāĻžāĻ¤ā§āϰ āφāĻĒāύāĻžāϰ āĻ•āĻ˛ā§āĻĒāύāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ (āφāĻĒāύāĻŋ āĻĒā§āϰāϤāĻŋ āϘāĻ¨ā§āϟāĻžāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āĻĒ⧃āĻĨāĻ• āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦāĻžāĻĄāĻŧāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻŦāĻž CI-āϤ⧇ āĻāĻ•āϟāĻŋ āĻšā§‡āĻ• āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύ)āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ¨ā§āϝ⧂āύāϤāĻŽāĻ­āĻžāĻŦ⧇, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻĄā§‡āϟāĻž āĻāĻŦāĻ‚ āϏ⧂āϚāĻ•āϗ⧁āϞāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤

āĻĄā§‡āϟāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĄāĻžāĻŽā§āĻĒ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϚāĻžāϞāĻžāύ⧋ āϝāĻĨ⧇āĻˇā§āϟ, āϤāĻŦ⧇ āĻāϟāĻŋ āφāϰāĻ“ āĻ­āĻžāϞ āϝ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āφāĻĒāύāĻŋ āĻšā§‡āĻ•āϏāĻžāĻŽāϗ⧁āϞāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧇āϛ⧇āύ (āĻĄā§‡āϟāĻž āĻšā§‡āĻ•āϏāĻžāĻŽ):

#!/bin/bash

if ! su - postgres -c 'pg_dumpall > /dev/null'
then
    echo 'pg_dumpall failed'
    exit 125
fi

āϏ⧂āĻšā§€ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ - āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ amcheck āĻŽāĻĄāĻŋāωāϞ, āĻāϰ āϜāĻ¨ā§āϝ āĻāϏāĻ•āĻŋāωāĻāϞ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āύ⧇āĻ“āϝāĻŧāĻž āϝāĻžāĻ• WAL-G āĻĒāϰ⧀āĻ•ā§āώāĻž āĻāĻŦāĻ‚ āĻāϟāĻŋāϰ āϚāĻžāϰāĻĒāĻžāĻļ⧇ āĻāĻ•āϟ⧁ āϝ⧁āĻ•ā§āϤāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ:

#!/bin/bash

# дОйавĐģŅĐĩĐŧ sql-СаĐŋŅ€ĐžŅ Đ´ĐģŅ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи в Ņ„Đ°ĐšĐģ вО Đ˛Ņ€ĐĩĐŧĐĩĐŊĐŊОК Đ´Đ¸Ņ€ĐĩĐēŅ‚ĐžŅ€Đ¸Đ¸
cat > /tmp/amcheck.sql << EOF
CREATE EXTENSION IF NOT EXISTS amcheck;
SELECT bt_index_check(c.oid), c.relname, c.relpages
FROM pg_index i
JOIN pg_opclass op ON i.indclass[0] = op.oid
JOIN pg_am am ON op.opcmethod = am.oid
JOIN pg_class c ON i.indexrelid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE am.amname = 'btree'
AND c.relpersistence != 't'
AND i.indisready AND i.indisvalid;
EOF
chown postgres: /tmp/amcheck.sql

# дОйавĐģŅĐĩĐŧ ҁĐēŅ€Đ¸ĐŋŅ‚ Đ´ĐģŅ СаĐŋ҃ҁĐēа ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐžĐē Đ˛ŅĐĩŅ… Đ´ĐžŅŅ‚ŅƒĐŋĐŊҋ҅ йаС в ĐēĐģĐ°ŅŅ‚ĐĩŅ€Đĩ
# (ĐžĐąŅ€Đ°Ņ‚Đ¸Ņ‚Đĩ вĐŊиĐŧаĐŊиĐĩ Ņ‡Ņ‚Đž ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Đĩ и СаĐŋ҃ҁĐē ĐēĐžĐŧаĐŊĐ´ – ŅĐēŅ€Đ°ĐŊĐ¸Ņ€ĐžĐ˛Đ°ĐŊŅ‹)
cat > /tmp/run_amcheck.sh << EOF
for DBNAME in $(su - postgres -c 'psql -q -A -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" ')
do
    echo "Database: ${DBNAME}"
    su - postgres -c "psql -f /tmp/amcheck.sql -v 'ON_ERROR_STOP=1' ${DBNAME}" && EXIT_STATUS=$? || EXIT_STATUS=$?
    if [ "${EXIT_STATUS}" -ne 0 ]
    then
        echo "amcheck failed on DB: ${DBNAME}"
        exit 125
    fi
done
EOF
chmod +x /tmp/run_amcheck.sh

# СаĐŋ҃ҁĐēаĐĩĐŧ ҁĐēŅ€Đ¸ĐŋŅ‚
/tmp/run_amcheck.sh > /tmp/amcheck.log

# Đ´ĐģŅ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи Ņ‡Ņ‚Đž Đ˛ŅŅ‘ ĐŋŅ€ĐžŅˆĐģĐž ҃ҁĐŋĐĩ҈ĐŊĐž ĐŧĐžĐļĐŊĐž ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ exit code иĐģи grep’ĐŊŅƒŅ‚ŅŒ ĐžŅˆĐ¸ĐąĐē҃
if grep 'amcheck failed' "/tmp/amcheck.log"
then
    echo 'amcheck failed: '
    cat /tmp/amcheck.log
    exit 125
fi

āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤāϏāĻžāϰ

āφāĻŽāĻŋ āφāĻ¨ā§āĻĻā§āϰ⧇ āĻŦā§‹āϰ⧋āĻĄāĻŋāύ⧇āϰ āĻ•āĻžāϛ⧇ āĻ•ā§ƒāϤāĻœā§āĻžāϤāĻž āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āϚāĻžāχ āĻĒā§āϰāĻ•āĻžāĻļāύāĻžāϟāĻŋ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϤāĻžāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻŦāĻ‚ WAL-G āĻāϰ āωāĻ¨ā§āύāϝāĻŧāύ⧇ āϤāĻžāϰ āĻ…āĻŦāĻĻāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻļ⧇āώ āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ!

āĻāϟāĻŋ āĻāχ āύ⧋āϟāϟāĻŋ āĻļ⧇āώ āĻ•āϰ⧇āĨ¤ āφāĻŽāĻŋ āφāĻļāĻž āĻ•āϰāĻŋ āϝ⧇ āφāĻŽāĻŋ āϏ⧇āϟāφāĻĒ⧇āϰ āϏāĻšāϜāϤāĻž āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϤ⧇ āĻāχ āϏāϰāĻžā§āϜāĻžāĻŽāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻŦāĻŋāĻļāĻžāϞ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āϜāĻžāύāĻžāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ⧇āĻ›āĻŋāĨ¤ āφāĻŽāĻŋ WAL-G āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ…āύ⧇āĻ• āĻ•āĻŋāϛ⧁ āĻļ⧁āύ⧇āĻ›āĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāϏ⧇ āĻŦāϏ⧇ āĻāϟāĻŋ āĻŦ⧇āϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒāĻ°ā§āϝāĻžāĻĒā§āϤ āϏāĻŽāϝāĻŧ āĻĒāĻžāχāύāĻŋāĨ¤ āĻāĻŦāĻ‚ āφāĻŽāĻŋ āĻŦāĻžāĻĄāĻŧāĻŋāϤ⧇ āĻāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āφāĻŽāĻžāϰ āĻĨ⧇āϕ⧇ āĻŦ⧇āϰāĻŋāϝāĻŧ⧇ āĻāϏ⧇āϛ⧇āĨ¤

āφāϞāĻžāĻĻāĻžāĻ­āĻžāĻŦ⧇, āĻāϟāĻŋ āϞāĻ•ā§āώāĻŖā§€āϝāĻŧ āϝ⧇ WAL-G āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ DBMS āĻāϰ āϏāĻžāĻĨ⧇āĻ“ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇:

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster