āĻāĻāĻŋ āĻĻā§āĻ°ā§āĻāĻĻāĻŋāĻ¨ āĻ§āĻ°ā§āĻ āĻāĻžāĻ¨āĻž āĻā§āĻā§ āĻ¯ā§ āĻāĻ¸āĻāĻŋāĻāĻāĻ˛ āĻĄāĻžāĻŽā§āĻĒāĻā§āĻ˛āĻŋāĻ¤ā§ āĻŦā§āĻ¯āĻžāĻāĻāĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž (āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ pg_dump āĻŦāĻž pg_dumpall) āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻ§āĻžāĻ°āĻŖāĻž āĻ¨āĻ¯āĻŧāĨ¤ PostgreSQL DBMS āĻŦā§āĻ¯āĻžāĻāĻāĻĒ āĻāĻ°āĻ¤ā§, āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻāĻžāĻ˛ pg_basebackup, āĻ¯āĻž WAL āĻ˛āĻā§āĻ° āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻāĻĒāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻŦāĻ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒā§āĻ°ā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻ āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻāĻ°āĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŦā§āĻ¨, āĻ¤āĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻŦā§āĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¯ā§ āĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻŽāĻĒāĻā§āĻˇā§ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻā§āĻ°āĻžāĻāĻ¸āĻžāĻāĻā§āĻ˛ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻĒāĻ°ā§ āĻāĻŦāĻ āĻ¨ā§āĻā§ āĻāĻāĻ¯āĻŧāĻ āĻŦā§āĻ¯āĻĨāĻž āĻ¸ā§āĻˇā§āĻāĻŋ āĻāĻ°āĻŦā§ āĻ¨āĻžāĨ¤ āĻĻā§āĻ°ā§āĻā§āĻ āĻāĻŽāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, WAL-G āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§ āĻāĻŽāĻžāĻ° āĻā§āĻāĻžāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§ āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧā§āĻā§. āĻāĻŽāĻŋ āĻāĻāĻāĻ¨ DBA āĻ¨āĻ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻā§āĻĨāĻžāĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŽāĻžāĻ¨ā§āĻˇā§āĻ° āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻ¨āĻŋāĻā§āĻā§ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ, āĻ¤āĻžāĻ āĻ¯ā§āĻā§āĻ¨ā§ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻ¸ā§āĻŦāĻžāĻāĻ¤ āĻāĻžāĻ¨āĻžāĻ!
āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§, āĻāĻŽāĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻŋ āĻ¯ā§ āĻ¨ā§āĻā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŋāĻā§ āĻĒā§āĻ°āĻžāĻ¸āĻā§āĻāĻŋāĻ āĻāĻŦāĻ āĻāĻŦā§āĻ¨ā§āĻā§ 12.3 āĻ PostgreSQL 18.04 āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤
āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, 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 āĻāĻ° āĻ¸āĻžāĻĨā§āĻ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§:
āĻŽāĻžāĻāĻāĻ¸āĻāĻŋāĻāĻāĻ˛ / MariaDB ;MongoDB ;āĻĢāĻžāĻāĻ¨ā§āĻĄā§āĻļāĻ¨āĻĄāĻŋāĻŦāĻŋ ;- āĻāĻŦāĻ āĻāĻŽāĻŋāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻŋāĻāĻžāĻ°, āĻāĻ°ā§ āĻŦā§āĻļ āĻāĻŋāĻā§ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤!
āĻāĻ¤ā§āĻ¸: www.habr.com