Hoʻolele
He mea hoʻomohala wau. Kākau wau i ke code a launa pū me ka waihona ma ke ʻano he mea hoʻohana. ʻAʻole wau e hoʻohālike i ka luna hoʻonohonoho, ʻoi aku ka liʻiliʻi o ka dba. Akā…
Ua pono iaʻu e hoʻonohonoho i kahi waihona o ka waihona postgresql. ʻAʻohe ao - e hoʻohana wale iā SSH a e hōʻoia i ka holo ʻana o nā mea āpau me ka ʻole e noi kālā. He aha kā mākou e hana ai ma ia mau hihia? Pololei, pana mākou i ka pgdump i loko o ka cron, hoʻihoʻi i nā mea a pau i ka waihona i kēlā me kēia lā, a inā nalowale mākou, hoʻouna mākou i kēia waihona ma kahi mamao.
ʻO kēia manawa ka paʻakikī e like me nā hoʻolālā, ua manaʻo ʻia e ulu ka waihona ma kahi o +- 100 MB i kēlā me kēia lā. ʻOiaʻiʻo, ma hope o ʻelua mau pule e nalowale ka makemake e hoʻihoʻi i nā mea āpau me pgdump. ʻO kēia kahi e hoʻopakele ai nā waihona hoʻonui.
hoihoi? Welina mai i ka popoki.
ʻO ka Incremental Backup kahi ʻano o ka hoʻihoʻi ʻana inā ʻaʻole kope ʻia nā faila kumu a pau, akā nā mea hou a me nā mea i hoʻololi ʻia mai ka wā i hana ʻia ai ke kope mua.
E like me kekahi mea hoʻomohala i makemake ʻole (i kēlā manawa) e hoʻomaopopo i ka paʻakikī o nā postgres, makemake wau e ʻimi i ka pihi ʻōmaʻomaʻo. ʻAe, ʻike ʻoe, e like me AWS, DigitalOcean: ua paʻi ʻoe i hoʻokahi pihi - loaʻa iā ʻoe ka hoʻopiʻi ʻana, paʻi ʻoe i ka lua - hoʻonohonoho ʻoe i nā backup, ʻo ke kolu - ua ʻōwili ʻoe i nā mea āpau i nā hola ʻelua. ʻAʻole i loaʻa iaʻu kahi pihi a i ʻole kahi mea hana GUI nani. Inā ʻike ʻoe i hoʻokahi (free a cheap paha), e kākau e pili ana i ia mea ma nā ʻōlelo.
Ma hope o ka googling ua loaʻa iaʻu nā mea hana ʻelua pgbarman и pgbackrest. ʻAʻole wau i kūleʻa me ka mea mua (nā palapala liʻiliʻi loa, ua hoʻāʻo wau e noʻonoʻo i nā mea āpau e like me nā manual kahiko), akā me ka lua o ka palapala i hoʻololi ʻia i ka par, akā ʻaʻole me ka hemahema. No ka maʻalahi o ka hana a ka poʻe e kū nei i kahi hana like, ua kākau ʻia kēia ʻatikala.
Ma hope o ka heluhelu ʻana i kēia ʻatikala, e aʻo ʻoe pehea e hana ai i nā backup incremental, mālama iā lākou i kahi kikowaena mamao (repository me nā backup) a hoʻihoʻi iā lākou i ka wā o ka nalowale o ka ʻikepili a i ʻole nā pilikia ʻē aʻe ma ka kikowaena nui.
ʻO ka hoʻomākaukauʻana
No ka hana hou i ka manual e pono ʻoe i ʻelua VPS. ʻO ka mua ka waiho ʻana (ka waihona kahi e mālama ʻia ai nā backup), a ʻo ka lua, ʻoiaʻiʻo, ʻo ka server ponoʻī me nā postgres (i koʻu hihia, version 11 o postgres).
Manaʻo ʻia aia ma ka server me nā postgres he aʻa kāu, sudo mea hoʻohana, postgres mea hoʻohana a me nā postgres ponoʻī ua hoʻokomo ʻia (ua hana ʻia ka mea hoʻohana postgres i ka wā e hoʻokomo ai i ka postgresql), a ma ka waihona waihona aia ke kumu a me ka mea hoʻohana sudo (i ka manual. e hoʻohana ʻia ka inoa mea hoʻohana pgbackrest) .
No ka liʻiliʻi o nā pilikia i ka hana hou ʻana i nā ʻōlelo aʻo, kākau wau ma ka italic ma hea, me ka mea hoʻohana a me nā kuleana hea wau i hoʻokō ai i ke kauoha i ke kākau ʻana a me ka nānā ʻana i ka ʻatikala.
Ke kau nei i ka pgbackrest
Waihona (mea hoʻohana pgbackrest):
1. Hoʻoiho i ka waihona mai ka pgbackrest a hoʻoili i kāna mau mea i ka waihona /build:
sudo mkdir /build
sudo wget -q -O -
https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz |
sudo tar zx -C /build
2. E hoʻouka i nā mea hilinaʻi e pono ai no ka hui ʻana:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev
libpq-dev
3. Hoʻohui i ka pgbackrest:
cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src
4. E kope i ka faila hiki ke hoʻokō i ka papa kuhikuhi /usr/bin:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
5. Pgbackrest pono perl. E hoʻouka:
sudo apt-get install perl
6. E hana i nā papa kuhikuhi no nā lāʻau, e hāʻawi iā lākou i kekahi mau kuleana:
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. Nānā:
pgbackrest version
Server postgres (mea hoʻohana sudo a kumu paha):
ʻO ke kaʻina o ka hoʻokomo ʻana i ka pgbackrest ma kahi kikowaena me nā postgres e like me ke kaʻina hana ma ka waihona (ʻae, pono e hoʻokomo ʻia ka pgbackrest ma nā kikowaena ʻelua), akā ma ka paukū 6 ka lua a me ke kauoha hope:
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
pani me:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
Hoʻonohonoho i ka pilina ma waena o nā kikowaena ma o ka SSH password ʻole
I mea e hana pono ai ka pgbackrest, pono e hoʻonohonoho i ka pilina ma waena o ka server postgres a me ka waihona me ka hoʻohana ʻana i ka faila kī.
Waihona (mea hoʻohana pgbackrest):
E hana i hui kī:
mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa
-t rsa -b 4096 -N ""
E hoʻomaikaʻi mai! Holo mākou i nā kauoha i luna me ka ʻole sudo.
Server postgres (mea hoʻohana sudo a kumu paha):
E hana i hui kī:
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 ""
Waihona (sudo mea hoʻohana):
E kope i ke kī lehulehu o ka server postgres i ke kikowaena waihona:
(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
Ma kēia ʻanuʻu e nīnau ʻia ʻoe no ka ʻōlelo huna no ka mea hoʻohana kumu. Pono ʻoe e hoʻokomo i ka ʻōlelo huna o ka mea hoʻohana kumu o ka server postgres!
Ke kikowaena Postgres (mea hoʻohana sudo):
E kope i ka waihona kī lehulehu i ka kikowaena me nā postgres:
(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
Ma kēia ʻanuʻu e nīnau ʻia ʻoe no ka ʻōlelo huna no ka mea hoʻohana kumu. Pono ʻoe e hoʻokomo pololei i ka ʻōlelo huna o ka mea hoʻohana kumu o ka waihona!
E nānā mākou:
Waihona (mea hoʻohana kumu, no ka maʻemaʻe o ka hoʻokolohua):
sudo -u pgbackrest ssh postgres@<postgres_server_ip>
Postgres server (mea hoʻohana kumu, no ka maʻemaʻe o ka hoʻokolohua):
sudo -u postgres ssh pgbackrest@<repository_server_ip>
Hoʻomaopopo mākou e loaʻa iā mākou ke komo me ka pilikia ʻole.
Hoʻonohonoho i kahi kikowaena postgres
Server postgres (mea hoʻohana sudo a kumu paha):
1. E ʻae kākou i ke kīkēkē ʻana i ke kikowaena postgres mai nā IP waho. No ka hana ʻana i kēia, hoʻoponopono i ka faila postgresql.conf (aia i loko o ka /etc/postgresql/11/main folder), e hoʻohui i ka laina iā ia:
listen_addresses = '*'
Inā loaʻa kēia laina, wehe ʻole a hoʻonohonoho i ka waiwai hoʻohālikelike ʻo '*'.
Ma ka waihona pg_hba.conf (aia ma ka waihona /etc/postgresql/11/main) e hoʻohui i kēia mau laina:
hostssl all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 md5
kahi:
hostssl/host - подключаемся через SSL (или нет)
all - разрешаем подключение ко всем базам
all - имя пользователя, которому разрешаем подключение (всем)
0.0.0.0/0 - маска сети с которой можно подключаться
md5 - способ шифрования пароля
2. E hana kāua i nā hoʻonohonoho pono i loko postgresql.conf (aia ma ka waihona /etc/postgresql/11/main) no ka pgbackrest e hana:
archive_command = 'pgbackrest --stanza=main archive-push %p' # Где main - название кластера. При установке postgres автоматически создает кластер main.
archive_mode = on
max_wal_senders = 3
wal_level = replica
3. E hana kāua i nā hoʻonohonoho pono i ka faila hoʻonohonoho pgbackrest (/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-path=/var/lib/postgresql/11/main
[global]
log-level-file=detail
repo1-host=<repository_server_ip>
4. Hoʻouka hou i ka postgresql:
sudo service postgresql restart
Hoʻonohonoho i kahi kikowaena waihona
Waihona (mea hoʻohana pgbackrest):
E hana i nā hoʻonohonoho pono i ka faila hoʻonohonoho 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
Ke hana ʻana i kahi waihona
Waihona (mea hoʻohana pgbackrest):
E hana i kahi waihona hou no ka hui ka papa kuhikuhiE:
sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create
nana
Server postgres (mea hoʻohana sudo a kumu paha):
Nānā mākou i ka server postgres:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info check
Waihona (mea hoʻohana pgbackrest):
Nānā mākou i ka waihona waihona:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check
Hoʻomaopopo mākou i ka hopena i ʻike mākou i ka laina "check command end: hoʻopau kūleʻa".
luhi? E neʻe kākou i ka ʻāpana hoihoi loa.
Ke hana ʻana i kahi waihona
Waihona (mea hoʻohana pgbackrest):
1. Hana i kahi waihona:
sudo -u pgbackrest pgbackrest --stanza=main backup
2. E hōʻoia ua hana ʻia kahi waihona:
ls /var/lib/pgbackrest/backup/main/
E hana ʻo Pgbackrest i ka waihona piha mua. Inā makemake ʻoe, hiki iā ʻoe ke holo hou i ke kauoha hoʻihoʻi a e hōʻoia i ka hana ʻana o ka ʻōnaehana i kahi waihona hoʻonui.
Inā makemake ʻoe e hana hou i kahi hoʻihoʻi piha, a laila e kuhikuhi i kahi hae hou:
sudo -u pgbackrest pgbackrest --stanza=main --type=full backup
Inā makemake ʻoe i ka huahana console kikoʻī, a laila e kuhikuhi pū:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup
Hoʻihoʻi hou i kahi waihona
Server postgres (mea hoʻohana sudo a kumu paha):
1. Hoʻopau i ka pūʻulu holo:
sudo pg_ctlcluster 11 main stop
2. Hoʻihoʻi ʻia mai ka waihona:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate restore
No ka hoʻihoʻi ʻana i ka waihona i ka mokuʻāina o ka hope FULL backup, e hoʻohana i ke kauoha me ka ʻole e kuhikuhi ana i ka recovery_target:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta restore
Mea nui! Ma hope o ka hoʻihoʻi ʻana, paʻa paha ka waihona i ke ʻano hoʻihoʻi (e loaʻa nā hewa e like me ERROR: ʻaʻole hiki ke hoʻokō i ka DROP DATABASE ma kahi kālepa heluhelu wale nō). ʻO kaʻoiaʻiʻo, ʻaʻole wau i maopopo i ke ʻano o kēia pili. Penei ka hopena (pono ʻoe e kali iki ma hope o ka hoʻokō ʻia ʻana o ke kauoha):
sudo -u postgres psql -c "select pg_wal_replay_resume()"
ʻO kaʻoiaʻiʻo, hiki ke hoʻihoʻi i kahi waihona kikoʻī ma kona inoa. Eia wau wale nō
3. E hoʻomaka i ka pūʻulu:
sudo pg_ctlcluster 11 main start
Ma hope o ka hoʻihoʻi ʻana i ka waihona, pono mākou e hana i kahi kope lua:
Waihona (mea hoʻohana pgbackrest):
sudo pgbackrest --stanza=main backup
ʻo ia wale nō. I ka hopena, makemake wau e hoʻomanaʻo iā ʻoe ʻaʻole wau e hoʻāʻo e hoʻohālike i ke ʻano he dba kiʻekiʻe a e hoʻohana i nā ao i kahi manawa liʻiliʻi. I kēia manawa, hoʻomaka wau e aʻo i nā kumuhana like ʻole e like me ka backup, replication, monitoring, etc. a kākau wau i nā hōʻike liʻiliʻi e pili ana i nā hopena i mea e hāʻawi liʻiliʻi ai i ke kaiāulu a waiho i nā pepa hoʻopunipuni liʻiliʻi noʻu iho.
Ma nā ʻatikala aʻe e hoʻāʻo wau e kamaʻilio e pili ana i nā hiʻohiʻona hou - ka hoʻihoʻi ʻana i ka ʻikepili i kahi puʻupuʻu maʻemaʻe, ka hoʻopili ʻana i nā backup a me ka paʻi ʻana iā S3, backups ma rsync.
Source: www.habr.com