როგორ დააყენებდით PostgreSQL-ის სარეზერვო ასლების შექმნას მხოლოდ შიდა მექანიზმებით, გარეგანი ინსტრუმენტების, როგორიცაა vim, გამოყენების გარეშე?
sobes.tech AI
პასუხი AI-სგან
რა თქმა უნდა, მე მზად ვარ ამ კითხვაზე პასუხის გასაცემად.
პოსტგრესკულს ბექაფების შექმნისთვის მხოლოდ ინტერნალური მექანიზმების გამოყენებით, მე გამოვიყენებდი შემდეგ მიდგომებს:
-
pg_dumpდაpg_dumpall:pg_dumpქმნის ლოგიკურ ბექაფს ერთ მონაცემთა ბაზაზე.pg_dumpallქმნის ლოგიკურ ბექაფს ყველა მონაცემთა ბაზაზე, მათ შორის სისტემურ ობიექტებზე (როლები, სქემები).- ისინი ქმნიან ტექსტურ ფაილს SQL ინსტრუქციებით აღდგენისთვის ან ბინარულ არქივს.
- უპირატესობა: გამოყენების სიმარტივე, მოქნილობა გამოსავალის ფორმატის არჩევაში.
- ნაკლოვანება: აღდგენა ლოგიკური კოპიიდან შეიძლება დიდი დრო დასჭირდეს დიდ მონაცემთა ბაზებზე. არ არის შესაფერისი უწყვეტი ბექაფებისთვის (PITR).
გამოყენების მაგალითი
pg_dump-ის:# ლოგიკური ბექაფის შექმნა მონაცემთა ბაზაზე 'mydatabase' plain text ფორმატში: pg_dump mydatabase > mydatabase_backup.sql # ლოგიკური ბექაფის შექმნა მონაცემთა ბაზაზე 'mydatabase' custom ფორმატში: pg_dump -Fc mydatabase > mydatabase_backup.dump # ყველა მონაცემთა ბაზის ლოგიკური ბექაფის შექმნა: pg_dumpall > all_databases_backup.sql -
მუდმივი არქივიზაცია (Continuous Archiving) და Point-in-Time Recovery (PITR):
- მოიცავს პარამეტრებს
wal_level,archive_modeდაarchive_commandფაილშიpostgresql.conf. - საშუალებას იძლევა შექმნას უწყვეტი არქივირებული WAL ფაილების ნაკადი.
- PITR-ისთვის საჭიროა ძირითადი კოპია (მაგალითად,
pg_basebackup-ით შექმნილი) და WAL ფაილების სერია. - უპირატესობა: აღდგენა ნებისმიერ დროს, მინიმალური გავლენა სერვერის მუშაობაზე არქივიზაციის დროს.
- ნაკლოვანება: საჭიროებს მეტი კონფიგურაციას და საცავების მართვას WAL ფაილებისთვის.
კონფიგურაციის მაგალითი
postgresql.conf-ში:# WAL-არქივიზაციის კონფიგურაცია wal_level = replica # ან higher, საჭიროა არქივაციისთვის archive_mode = on # ჩართულია WAL არქივიზაციის რეჟიმი archive_command = 'cp %p /path/to/wal_archive/%f' # ბრძანება WAL ფაილების კოპირებისათვის. შეცვალეთ '/path/to/wal_archive/' თქვენს საცავზე.ძირითადი კოპიის შექმნის მაგალითი
pg_basebackup-ით:# ძირითადი კოპიის შექმნა '/path/to/base_backup' დირექტორიაში pg_basebackup -D /path/to/base_backup -F t -x -v - მოიცავს პარამეტრებს
-
ფიზიკური კოპიები (File-level backup):
- ფაილური სისტემის ფაილების პირდაპირი კოპირება
PGDATAდირექტორიიდან. - საჭიროებს PostgreSQL-ის გაჩერებას ან ფაილური სისტემის სნაპშოტების გამოყენებას.
- არ არის შესაფერისი მუშაობის დროს კოპირებისათვის, თუ არ გამოიყენება დამატებითი ინსტრუმენტები (მაგალითად, LVM სნაპშოტები).
- უპირატესობა: მარტივი განხორციელება მცირე მონაცემთა ბაზებისთვის გაჩერების დროს.
- ნაკლოვანება: სერვერის გაჩერება სჭირდება, მაღალი რისკი მონაცემთა დაზიანებისთვის მუშაობის დროს კოპირებისას.
- ფაილური სისტემის ფაილების პირდაპირი კოპირება
სანდო და ეფექტიანი ბექაფის სტრატეგიისთვის, განსაკუთრებით საბრძოლო სისტემებისთვის, მე გირჩევდი pg_basebackup-ის და უწყვეტი WAL არქივიზაციის კომბინაციას, რათა უზრუნველყოს PITR. ეს საშუალებას მოგცემთ აღდგეთ მინიმალური მონაცემების დაკარგვით და მოქნილი აღდგენის წერტილის არჩევით. ლოგიკური კოპიები (pg_dump, pg_dumpall) შეიძლება გამოყენებულ იქნას ცალკეული მონაცემთა ბაზების ბექაფებისთვის ან მონაცემთა გადატანისთვის, მაგრამ ნაკლებად ეფექტურია სრული სამაშველო (Disaster Recovery) სისტემებისთვის.
ავტომატიზაციისთვის, მაგალითად cron-ის გამოყენებით, საჭიროა სამუშაო გრაფიკი, მაგრამ ბექაფის შექმნის პროცესი შესრულდება PostgreSQL-ის ინტერნალური ბრძანებებით.