Disclaimer
Mpanamboatra aho. Manoratra kaody aho ary mifandray amin'ny angon-drakitra amin'ny maha mpampiasa azy fotsiny. Na ahoana na ahoana dia tsy miseho ho mpitantana rafitra aho, mainka fa dba. Fa…
Nitranga izany fa nila nandamina backup ny angon-drakitra postgresql aho. Tsy misy rahona - ampiasao SSH fotsiny ary ataovy azo antoka fa mandeha ny zava-drehetra tsy misy vola. Inona no ataontsika amin'ny tranga toy izany? Marina izany, manosika ny pgdump amin'ny cron izahay, mamerina ny zava-drehetra ao amin'ny arisiva isan'andro, ary raha very tanteraka izahay dia alefanay any amin'ny toerana lavitra ity arisiva ity.
Tamin'ity indray mitoraka ity ny fahasarotana dia araka ny drafitra dia tokony hitombo +- 100 MB isan'andro ny angon-drakitra. Mazava ho azy fa rehefa afaka herinandro vitsivitsy dia hanjavona ny faniriana hanao backup ny zava-drehetra amin'ny pgdump. Eto no tonga ny backup incremental ho famonjena.
Mahaliana? Tongasoa eto amin'ny saka.
Ny backup incremental dia karazana backup rehefa tsy ny rakitra loharano rehetra no adika, fa ny vaovao sy ireo niova hatramin'ny namoronana ny kopia teo aloha.
Tahaka ny mpamorona rehetra izay tsy te-hahatakatra (tamin'izany fotoana izany) ny fahasarotan'ny postgres, te hahita ny bokotra maitso aho. Eny, fantatrao, toy ny ao amin'ny AWS, DigitalOcean: nanindry bokotra iray ianao - nahazo replication ianao, nanindry ny faharoa - nanangana backup ianao, ny fahatelo - naverinao ny zava-drehetra nandritra ny adiny roa. Tsy nahita bokotra na fitaovana GUI tsara tarehy aho. Raha fantatrao ny iray (maimaim-poana na mora), manorata momba izany ao amin'ny fanehoan-kevitra.
Taorian'ny google dia nahita fitaovana roa aho pgbarman и pgbackrest. Tsy nahomby tamin'ny voalohany aho (taratasy kely dia kely, niezaka ny hamantatra ny zava-drehetra aho araka ny boky tranainy), fa tamin'ny faharoa kosa dia nihaona ny antontan-taratasy, saingy tsy nisy lesoka. Mba hanatsorana ny asan'ireo izay miatrika asa mitovy amin'izany, dia nosoratana ity lahatsoratra ity.
Rehefa avy mamaky ity lahatsoratra ity ianao dia hianatra ny fomba fanaovana backup incremental, tehirizo amin'ny mpizara lavitra (fitehirizam-bokatra misy backup) ary avereno amin'ny laoniny izy ireo raha misy ny fahaverezan'ny data na olana hafa amin'ny lohamilina lehibe.
Fiomanana
Mba hamerenana ny boky dia mila VPS roa ianao. Ny voalohany dia ny fitahirizana (ny tahiry izay hitahirizana ny backup), ary ny faharoa, raha ny marina, ny mpizara miaraka amin'ny postgres (raha ny ahy, version 11 of postgres).
Heverina fa ao amin'ny server miaraka amin'ny postgres dia manana faka ianao, mpampiasa sudo, mpampiasa postgres ary postgres mihitsy no apetraka (ny mpampiasa postgres dia noforonina ho azy rehefa mametraka postgresql), ary ao amin'ny server repository dia misy root sy sudo user (ao amin'ny manual). ny anaran'ny mpampiasa pgbackrest dia hampiasaina).
Mba ho vitsy kokoa ny olanao rehefa mamerina ny toromarika, dia manoratra amin'ny sora-mandry aho aiza, amin'ny mpampiasa inona ary amin'ny zo inona no nanatanteraka ny baiko rehefa manoratra sy manamarina ny lahatsoratra.
Fametrahana pgbackrest
Repository (mpampiasa pgbackrest):
1. Ampidino avy amin'ny pgbackrest ny arisiva ary afindrao amin'ny lahatahiry /build ny ao anatiny:
sudo mkdir /build
sudo wget -q -O -
https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz |
sudo tar zx -C /build
2. Apetraho ireo fiankinana ilaina amin'ny fivoriambe:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev
3. Fametrahana pgbackrest:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src
4. Adikao amin'ny lahatahiry /usr/bin ny rakitra azo tanterahana:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
5. Pgbackrest dia mila perl. Mametraka:
sudo apt-get install perl
6. Mamorona lahatahiry ho an'ny diary, omeo zo sasany izy ireo:
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
7. Jereo:
pgbackrest version
Mpizara Postgres (mpampiasa sudo na faka):
Ny dingan'ny fametrahana pgbackrest amin'ny mpizara misy postgres dia mitovy amin'ny fizotry ny fametrahana ao amin'ny tahiry (eny, pgbackrest tsy maintsy apetraka amin'ny mpizara roa), fa ao amin'ny paragrafy faha-6 ny baiko faharoa sy farany:
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
soloy amin'ny:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
Mametraka fifandraisana eo amin'ireo mpizara amin'ny alàlan'ny SSH tsy misy tenimiafina
Mba hahafahan'ny pgbackrest miasa tsara dia ilaina ny manamboatra ny fifandraisana eo amin'ny mpizara postgres sy ny tahiry amin'ny fampiasana ny rakitra fototra.
Repository (mpampiasa pgbackrest):
Mamorona mpivady fanalahidy:
mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa
-t rsa -b 4096 -N ""
Miangavy azafady! Manatanteraka ireo baiko etsy ambony tsy misy sudo izahay.
Mpizara Postgres (mpampiasa sudo na faka):
Mamorona mpivady fanalahidy:
sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa
-t rsa -b 4096 -N ""
Repository (mpampiasa sudo):
Adikao amin'ny mpizara fitehirizana ny fanalahidin'ny daholobe an'ny mpizara postgres:
(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' &&
echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' &&
sudo ssh root@<postgres_server_ip> cat /var/lib/postgresql/.ssh/id_rsa.pub) |
sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys
Amin'ity dingana ity dia hangatahana ny tenimiafina ho an'ny mpampiasa root ianao. Mila miditra ny tenimiafina an'ny mpampiasa root amin'ny server postgres ianao!
Mpizara Postgres (mpampiasa sudo):
Adikao amin'ny mpizara miaraka amin'ny postgres ny fanalahidin'ny daholobe:
(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' &&
echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' &&
sudo ssh root@<repository_server_ip> cat /home/pgbackrest/.ssh/id_rsa.pub) |
sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys
Amin'ity dingana ity dia hangatahana ny tenimiafina ho an'ny mpampiasa root ianao. Mila ampidirinao tsara ny tenimiafina an'ny mpampiasa root amin'ny tahiry!
Hamarininay:
Repository (mpampiasa root, ho an'ny fahadiovan'ny fanandramana):
sudo -u pgbackrest ssh postgres@<postgres_server_ip>
Mpizara Postgres (mpampiasa root, ho an'ny fahadiovan'ny andrana):
sudo -u postgres ssh pgbackrest@<repository_server_ip>
Ataovy azo antoka fa mahazo fidirana tsy misy olana izahay.
Mametraka mpizara postgres
Mpizara Postgres (mpampiasa sudo na faka):
1. Andao avela handondona ny mpizara postgres avy amin'ny IP ivelany. Mba hanaovana izany, manova ny rakitra postgresql.conf ( hita ao amin'ny /etc/postgresql/11/main folder), ampio ny tsipika aminy:
listen_addresses = '*'
Raha toa ka efa misy ny tsipika toy izany, dia asio fanamarihana izany na apetraho ho '*' ny sandan'ny parameter.
Ao anaty rakitra pg_hba.conf (misy koa ao amin'ny lahatahiry /etc/postgresql/11/main) ampio ireto andalana manaraka ireto:
hostssl all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 md5
izay:
hostssl/host - подключаемся через SSL (или нет)
all - разрешаем подключение ко всем базам
all - имя пользователя, которому разрешаем подключение (всем)
0.0.0.0/0 - маска сети с которой можно подключаться
md5 - способ шифрования пароля
2. Andeha isika hanao ny toe-javatra ilaina ao postgresql.conf (misy ao amin'ny folder /etc/postgresql/11/main) mba hiasa ny pgbackrest:
archive_command = 'pgbackrest --stanza=main archive-push %p' # Где main - название кластера. При установке postgres автоматически создает кластер main.
archive_mode = on
max_wal_senders = 3
wal_level = replica
3. Andeha hataontsika ao amin'ny fichier configuration pgbackrest (/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-path=/var/lib/postgresql/11/main
[global]
log-level-file=detail
repo1-host=<repository_server_ip>
4. Avereno indray ny postgresql:
sudo service postgresql restart
Mametraka mpizara fitahirizana
Repository (mpampiasa pgbackrest):
Andao hanao ny fanovana ilaina ao amin'ny fichier configuration pgbackrest
(/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-host=<postgres_server_ip>
pg1-path=/var/lib/postgresql/11/main
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2 # Параметр, указывающий сколько хранить полных бэкапов. Т.е. если у вас есть два полных бэкапа и вы создаете третий, то самый старый бэкап будет удален. Можно произносить как "хранить не более двух бэкапов" - по аналогии с ротациями логов. Спасибо @Aytuar за исправление ошибки.
start-fast=y # Начинает резервное копирование немедленно, прочитать про этот параметр можно тут https://postgrespro.ru/docs/postgrespro/9.5/continuous-archiving
Mamorona tahiry
Repository (mpampiasa pgbackrest):
Mamorona fitahirizana vaovao ho an'ny cluster tena:
sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create
fanaraha-maso
Mpizara Postgres (mpampiasa sudo na faka):
Manamarina ny mpizara postgres izahay:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info check
Repository (mpampiasa pgbackrest):
Manamarina ny mpizara repository izahay:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check
Ataovy azo antoka fa ao amin'ny famoahana dia hitantsika ny tsipika "jereo ny baiko farany: vita soa aman-tsara".
Reraka? Andeha isika hifindra any amin'ny ampahany mahaliana indrindra.
Manao backup
Repository (mpampiasa pgbackrest):
1. Manaova backup:
sudo -u pgbackrest pgbackrest --stanza=main backup
2. Ataovy azo antoka fa efa noforonina ny backup:
ls /var/lib/pgbackrest/backup/main/
Pgbackrest dia hamorona ny backup feno voalohany. Raha tianao dia azonao atao ny mamerina ny baiko backup ary ataovy azo antoka fa mamorona backup fanampiny ny rafitra.
Raha te hanao backup feno indray ianao dia manendry saina fanampiny:
sudo -u pgbackrest pgbackrest --stanza=main --type=full backup
Raha mila vokatra console amin'ny antsipiriany ianao, dia soraty ihany koa:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup
Famerenana ny backup
Mpizara Postgres (mpampiasa sudo na faka):
1. Atsaharo ny cluster mihazakazaka:
sudo pg_ctlcluster 11 main stop
2. Famerenana amin'ny backup:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate restore
Чтобы восстановить базу в состояние последнего ПОЛНОГО бэкапа используйте команду без указания recovery_target:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta restore
Важно! После восстановления может оказаться так, что база зависнет в режиме восстановления (будут ошибки в духе ERROR: cannot execute DROP DATABASE in a read-only transaction). Честно говоря, я еще не понял, с чем это связано. Решается следующим образом (нужно будет малость подождать после исполнения команды):
sudo -u postgres psql -c "select pg_wal_replay_resume()"
На самом деле, есть возможность восстановить конкретный бэкап по его имени. Здесь я лишь
3. Atombohy ny cluster:
sudo pg_ctlcluster 11 main start
Aorian'ny famerenana ny backup dia mila manao backup faharoa isika:
Repository (mpampiasa pgbackrest):
sudo pgbackrest --stanza=main backup
Izay ihany. Fehiny, tiako ny mampahatsiahy anao fa tsy miezaka ny mody ho zokiny dba aho ary hampiasa ny rahona na dia kely aza. Amin'izao fotoana izao, ny tenako dia manomboka mianatra lohahevitra isan-karazany toy ny backup, replication, fanaraha-maso, sns. ary manoratra tatitra kely momba ny vokatra aho mba hanomezana anjara kely ho an'ny fiaraha-monina ary hamela taratasy fitaka kely ho ahy.
Amin'ireto lahatsoratra manaraka ireto dia hiezaka hiresaka momba ny endri-javatra fanampiny aho - famerenana ny angon-drakitra amin'ny cluster madio, fanafenana backups ary famoahana amin'ny S3, backups amin'ny rsync.
Source: www.habr.com