Sobes.tech
Middle

როგორ დააყენებდით PostgreSQL-ის სარეზერვო ასლების შექმნას მხოლოდ შიდა მექანიზმებით, გარეგანი ინსტრუმენტების, როგორიცაა vim, გამოყენების გარეშე?

sobes.tech AI

პასუხი AI-სგან

რა თქმა უნდა, მე მზად ვარ ამ კითხვაზე პასუხის გასაცემად.

პოსტგრესკულს ბექაფების შექმნისთვის მხოლოდ ინტერნალური მექანიზმების გამოყენებით, მე გამოვიყენებდი შემდეგ მიდგომებს:

  1. 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
    
  2. მუდმივი არქივიზაცია (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
    
  3. ფიზიკური კოპიები (File-level backup):

    • ფაილური სისტემის ფაილების პირდაპირი კოპირება PGDATA დირექტორიიდან.
    • საჭიროებს PostgreSQL-ის გაჩერებას ან ფაილური სისტემის სნაპშოტების გამოყენებას.
    • არ არის შესაფერისი მუშაობის დროს კოპირებისათვის, თუ არ გამოიყენება დამატებითი ინსტრუმენტები (მაგალითად, LVM სნაპშოტები).
    • უპირატესობა: მარტივი განხორციელება მცირე მონაცემთა ბაზებისთვის გაჩერების დროს.
    • ნაკლოვანება: სერვერის გაჩერება სჭირდება, მაღალი რისკი მონაცემთა დაზიანებისთვის მუშაობის დროს კოპირებისას.

სანდო და ეფექტიანი ბექაფის სტრატეგიისთვის, განსაკუთრებით საბრძოლო სისტემებისთვის, მე გირჩევდი pg_basebackup-ის და უწყვეტი WAL არქივიზაციის კომბინაციას, რათა უზრუნველყოს PITR. ეს საშუალებას მოგცემთ აღდგეთ მინიმალური მონაცემების დაკარგვით და მოქნილი აღდგენის წერტილის არჩევით. ლოგიკური კოპიები (pg_dump, pg_dumpall) შეიძლება გამოყენებულ იქნას ცალკეული მონაცემთა ბაზების ბექაფებისთვის ან მონაცემთა გადატანისთვის, მაგრამ ნაკლებად ეფექტურია სრული სამაშველო (Disaster Recovery) სისტემებისთვის.

ავტომატიზაციისთვის, მაგალითად cron-ის გამოყენებით, საჭიროა სამუშაო გრაფიკი, მაგრამ ბექაფის შექმნის პროცესი შესრულდება PostgreSQL-ის ინტერნალური ბრძანებებით.