SQL เดกเดเดชเตเดเดณเดฟเดฒเตเดเตเดเต เดฌเดพเดเตเดเดชเตเดชเตเดเตพ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเต เดตเดณเดฐเตเดเตเดเดพเดฒเดฎเดพเดฏเดฟ เด เดฑเดฟเดฏเดชเตเดชเตเดเตเดจเตเดจเต (เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเต 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 - เดเดธเต 3 เดฒเต เดเดเตเดธเดธเต เดเต (เดเดฐเต เดเตเดธเตเดฑเตเดฑเต เดธเตเตผเดตเดฑเดฟเตฝ เดตเตเดฃเตเดเตเดเตเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เด เดเตเดเตพเดเตเดเต เดฑเตเดกเต เดเตบเดฒเดฟ เดชเตเดณเดฟเดธเดฟ เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเดฃเด! เดตเตเดฃเตเดเตเดเตเดเตเดเตฝ เดเดจเตเดจ เดตเดฟเดญเดพเดเดคเตเดคเดฟเตฝ เดเดคเต เดเตเดเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.);
- 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 เดฒเตเดเต เดเตผเดเตเดเตเดตเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฎเดพเตปเดกเต;
- เดเตผเดเตเดเตเดตเต_เดเตเดเดเดเตเดเต - เดฒเตเดเตเดเดณเตเดเต เดเตผเดเตเดเตเดตเดฟเดเดเต เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเตเดฎเตเดชเตเตพ เดฎเดพเดคเตเดฐเดฎเต เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดเดฏเตเดณเตเดณเต, เดเดจเตเดจเดพเตฝ เดจเดฟเดเตเดเดณเตเดเต เดธเตเตผเดตเตผ เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเตเดเตเดเต เดเตเดฑเดเตเดเต เดกเดพเดฑเตเดฑ เดฎเดพเดฑเตเดฑเตเดเดฏเต เดเตเตผเดเตเดเตเดเดฏเต เดเตเดฏเตเดฏเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดจเดฟเดฎเดฟเดทเดเตเดเตพเดเตเดเตเดณเตเดณเดฟเตฝ เดเดตเดฟเดเต เดเดฐเต เดชเดฐเดฟเดงเดฟ เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เด เตผเดคเตเดฅเดฎเดพเดเตเดเตเดจเตเดจเต, เด เดคเดฟเดจเตเดถเตเดทเด เดเตผเดเตเดเตเดตเดฟเดเดเต เดเดฎเดพเตปเดกเต เดจเดฟเตผเดฌเดจเตเดงเดฟเดคเดฎเดพเดฏเดฟ เดตเดฟเดณเดฟเดเตเดเดชเตเดชเตเดเตเด (เดเดฐเต เดธเตเดเตเดเตปเดกเดฟเดฒเตเด เดเดพเตป เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเตเดเตเดเต เดคเตเดตเตเดฐเดฎเดพเดฏเดฟ เดเดดเตเดคเตเดจเตเดจเต, เด เดคเดฟเดจเดพเตฝ เด เดชเดฐเดพเดฎเตเดฑเตเดฑเตผ เดเตฝเดชเตเดชเดพเดฆเดจเดคเตเดคเดฟเตฝ เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดฃเตเดเดคเดฟเดฒเตเดฒเตเดจเตเดจเต เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต);
- เดฑเดฟเดธเตเดฑเตเดฑเตเตผ_เดเดฎเดพเตปเดกเต - "เดชเตเตผเดฃเตเดฃ เดฌเดพเดเตเดเดชเตเดชเต" (เดฌเตเดธเต เดฌเดพเดเตเดเดชเตเดชเต) เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเต เดเดฑเตเดฑเดตเตเด เดชเตเดคเดฟเดฏ เดฎเดพเดฑเตเดฑเดเตเดเตพ เดเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดฐเต เดฌเดพเดเตเดเดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต WAL เดฒเตเดเต เดชเตเดจเดเดธเตเดฅเดพเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฎเดพเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเตเด.
เดเดฆเตเดฏเตเดเดฟเด เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเดจเตเดฑเต เดตเดฟเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เด เดเดฒเตเดฒเดพ เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเดณเตเดฏเตเด เดเตเดฑเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เดเตเดเตเดคเตฝ เดตเดพเดฏเดฟเดเตเดเดพเด:
เดเดฐเต เดฌเดพเดเตเดเดชเตเดชเต เดทเตเดกเตเดฏเตเตพ เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต
เดเดฐเดพเตพ เดเดจเตเดคเต เดชเดฑเดเตเดเดพเดฒเตเด, เด เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเดพเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด เดธเตเดเดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เดฎเดพเตผเดเด เดเตเดฐเตเตบ เดเดฃเต. เดฌเดพเดเตเดเดชเตเดชเตเดเตพ เดธเตเดทเตโเดเดฟเดเตเดเดพเตป เดเดเตเดเตพ เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดเดคเดพเดฃเต. เดเดฐเต เดชเตเตผเดฃเตเดฃ เดฌเดพเดเตเดเดชเตเดชเต เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฎเดพเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฎเตเดเตเดเต เดเดฐเดเดญเดฟเดเตเดเดพเด: wal-g-เตฝ เดเดคเดพเดฃเต เดฒเตเดเตเดเต เดเตผเดเตเดฏเตเดฎเตเดจเตเดฑเต เดฌเดพเดเตเดเดชเตเดชเต-เดชเตเดทเต. เดเดจเตเดจเดพเตฝ เดเดฆเตเดฏเด, เดเดฒเตเดฒเดพเด เดถเดฐเดฟเดฏเดพเดฃเตเดจเตเดจเต เดเดฑเดชเตเดชเดพเดเตเดเดพเตป เดชเตเดธเตเดฑเตเดฑเตเดเตเดฐเตเดธเต เดเดชเดฏเตเดเตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เด เดเดฎเดพเตปเดกเต เดธเตเดตเดฎเตเดงเดฏเดพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต (เดเตเดเดพเดคเต เดเดเตเดธเดธเต เดชเดฟเดถเดเตเดเดณเตเดจเตเดจเตเดฎเดฟเดฒเตเดฒ):
#!/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
เดเตเดฐเตเตบ เดเดฒเตเดฒเดพ เดฆเดฟเดตเดธเดตเตเด เดฐเดพเดตเดฟเดฒเต 6:30-เดจเต เด เดเดพเดธเตโเดเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเด, เดเดดเดฟเดเตเด 10 เดฆเดฟเดตเดธเดฎเดพเดฏเดฟ เดชเดเตผเดชเตเดชเตเดเตพ เดเดดเดฟเดเต เดเดฒเตเดฒเดพเด (เดฎเตเดดเตเดตเตป เดฌเดพเดเตเดเดชเตเดชเตเดเตพ, เดกเตเตฝเดฑเตเดฑเดเตพ, WAL-เดเตพ) เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเด, เดเดจเตเดจเดพเตฝ เดเตเดฑเดเตเดเดคเต เดเดฐเต เดฌเดพเดเตเดเดชเตเดชเตเดเตเดเดฟเดฒเตเด เด เดตเดถเตเดทเดฟเดเตเดเตเดจเตเดจเต เดเดคเดฟเดจเดพเดฏเดฟ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดคเตเดฏเดคเดฟ เด เดเตเดเดจเต เดเดคเตเดเตเดเดฟเดฒเตเด เดชเตเดฏเดฟเดจเตเดฑเต ะฟะพัะปะต เดคเตเดฏเดคเดฟเดเตพ PITR เตฝ เดเตพเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต.
เดเดฐเต เดฌเดพเดเตเดเดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดจเดเดธเตเดฅเดพเดชเดฟเดเตเดเตเดจเตเดจเต
เดเดฐเตเดเตเดฏเดเดฐเดฎเดพเดฏ เดเดฐเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดจเตเดฑเต เดคเดพเดเตเดเตเตฝ เดเดจเตเดเดพเดฒเดฟเด เดชเตเดจเดเดธเตเดฅเดพเดชเดจเดตเตเด เดเดณเตเดณเดฟเดฒเต เดกเดพเดฑเตเดฑเดฏเตเดเต เดธเดฎเดเตเดฐเดค เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดฒเตเด เดเดฃเตเดจเตเดจเดคเต เดฐเดนเดธเตเดฏเดฎเดฒเตเดฒ. เด เดตเดฟเดญเดพเดเดคเตเดคเดฟเตฝ WAL-G เดเดชเดฏเตเดเดฟเดเตเดเต เดเดเตเดเดจเต เดตเตเดฃเตเดเตเดเตเดเตเดเดพเดฎเตเดจเตเดจเต เดเดพเตป เดจเดฟเดเตเดเดณเตเดเต เดชเดฑเดฏเตเด, เดเดเตเดเตพ เดชเดฟเดจเตเดจเตเดเต เดชเดฐเดฟเดถเตเดงเดจเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเต เดธเดเดธเดพเดฐเดฟเดเตเดเตเด.
เดเดคเต เดชเตเดฐเดคเตเดฏเตเดเด เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดฃเตเดเดคเดพเดฃเต เดเดฐเต เดเตเดธเตเดฑเตเดฑเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดชเตเดจเดเดธเตเดฅเดพเดชเดฟเดเตเดเดพเตป (เดชเตเดฐเตเดกเดเตเดทเตป เด เดฒเตเดฒเดพเดคเตเดค เดเดฒเตเดฒเดพเด) เดจเดฟเดเตเดเตพ 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 ;เดฎเตเดเดเตเดกเดฟเดฌเดฟ ;เดซเตเดฃเตเดเตเดทเตป เดกเดฟเดฌเดฟ ;- เดเดฎเตเดฎเดฟเดฑเตเดฑเตเดเดณเตเดเต เด เดเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเตฝ เดตเดฟเดฒเดฏเดฟเดฐเตเดคเตเดคเดฟเดฏเดพเตฝ, เดเดจเดฟเดฏเตเด เดชเดฒเดคเตเด เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเต!
เด เดตเดฒเดเดฌเด: www.habr.com