แแแแ แฎแแแแ แชแแแแแแแ, แ แแ แกแแ แแแแ แแ แแกแแแแแก แจแแฅแแแ SQL dump-แจแ (แแแแแงแแแแแแ pg_dump แแ pg_dumpall) แแ แแ แแก แแแ แแ แแแแ. PostgreSQL DBMS-แแก แกแแ แแแแ แแ แแกแแแกแแแแก แฃแแฏแแแแกแแ แแแแแแงแแแแ แแ แซแแแแแ pg_basebackup, แ แแแแแแช แฅแแแแก WAL แแฃแ แแแแแแแก แแ แแแแ แแกแแก. แแแแ แแ แ แแแแกแแช แแแแฌแงแแแ แแกแแแก แจแแฅแแแแกแ แแ แแฆแแแแแแก แแแแแ แแ แแชแแกแแก แจแแกแฌแแแแแก, แแแฎแแแแแแ, แ แแ แแ แแแฅแแแแแแแกแแแแก แกแแญแแ แแ แแแฌแแ แแ แแแแแแฃแ แ แแแแแแแแ แขแ แแชแแแแ แแ แแ แจแแแแฌแฃแฎแแ แขแแแแแแ แ แแแแ แช แแแแแ, แแกแแแ แฅแแแแแ. แขแแแฏแแแก แจแแกแแแกแฃแแฃแฅแแแแแ แจแแแฅแแแ WAL-G.
แแก แกแขแแขแแ แแแแฌแแ แ แซแแ แแแแแแ แฉแแแ แชแแแแแก แกแแกแขแแแแขแแแแชแแแกแแแแก. แแ แแ แแแ DBA แแ แจแแแแซแแแ แกแแแฆแแช แแแแแแฎแแขแ แกแแแฃแแแ แ แแแแ แฎแแแฎแฃแ แแแแแ, แแแแขแแ แแแแแกแแแแ แ แจแแกแฌแแ แแแ แแแกแแกแแแแแแแแแ!
แชแแแแ, แแ แแฆแแแแจแแแ, แ แแ แงแแแแแคแแ แ แฅแแแแแ แแ แแก แจแแกแแแแแแกแ แแ แขแแกแขแแ แแแ PostgreSQL 12.3-แแกแแแแก Ubuntu 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 bucket" แแ แฌแแแแแแก แแแกแแฆแแแแแ.
แงแแแแ แฌแแแ แกแขแแขแแ 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 แแแแแฃแแแกแแแ, แกแแแแช แกแแ แแแแ แแ แแกแแแแ แแแขแแแ แแแแ (แจแแแแซแแแแ แแ root-แจแ แแ แกแแฅแแฆแแแแแจแ);
- AWS_ACCESS_KEY_ID - แฌแแแแแแก แแแกแแฆแแแ S3-แจแ (แกแแขแแกแขแ แกแแ แแแ แแ แแฆแแแแแแก แจแแแแฎแแแแแจแ, แแ แแแแแแจแแแก แฃแแแ แฐแฅแแแแแก แแฎแแแแ แฌแแแแแฎแแแก แแแแแขแแแ! แแก แฃแคแ แ แแแขแแแฃแ แแ แแ แแก แแฆแฌแแ แแแ แแฆแแแแแแก แแแแงแแคแแแแแแจแ.);
- AWS_SECRET_ACCESS_KEY โ แกแแแแฃแแแ แแแกแแฆแแแ S3 แกแแชแแแจแ;
- WALG_COMPRESSION_METHOD โ แจแแแฃแแจแแแก แแแแแแ, แฃแแฏแแแแกแแ แแแแแแงแแแแ แแ แแขแแ (แ แแแแแ แแก แแ แแก แแฅแ แแก แจแฃแแแแแ แกแแแแแแ แแแแแกแ แแ แจแแแฃแแจแแแก/แแแแแแแ แแกแแแก แกแแฉแฅแแ แแก แจแแ แแก);
- WALG_DELTA_MAX_STEPS โ โแแแแขแแกโ แ แแแแแแแแ แกแ แฃแแ แกแแ แแแแ แแ แแกแแแก แจแแฅแแแแแแ (แแกแแแ แแแแแแแแแ แแ แแก แแ แแแแแแฌแแ แแแ แแแแแชแแแแแแก แแแแแก, แแแแ แแ แจแแฃแซแแแแ แแแแแ แจแแแแแแแ แแฆแแแแแแก แแ แแชแแกแ, แแแแขแแ แแ แแ แแก แแแแแแจแแฌแแแแแ แแแแ แแแแจแแแแแแแแแแก แแแแแงแแแแแ);
- PGDATA โ แแแแแแ แแแ แแฅแขแแ แแแจแ แแฅแแแแ แแแแแชแแแแ แแแแแก แแแแแชแแแแแแ (แแแแก แแแ แแแแแ แจแแแแซแแแแ แแ แซแแแแแแก แแแจแแแแแ pg_lsclusters);
- PGHOST โ แแแแแชแแแแ แแแแแกแแแ แแแแแแจแแ แแแ, แแแแแแฃแ แ แกแแ แแแแ แแ แกแแจแฃแแแแแแ แฃแแฏแแแแกแแ แแแแก แแแแแแแแ unix-แกแแแแขแแก แแแจแแแแแแ, แ แแแแ แช แแ แแแแแแแแจแ.
แกแฎแแ แแแ แแแแขแ แแแ แจแแแแซแแแแ แแฎแแแแ แแแแฃแแแแขแแชแแแจแ:
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_level โ แ แแแแแแ แแแคแแ แแแชแแ แฃแแแ แฉแแฌแแ แแ WAL-แแก แแฃแ แแแแแแจแ, โแ แแแแแแโ โ แฉแแฌแแ แแ แงแแแแแคแแ แ;
- แแ แฅแแแแก_แ แแแแแ - แฉแแ แแแ WAL แแฃแ แแแแแแแก แฉแแแแขแแแ แแแ แแแ แแแแขแ แแก แแ แซแแแแแแก แแแแแงแแแแแแ แแ แฅแแแ_แแ แซแแแแแ;
- แแ แฅแแแ_แแ แซแแแแแ โ แแแกแ แฃแแแแฃแแ WAL แแฃแ แแแแแก แแ แฅแแแแก แแ แซแแแแแ;
- archive_timeout - แแฃแ แแแแแแแก แแแแ แฅแแแแแ แฎแแ แชแแแแแแแ แแฎแแแแ แแแกแ แฃแแแแแก แจแแแแแ, แแแแ แแ แแฃ แแฅแแแแ แกแแ แแแ แ แชแแแแก/แแแแแแขแแแก แแชแแ แ แแแแแชแแแแแก แแแแแชแแแแ แแแแแจแ, แแแจแแ แแแ แ แแฅแแก แแฅ แแแแแขแแก แแแฌแแกแแแแก แฌแแแแแจแ, แ แแก แจแแแแแแแช แแซแฃแแแแแ แแแแแแซแแฎแแแ แแแแ แฅแแแแแแก แแ แซแแแแแ (แงแแแแ แฌแแแก แแแขแแแกแแฃแ แแ แแฌแแ แแแแแชแแแแ แแแแแจแ, แแแแขแแ แแแแแแฌแงแแแขแ แแ แแแแแงแแแแแแแ แแก แแแ แแแแขแ แ แฌแแ แแแแแแจแ);
- restore_command โ แกแแ แแแแ แแ แแกแแแแแ WAL แแฃแ แแแแแก แแฆแแแแแแก แแ แซแแแแแ แแแแแงแแแแแฃแแ แแฅแแแแ แแ แจแแแแฎแแแแแจแ, แแฃ โแกแ แฃแแ แกแแ แแแแ แแ แแกแแโ (แแแแแก แกแแ แแแแ แแ แแกแแก) แแแแแ แแแแแชแแแแ แแแแแจแ แฃแแฎแแแกแ แชแแแแแแแแแ.
แงแแแแ แแ แแแ แแแแขแ แแก แจแแกแแฎแแ แแแขแ แจแแแแซแแแแ แฌแแแแแแฎแแ แแคแแชแแแแฃแ แ แแแแฃแแแแขแแชแแแก แแแ แแแแแจแ:
แกแแ แแแแ แแ แแแแ แแแแก แแแงแแแแแ
แ แแช แแ แฃแแแ แแฅแแแก, แแแกแ แแแจแแแแแก แงแแแแแแ แแแกแแฎแแ แฎแแแแแ แแแแ cron. แแก แแ แแก แแก, แ แแกแแช แฉแแแ แแแแแแแแคแแแฃแ แแ แแแ แกแแ แแแแ แแ แแกแแแแแก แจแแกแแฅแแแแแแ. แแแแแฌแงแแ แกแ แฃแแ แกแแ แแแแ แแ แแกแแแก แจแแฅแแแแก แแ แซแแแแแแ: wal-g-แจแ แแก แแ แแก แแแจแแแแแก แแ แแฃแแแแขแ แกแแ แแแแ แแ-แแแซแแ. แแแแ แแ แแแ แแแ แ แแแจแ, แฃแแฏแแแแกแแ แแก แแ แซแแแแแ แฎแแแแ แแแฃแจแแแ postgres-แแก แแแแฎแแแ แแแแแกแแแ, แ แแแ แแแ แฌแแฃแแแแ, แ แแ แงแแแแแคแแ แ แแแ แแแ แแ แแก (แแ แแ แแ แแก แฌแแแแแแก แจแแชแแแแแแ):
#!/bin/bash
su - postgres -c '/usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main'
แแแจแแแแแก แแ แแฃแแแแขแแแ แแแฃแแแแแแก แแแแแชแแแแ แแแ แแฅแขแแ แแแจแ แแแแแแแ แแแแแ - แจแแแแฎแกแแแแแ, แ แแ แแแแก แแแ แแแแแ แจแแแแซแแแแ แแแจแแแแแ pg_lsclusters.
แแฃ แงแแแแแคแแ แ แจแแชแแแแแก แแแ แแจแ แฉแแแแ แ แแ แแแแแชแแแแแ แฉแแแขแแแ แแ S3 แกแแชแแแจแ, แแแจแแ แจแแแแซแแแแ แแแแแแแคแแแฃแ แแ แแ แแแ แแแแฃแแ แแแจแแแแ crontab-แจแ:
#!/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 แกแแแแแ.
แซแแแแ แกแแ แแแแ แแ แแกแแแแแก แฌแแจแแ
แกแแแแ แแฃแแแ, แแฅแแแ แแ แแญแแ แแแแแ แแแแแแแฃแ แ แแแแฅแแก แแแกแแแฃแขแฃแ แแ แงแแแแ แกแแ แแแแ แแ แแกแแแก แจแแแแฎแแ, แแแแขแแ แกแแกแแ แแแแแ แแฅแแแแ แแฅแแแแ แแแฎแกแแแ แแแแก แแแ แแแแฃแแแ โแแแกแฃแคแแแแแแโ (แ แแแแ แช โแกแ แฃแแ แกแแ แแแแ แแ แแกแแแแโ โโแแกแแแ WAL แแฃแ แแแแแแ). แฉแแแ แแแแก แแแแแแแแแแ แแ แแแแก แแแแชแแแแก แแแจแแแแแแ:
#!/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
Cron แจแแแกแ แฃแแแแก แแ แแแแชแแแแก แงแแแแแแฆแ แแแแแก 6:30 แกแแแแแ, แฌแแจแแแก แงแแแแแคแแ แก (แกแ แฃแ แกแแ แแแแ แแ แแกแแแแก, แแแแขแแก แแ WAL-แแแก) แแแแ 10 แแฆแแก แแกแแแแแก แแแ แแ, แแแแ แแ แแแขแแแแแก แแแแแแฃแ แแ แ แกแแ แแแแ แแ แแกแแก. แแแ แแแแแแแแฃแแ แแแ แแฆแ แแกแ, แ แแ แแแแแกแแแแ แ แฌแแ แขแแแ แจแแแแแ แแแ แแฆแแแ แฉแแ แแฃแแ แแงแ PITR-แจแ.
แแฆแแแแแ แกแแ แแแแ แแแแแ
แกแแแแฃแแแ แแ แแ แแก, แ แแ แฏแแแกแแฆแ แแแแแชแแแแ แแแแแก แแแกแแฆแแแ แแ แแก แแแ แแแแฃแแ แแฆแแแแแ แแ แจแแแ แแแแแชแแแแแแก แแแแแแแแแแก แจแแแแฌแแแแ. แแ แแแขแงแแแ, แแฃ แ แแแแ แฃแแแ แแฆแแแแก WAL-G-แแก แแแแแงแแแแแแ แแ แแแแงแแคแแแแแแจแ, แฎแแแ แฉแแแแแแ แแแแแแแแแแแ แแแกแแฃแแ แแแ.
แชแแแแ แฃแแแ แแฆแแแแจแแแก แ แแ แกแแขแแกแขแ แแแ แแแแจแ แแฆแกแแแแแแแ (แงแแแแแคแแ แ, แ แแช แแ แแ แแก แฌแแ แแแแแฃแแ) แแฅแแแ แฃแแแ แแแแแแงแแแแ Read Only แแแแแ แแจแ S3-แจแ, แ แแแ แจแแแแฎแแแแแ แแ แแแฎแแแก แกแแ แแแแ แแ แแกแแแแแก แแแแแฌแแ แ. WAL-G-แแก แจแแแแฎแแแแแจแ, แแฅแแแ แฃแแแ แแแแงแแแแ แจแแแแแแ แฃแคแแแแแแ S3 แแแแฎแแแ แแแแแกแแแแก แฏแแฃแคแฃแ แแแแแขแแแแจแ (แแคแแฅแขแ: แแแแ): s3: GetObject, s3:ListBucket, s3: GetBucketLocation. แแ, แ แ แแฅแแ แฃแแแ, แแ แแแแแแแฌแงแแแ แแแงแแแแแ archive_mode=แแแแแ แแฃแแแ แแแ แแแแขแ แแแแก แคแแแแจแ 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-แแแ:
MySQL / MariaDB ;MongoDB ;FoundationDB ;- แแ แแฃ แแแแกแฏแแแแแ แแแแแแแฃแแแแแแแก แแแฎแแแแแ, แแแแแ แ แแแแแแแแแ แแแกแแแแแแแแ!
แฌแงแแ แ: www.habr.com