āĻāĻāĻŋ āĻĻā§āϰā§āĻāĻĻāĻŋāύ āϧāϰā§āĻ āĻāĻžāύāĻž āĻā§āĻā§ āϝ⧠āĻāϏāĻāĻŋāĻāĻāϞ āĻĄāĻžāĻŽā§āĻĒāĻā§āϞāĻŋāϤ⧠āĻŦā§āϝāĻžāĻāĻāĻĒ āϤā§āϰāĻŋ āĻāϰāĻž (āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠pg_dump āĻŦāĻž pg_dumpall) āĻāĻāĻāĻŋ āĻāĻžāϞ āϧāĻžāϰāĻŖāĻž āύāϝāĻŧāĨ¤ PostgreSQL DBMS āĻŦā§āϝāĻžāĻāĻāĻĒ āĻāϰāϤā§, āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻžāϞ pg_basebackup, āϝāĻž WAL āϞāĻā§āϰ āĻāĻāĻāĻŋ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻāĻĒāĻŋ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ āĻāĻŋāύā§āϤ⧠āϝāĻāύ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻ āύā§āϞāĻŋāĻĒāĻŋ āϤā§āϰāĻŋ āĻāĻŦāĻ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻžāϰ āĻĒā§āϰ⧠āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻāĻŋ āĻ āϧā§āϝāϝāĻŧāύ āĻāϰāĻž āĻļā§āϰ⧠āĻāϰāĻŦā§āύ, āϤāĻāύ āĻāĻĒāύāĻŋ āĻŦā§āĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āϝ⧠āĻāĻāĻŋ āϏāĻŽāϏā§āϤ āĻāĻžāĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āĻāĻŽāĻĒāĻā§āώ⧠āĻāϝāĻŧā§āĻāĻāĻŋ āĻā§āϰāĻžāĻāϏāĻžāĻāĻā§āϞ āϞāĻŋāĻāϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻāĻĒāϰ⧠āĻāĻŦāĻ āύā§āĻā§ āĻāĻāϝāĻŧāĻ āĻŦā§āϝāĻĨāĻž āϏā§āώā§āĻāĻŋ āĻāϰāĻŦā§ āύāĻžāĨ¤ āĻĻā§āϰā§āĻā§āĻ āĻāĻŽāĻžāύā§āϰ āĻāύā§āϝ, WAL-G āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞāĨ¤
PostgreSQL āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻžāĻ āĻāĻĒ āĻāĻŦāĻ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ Go-āϤ⧠āϞā§āĻāĻž āĻāĻāĻāĻŋ āĻā§āϞ (āĻāĻŦāĻ āĻ āϤāĻŋ āϏāĻŽā§āĻĒā§āϰāϤāĻŋ MySQL/MariaDB, MongoDB āĻāĻŦāĻ FoundationDB) āĻāĻāĻŋ āĻ ā§āϝāĻžāĻŽāĻžāĻāύ S3 āϏā§āĻā§āϰā§āĻ (āĻāĻŦāĻ āĻ ā§āϝāĻžāύāĻžāϞāĻāĻā§āϞāĻŋ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāϝāĻŧāĻžāύāĻĄā§āĻā§āϏ āĻ āĻŦāĻā§āĻā§āĻ āϏā§āĻā§āϰā§āĻ), āϏā§āĻāϏāĻžāĻĨā§ āĻā§āĻāϞ āĻā§āϞāĻžāĻāĻĄ āϏā§āĻā§āϰā§āĻ, āĻ ā§āϝāĻžāĻā§āϰ āϏā§āĻā§āϰā§āĻ, āϏā§āĻāĻĢāĻ āĻ āĻŦāĻā§āĻā§āĻ āϏā§āĻā§āϰā§āĻ āĻāĻŦāĻ āϏāĻšāĻāĻāĻžāĻŦā§ āĻĢāĻžāĻāϞ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻž āϏāĻŽāϰā§āĻĨāύ āĻāϰā§āĨ¤ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āϏā§āĻāĻāĻĒāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϧāĻžāĻĒā§ āύā§āĻŽā§ āĻāϏā§, āĻāĻŋāύā§āϤ⧠āĻāĻ āĻŦāĻŋāώāϝāĻŧā§ āύāĻŋāĻŦāύā§āϧāĻā§āϞāĻŋ āĻāύā§āĻāĻžāϰāύā§āĻ āĻā§āĻĄāĻŧā§ āĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻāĻŋāĻāĻŋāϝāĻŧā§ āĻĨāĻžāĻāĻžāϰ āĻāĻžāϰāĻŖā§, āĻļā§āϰ⧠āĻĨā§āĻā§ āĻļā§āώ āĻĒāϰā§āϝāύā§āϤ āϏāĻŽāϏā§āϤ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋ āĻ āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāϰāĻžāϰ āĻāύā§āϝ āĻā§āύāĻ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻā§āĻāĻžāĻŦā§ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞ āύā§āĻ (āĻšāĻžāĻŦā§āϰā§āϤ⧠āĻŦā§āĻļ āĻāϝāĻŧā§āĻāĻāĻŋ āĻĒā§āϏā§āĻ āϰāϝāĻŧā§āĻā§, āĻāĻŋāύā§āϤ⧠āϏā§āĻāĻžāύ⧠āĻ āύā§āĻ āĻĒāϝāĻŧā§āύā§āĻ āĻŽāĻŋāϏ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§)āĨ¤

