เชคเซ เชฒเชพเชเชฌเชพ เชธเชฎเชฏเชฅเซ เชเชพเชฃเซเชคเซเช เชเซ เชเซ 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 - 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_level โ 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 เชธเซเชเซเชฐเซเชเชฎเชพเช เชฒเซเชก เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเซเชฏ, เชคเซ เชชเชเซ เชคเชฎเซ เชเซเชฐเซเชจเซเชเชพเชฌเชฎเชพเช เชธเชพเชฎเชฏเชฟเช เชฒเซเชจเซเชเชจเซ เชเซเช เชตเซ เชถเชเซ เชเซ:
#!/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:เชฒเชฟเชธเซเชเชฌเชเซเช, 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 เชธเชพเชฅเซ เชชเชฃ เชเชพเชฎ เชเชฐเซ เชถเชเซ เชเซ:
เชฎเชพเชฏเชเชธเชเซเชฏเซเชเชฒ / เชฎเชพเชฐเชฟเชฏเชพเชกเซเชฌเซ ;MongoDB ;เชซเชพเชเชจเซเชกเซเชถเชจเชกเซเชฌเซ ;- เช เชจเซ เชชเซเชฐเชคเชฟเชฌเชฆเซเชงเชคเชพเช เชฆเซเชตเชพเชฐเชพ เช เชญเชฟเชชเซเชฐเชพเชฏ, เชเชฃเชพ เชตเชงเซ เช เชชเซเชเซเชทเชฟเชค เชเซ!
เชธเซเชฐเซเชธ: www.habr.com