āĻāĻ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§ āĻāĻŽāĻžāϰ āĻā§āĻāĻžāύ āĻĒāĻĻā§āϧāϤāĻŋāĻāϤāĻāĻžāĻŦā§ āϞā§āĻāĻž āĻšāϝāĻŧā§āĻā§. āĻāĻŽāĻŋ āĻāĻāĻāύ DBA āύāĻ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻā§āĻĨāĻžāĻ āϏāĻžāϧāĻžāϰāĻŖ āĻŽāĻžāύā§āώā§āϰ āĻāĻžāώāĻžāϝāĻŧ āύāĻŋāĻā§āĻā§ āĻĒā§āϰāĻāĻžāĻļ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ, āϤāĻžāĻ āϝā§āĻā§āύ⧠āϏāĻāĻļā§āϧāύ āϏā§āĻŦāĻžāĻāϤ āĻāĻžāύāĻžāĻ!
āĻāĻŽāĻŋ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻāϞā§āϞā§āĻ āĻāϰāϤ⧠āĻāĻžāĻ āϝā§, āύā§āĻā§āϰ āϏāĻŦāĻāĻŋāĻā§āĻ āĻĒā§āϰāĻžāϏāĻā§āĻāĻŋāĻ āĻāĻŦāĻ PostgreSQL 12.3-āĻāϰ āĻāύā§āϝ āĻĒāϰā§āĻā§āώāĻŋāϤāĨ¤ Ubuntu ā§§ā§Ž.ā§Ļā§Ē, āϏāĻāϞ āĻāĻŽāĻžāύā§āĻĄ āĻ āĻŦāĻļā§āϝāĻ āĻāĻāĻāύ āĻŦāĻŋāĻļā§āώāĻžāϧāĻŋāĻāĻžāϰāĻĒā§āϰāĻžāĻĒā§āϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāϞāĻžāϤ⧠āĻšāĻŦā§āĨ¤
āĻŦāĻŋāύā§āϝāĻžāϏ
āĻāĻ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āϞā§āĻāĻžāϰ āϏāĻŽāϝāĻŧ, WAL-G āĻāϰ āϏā§āĻĨāĻŋāϤāĻŋāĻļā§āϞ āϏāĻāϏā§āĻāϰāĻŖ . āĻāĻāĻŋāĻ āĻāĻŽāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦ (āϤāĻŦā§ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŽāĻžāϏā§āĻāĻžāϰ āĻļāĻžāĻāĻž āĻĨā§āĻā§ āĻāĻāĻŋ āύāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻāĻžāύ āϤāĻŦā§ āĻāĻŋāĻĨā§āĻŦ āϏāĻāĻā§āϰāĻšāϏā§āĻĨāϞ⧠āĻāϰ āĻāύā§āϝ āϏāĻŽāϏā§āϤ āύāĻŋāϰā§āĻĻā§āĻļāĻžāĻŦāϞ⧠āϰāϝāĻŧā§āĻā§) āĻĄāĻžāĻāύāϞā§āĻĄ āĻāĻŦāĻ āĻāύāϏā§āĻāϞ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āϝāĻž āĻāϰāϤ⧠āĻšāĻŦā§:
#!/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 āϏāĻŽā§āĻŦāύā§āϧ⧠āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āϏāĻŽāϏā§āϤ āύāĻŋāĻŦāύā§āϧ āĻĒāϰāĻŋāĻŦā§āĻļ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻā§, āĻāĻŋāύā§āϤ⧠āĻāĻ āϰāĻŋāϞāĻŋāĻā§āϰ āϏāĻžāĻĨā§ āϏā§āĻāĻŋāĻāϏ āĻāĻāĻžāύ⧠āĻ āĻŦāϏā§āĻĨāĻŋāϤ āĻšāϤ⧠āĻĒāĻžāϰ⧠āĻĒā§āϏā§āĻāĻā§āϰā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻšā§āĻŽ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤā§āĨ¤ āĻāĻāĻŋ āϤā§āϰāĻŋ āĻāϰāϤā§, āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻŦā§āϝāĻžāĻļ āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻāĻŋ āĻāĻžāϞāĻžāύ:
#!/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 - āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻ āĻāϰāĻž, āĻāĻāĻāĻŋ āϏā§āĻĨāĻžāύā§āϝāĻŧ āĻŦā§āϝāĻžāĻāĻāĻĒ āϏāĻš āĻāĻ āĻāĻĻāĻžāĻšāϰāĻŖā§āϰ āĻŽāϤ⧠āĻāĻāĻāĻŋ āĻāĻāύāĻŋāĻā§āϏ-āϏāĻā§āĻā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻāĻŋ āĻāϰāĻž āĻāĻžāϞāĨ¤
āĻ āύā§āϝāĻžāύā§āϝ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ⧠āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāĻŦā§: .
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 āϞāĻ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻžāϰ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāĻŦā§ āϝāĻĻāĻŋ "āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻŦā§āϝāĻžāĻāĻāĻĒ" (āĻŦā§āϏ āĻŦā§āϝāĻžāĻāĻāĻĒ) āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āύāĻž āĻĨāĻžāĻā§āĨ¤
āĻāĻĒāύāĻŋ āĻ āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύā§āϰ āĻ āύā§āĻŦāĻžāĻĻā§ āĻāĻ āϏāĻŽāϏā§āϤ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰā§āύ: .
āĻāĻāĻāĻŋ āĻŦā§āϝāĻžāĻāĻāĻĒ āϏāĻŽāϝāĻŧāϏā§āĻā§ āϏā§āĻ āĻāĻĒ āĻāϰāĻž āĻšāĻā§āĻā§ā§ˇ
āϝ⧠āϝāĻžāĻ āĻŦāϞā§āĻ āύāĻž āĻā§āύ, āĻāĻāĻŋ āĻāĻžāϞāĻžāύā§āϰ āϏāĻŦāĻā§āϝāĻŧā§ āϏā§āĻŦāĻŋāϧāĻžāĻāύāĻ āĻāĻĒāĻžāϝāĻŧ āĻšāϞ āĻā§āϰā§āύāĨ¤ āĻāĻāĻŋāĻ āĻāĻŽāϰāĻž āĻŦā§āϝāĻžāĻāĻāĻĒ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻŦāĨ¤ āĻāĻāĻāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻŦā§āϝāĻžāĻāĻāĻĒ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻāĻŽāĻžāύā§āĻĄ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰāĻž āϝāĻžāĻ: 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
āϏā§āĻā§ āĻĒāϰā§āĻā§āώāĻž āĻāϰāϤ⧠- āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ , āĻāϰ āĻāύā§āϝ āĻāϏāĻāĻŋāĻāĻāϞ āĻā§āϝāĻŧā§āϰāĻŋ āύā§āĻāϝāĻŧāĻž āϝāĻžāĻ āĻāĻŦāĻ āĻāĻāĻŋāϰ āĻāĻžāϰāĻĒāĻžāĻļā§ āĻāĻāĻā§ āϝā§āĻā§āϤāĻŋ āϤā§āϰāĻŋ āĻāϰā§āύ:
#!/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
