PostgreSQL-এ Backup এবং Restore দুটি অত্যন্ত গুরুত্বপূর্ণ কাজ, যেগুলি ডেটাবেসের নিরাপত্তা এবং স্থায়ীত্ব নিশ্চিত করতে ব্যবহৃত হয়। এই পদ্ধতিগুলি বিভিন্ন সিস্টেমে ডেটাবেসের ডেটা সংরক্ষণ এবং পুনরুদ্ধার করার জন্য ব্যবহৃত হয়।
PostgreSQL-এ Backup এবং Restore করার জন্য বিভিন্ন পদ্ধতি রয়েছে। এই টিউটোরিয়ালে, আমরা সবচেয়ে সাধারণ পদ্ধতিগুলি সম্পর্কে আলোচনা করব: pg_dump, pg_restore, এবং pg_basebackup।
1. pg_dump (Backup)
pg_dump হল PostgreSQL-এর একটি কমান্ডলাইন টুল, যা একটি ডেটাবেসের ব্যাকআপ তৈরি করতে ব্যবহৃত হয়। এটি পুরো ডেটাবেসের একটি লজিক্যাল ব্যাকআপ তৈরি করে, যা SQL স্ক্রিপ্ট বা অন্য ফরম্যাটে ডেটা সংরক্ষণ করে।
ব্যাকআপ নেওয়ার পদ্ধতি
- একটি ডেটাবেস ব্যাকআপ নেওয়া (SQL ফাইল)
pg_dump my_database > my_database_backup.sql
এখানে, my_database হল আপনার ডেটাবেসের নাম এবং my_database_backup.sql হল ব্যাকআপ ফাইলের নাম, যেখানে ডেটাবেসের সমস্ত ডেটা এবং স্কিমা SQL ফরম্যাটে সংরক্ষণ হবে।
- তথ্য এবং স্কিমা একসাথে ব্যাকআপ নেওয়া
pg_dump -Fc my_database > my_database_backup.dump
এখানে, -Fc অপশনটি ব্যাকআপকে custom format-এ সংরক্ষণ করবে, যা পরে pg_restore দ্বারা পুনরুদ্ধার করা যেতে পারে।
- স্পেসিফিক টেবিল বা ডেটা ব্যাকআপ নেওয়া
pg_dump -t my_table my_database > my_table_backup.sql
এখানে, -t অপশনটি my_table টেবিলের ব্যাকআপ তৈরি করবে।
- ব্যাকআপে ডেটা ছাড়াই স্কিমা ব্যাকআপ নেওয়া
pg_dump -s my_database > my_database_schema_backup.sql
এখানে, -s অপশনটি শুধুমাত্র স্কিমা ব্যাকআপ তৈরি করবে, ডেটা নয়।
2. pg_restore (Restore)
pg_restore হল একটি PostgreSQL টুল যা custom format বা tar format ব্যাকআপ থেকে ডেটাবেস পুনরুদ্ধার করতে ব্যবহৃত হয়। এটি pg_dump দ্বারা তৈরি ব্যাকআপ ফাইল থেকে ডেটা এবং স্কিমা পুনরুদ্ধার করে।
Restore করার পদ্ধতি
- SQL ব্যাকআপ ফাইল থেকে ডেটাবেস পুনরুদ্ধার করা
psql my_database < my_database_backup.sql
এটি SQL ফরম্যাটে তৈরি ব্যাকআপ ফাইল থেকে ডেটাবেস পুনরুদ্ধার করবে।
- Custom format ব্যাকআপ ফাইল থেকে ডেটাবেস পুনরুদ্ধার করা
pg_restore -d my_database my_database_backup.dump
এখানে, -d অপশনটি পুনরুদ্ধারের জন্য ডেটাবেসের নাম নির্ধারণ করে। আপনি যদি টেবিল নাম এবং অন্য কনফিগারেশন কাস্টমাইজ করতে চান, তবে অতিরিক্ত অপশন ব্যবহার করতে পারেন।
- একটি নির্দিষ্ট টেবিল থেকে পুনরুদ্ধার করা
pg_restore -t my_table -d my_database my_table_backup.dump
এটি কেবলমাত্র my_table টেবিলটি পুনরুদ্ধার করবে।
- ডেটাবেস পুনরুদ্ধার করার সময় স্কিমা পরিবর্তন করা
pg_restore --no-owner -d my_database my_database_backup.dump
এখানে, --no-owner অপশনটি পুনরুদ্ধারের সময় মালিকানার তথ্য বাদ দিবে।
3. pg_basebackup (Physical Backup)
pg_basebackup হল PostgreSQL-এ একটি ফিজিক্যাল ব্যাকআপ টুল, যা পুরো ডেটাবেস ক্লাস্টারের একটি ব্যাকআপ তৈরি করে। এটি সিঙ্ক্রোনাস ব্যাকআপ তৈরি করার জন্য ব্যবহৃত হয় এবং replication সেটআপের জন্য ব্যবহার করা হয়।
pg_basebackup দিয়ে ব্যাকআপ নেওয়া
pg_basebackup -D /path/to/backup_directory -Ft -z -P
-Dঅপশনটি ব্যাকআপ ফাইল কোথায় সংরক্ষণ করতে হবে তা নির্ধারণ করে।-Ftঅপশনটি ব্যাকআপ ফরম্যাট হিসেবে tar ফরম্যাট নির্ধারণ করে।-zঅপশনটি ব্যাকআপে compression প্রয়োগ করবে।-Pঅপশনটি ব্যাকআপের প্রগ্রেস দেখাবে।
Replication Setup জন্য pg_basebackup ব্যবহার
Replication setup-এর জন্য pg_basebackup ডেটাবেসের পূর্ণ কপি তৈরি করতে সাহায্য করে, যা standby সার্ভারে ব্যবহৃত হয়।
pg_basebackup -h primary_host -U replication_user -D /path/to/standby_directory -P --wal-method=stream
এখানে, -h হল প্রধান সার্ভারের হোস্টনেম বা আইপি, এবং -U হল replication ইউজারের নাম।
4. Point-in-Time Recovery (PITR)
Point-in-Time Recovery (PITR) হল একটি বিশেষ রিকভারি পদ্ধতি যেখানে আপনি ডেটাবেসকে একটি নির্দিষ্ট সময়ের পয়েন্টে ফিরিয়ে আনতে পারেন। এটি WAL (Write-Ahead Logging) ফাইল ব্যবহার করে সম্ভব হয়।
PITR এর জন্য প্রস্তুতি:
- WAL Archive রাখুন:
- আপনাকে WAL ফাইলগুলি সংরক্ষণ করতে হবে, যা ডেটাবেসের সকল পরিবর্তন ট্র্যাক করে।
- PostgreSQL এ
archive_modeএবংarchive_commandকনফিগারেশনের মাধ্যমে WAL ফাইল সংরক্ষণ করতে হবে।
- ব্যাকআপ এবং PITR রিকভারি:
- ব্যাকআপ নেওয়ার পর, আপনি নির্দিষ্ট একটি সময়ের পরবর্তী WAL ফাইলগুলো ব্যবহার করে ডেটাবেস রিকভারি করতে পারেন।
# Backed up base files
pg_basebackup -D /path/to/backup_dir -Ft -z -P
# Recover using WAL files
restore_command = 'cp /path/to/archive/%f %p'
সারাংশ
PostgreSQL-এ Backup এবং Restore অত্যন্ত গুরুত্বপূর্ণ, এবং এই কাজগুলো pg_dump, pg_restore, এবং pg_basebackup টুল ব্যবহার করে করা হয়।
- pg_dump: লজিক্যাল ব্যাকআপ তৈরি করতে ব্যবহৃত হয়। এটি SQL বা custom ফরম্যাটে ব্যাকআপ ফাইল তৈরি করে।
- pg_restore:
pg_dumpদ্বারা তৈরি ব্যাকআপ ফাইল পুনরুদ্ধার করতে ব্যবহৃত হয়। - pg_basebackup: একটি ফিজিক্যাল ব্যাকআপ তৈরি করে, যা সাধারণত replication এবং point-in-time recovery এর জন্য ব্যবহৃত হয়।
- Point-in-Time Recovery (PITR): নির্দিষ্ট সময়ের পরবর্তী ব্যাকআপ এবং WAL ফাইলগুলির মাধ্যমে ডেটাবেস পুনরুদ্ধার করার প্রক্রিয়া।
এই টুলগুলো PostgreSQL ডেটাবেসের নিরাপত্তা, স্থায়ীত্ব এবং দ্রুত পুনরুদ্ধারের জন্য অত্যন্ত গুরুত্বপূর্ণ।
PostgreSQL ডেটাবেসের ব্যাকআপ হল ডেটার নিরাপত্তা নিশ্চিত করার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া। ডেটাবেসের ব্যাকআপ নেওয়া আপনাকে দুর্ঘটনাক্রমে ডেটা হারানো, সিস্টেম ক্র্যাশ বা অন্যান্য যেকোনো বিপর্যয় থেকে রক্ষা করে। PostgreSQL-এ বিভিন্ন ধরনের ব্যাকআপ কৌশল আছে, যা আপনার প্রয়োজন এবং ব্যবহারের ভিত্তিতে নির্বাচন করা যেতে পারে। নিচে PostgreSQL-এ ব্যাকআপ নেওয়ার প্রধান কৌশলগুলি এবং তাদের ব্যবহার ব্যাখ্যা করা হয়েছে।
1. SQL Dump Backup
এটি PostgreSQL-এ ব্যাকআপ নেওয়ার একটি সাধারণ এবং জনপ্রিয় পদ্ধতি। এই পদ্ধতিতে ডেটাবেসের সম্পূর্ণ ডেটা এবং স্কিমা (টেবিল, ভিউ, ইন্ডেক্স ইত্যাদি) একটি SQL ফাইলের মধ্যে স্টোর করা হয়। SQL Dump ব্যাকআপ ব্যবহার করে আপনি ডেটাবেসের সমস্ত ডেটা একটি টেক্সট ফাইল আকারে ধারণ করতে পারেন, যেটি পরে পুনরুদ্ধার করা যাবে।
SQL Dump ব্যাকআপ নেওয়া
- pg_dump কমান্ড ব্যবহার করে SQL dump ব্যাকআপ নেওয়া হয়। এই কমান্ডটি ডেটাবেসের সমস্ত স্কিমা এবং ডেটা SQL ফরম্যাটে একটি ফাইল হিসাবে রপ্তানি করে।
pg_dump -U username -F p dbname > dbname_backup.sql
এখানে:
-U username: PostgreSQL ব্যবহারকারীর নাম।-F p:pএর মাধ্যমে plain SQL ফরম্যাটে ব্যাকআপ নেওয়া হয়।dbname: ডেটাবেসের নাম।
ব্যাকআপের উদাহরণ:
pg_dump -U postgres -F p mydatabase > mydatabase_backup.sql
ব্যাকআপ পুনরুদ্ধার করা
SQL dump ফাইল থেকে ব্যাকআপ পুনরুদ্ধার করতে psql কমান্ড ব্যবহার করা হয়:
psql -U username -d dbname < dbname_backup.sql
2. File System Level Backup (Physical Backup)
এই কৌশলে ডেটাবেসের সমস্ত ফাইল সিস্টেমের স্তরে কপি করা হয়, যার মাধ্যমে সমস্ত ডেটাবেসের ফাইল এবং সিস্টেমের স্টেট রক্ষিত থাকে। এটি pg_data ডিরেক্টরির পূর্ণ ব্যাকআপ নেয়, যা PostgreSQL ডেটাবেসের সমস্ত ফাইল ধারণ করে।
File System Level Backup নেওয়া
PostgreSQL সার্ভার স্টপ করুন:
sudo systemctl stop postgresqlpg_dataডিরেক্টরির সমস্ত ফাইল কপি করুন:cp -r /var/lib/pgsql/data /path/to/backup/directoryPostgreSQL সার্ভার আবার চালু করুন:
sudo systemctl start postgresql
ব্যাকআপ পুনরুদ্ধার করা
ফাইল সিস্টেম লেভেল ব্যাকআপ থেকে পুনরুদ্ধারের জন্য, ব্যাকআপ কপি করা ফাইলগুলি আবার pg_data ডিরেক্টরিতে কপি করে সার্ভারটি রিস্টার্ট করতে হবে।
cp -r /path/to/backup/directory/* /var/lib/pgsql/data
sudo systemctl start postgresql
3. pg_basebackup
pg_basebackup হল PostgreSQL এর একটি টুল যা ফিজিক্যাল ব্যাকআপ তৈরি করতে ব্যবহৃত হয়। এটি বিশেষ করে রেপ্লিকেশন ব্যবস্থায় ব্যবহৃত হয়, যেখানে স্লেভ সার্ভারে একটি ব্যাকআপ নেওয়া হয়।
pg_basebackup ব্যাকআপ নেওয়া
pg_basebackup -D /path/to/backup/directory -F tar -z -P -U username
এখানে:
-D /path/to/backup/directory: ব্যাকআপ ফাইল সংরক্ষণ করতে যেখানে স্থান দেওয়া হবে।-F tar: ব্যাকআপটি.tarফরম্যাটে সংরক্ষণ করা হবে।-z: ব্যাকআপ ফাইলটি জিপ করা হবে।-P: প্রগ্রেস ইনফরমেশন দেখাবে।-U username: PostgreSQL ব্যবহারকারীর নাম।
ব্যাকআপ পুনরুদ্ধার করা
ব্যাকআপ পুনরুদ্ধার করতে, pg_basebackup এর মাধ্যমে তৈরি করা ব্যাকআপ ডিরেক্টরির সমস্ত ফাইলকে pg_data ডিরেক্টরিতে কপি করতে হবে। এরপর PostgreSQL সার্ভার রিস্টার্ট করতে হবে।
cp -r /path/to/backup/directory/* /var/lib/pgsql/data
sudo systemctl start postgresql
4. Continuous Archiving (WAL Archiving)
PostgreSQL-এ Write-Ahead Logging (WAL) ব্যবহার করা হয় যা প্রতিটি ট্রানজেকশন রেকর্ডের একটি লগ তৈরি করে। এই WAL ফাইলগুলির সাহায্যে আপনি ইনক্রিমেন্টাল ব্যাকআপ নিতে পারেন এবং ডেটাবেসের কোনো পরিবর্তন বা ট্রানজেকশন মিস না হওয়ার নিশ্চয়তা দিতে পারেন।
WAL Archiving কনফিগারেশন
PostgreSQL কনফিগারেশন ফাইলে
archive_modeএবংarchive_commandসেট করতে হবে:postgresql.confফাইলে:
archive_mode = on archive_command = 'cp %p /path/to/archive/%f'pg_walডিরেক্টরি থেকে সমস্ত WAL ফাইল আর্কাইভ করা হবে এবং তা ব্যাকআপ ফোল্ডারে সংরক্ষিত থাকবে।
ব্যাকআপ পুনরুদ্ধার করা
WAL ফাইলগুলির সাহায্যে ব্যাকআপ পুনরুদ্ধার করা যায়, যা restore_command ব্যবহার করে আগের স্থানে ফেরত আনা হয়।
5. Hot Standby / Replication Based Backup
PostgreSQL-এ হট স্ট্যান্ডবাই রেপ্লিকেশন কনফিগারেশন দ্বারা একটি স্লেভ সার্ভারে একটি ব্যাকআপ তৈরি করা যায়। এটি মূল সার্ভারের ট্রানজেকশন লগের মাধ্যমে ডেটা সিঙ্ক্রোনাইজ করতে সহায়তা করে এবং স্লেভ সার্ভারকে একটি কপি হিসেবে রেখে ডেটা ব্যাকআপ করা হয়।
হট স্ট্যান্ডবাই কনফিগারেশন:
- Primary Server (Master):
postgresql.confএবংpg_hba.confফাইল কনফিগার করা হয়।
- Secondary Server (Replica):
- Replica সার্ভারে
pg_basebackupব্যবহার করে ব্যাকআপ নেওয়া হয় এবং সেটি হট স্ট্যান্ডবাই হিসেবে কনফিগার করা হয়।
- Replica সার্ভারে
সারাংশ
PostgreSQL-এ ব্যাকআপ নেওয়ার জন্য বিভিন্ন কৌশল রয়েছে, যেমন:
- SQL Dump: টেবিল এবং ডেটার একটি টেক্সট ফাইল হিসাবে ব্যাকআপ।
- File System Level Backup: PostgreSQL ডেটাবেসের সম্পূর্ণ ডেটা ফাইলের কপি তৈরি করা।
- pg_basebackup: ফিজিক্যাল ব্যাকআপ যা রেপ্লিকেশন ব্যবস্থায় ব্যবহৃত হয়।
- WAL Archiving: ইনক্রিমেন্টাল ব্যাকআপ এবং ডেটা পুনরুদ্ধার করার জন্য ব্যবহার করা হয়।
- Hot Standby / Replication Based Backup: রেপ্লিকেশন কনফিগারেশন থেকে স্লেভ সার্ভারে ব্যাকআপ নেওয়া হয়।
প্রতিটি কৌশল তার নিজস্ব সুবিধা এবং ব্যবহারের ক্ষেত্র অনুযায়ী বেছে নেওয়া যেতে পারে। SQL Dump সাধারণত ছোট ডেটাবেসের জন্য, pg_basebackup এবং WAL Archiving বৃহৎ ডেটাবেসের জন্য কার্যকর।
PostgreSQL-এ pg_dump এবং pg_restore হল দুটি অত্যন্ত গুরুত্বপূর্ণ টুল যা ডেটাবেসের ব্যাকআপ নেওয়া এবং পুনরুদ্ধারের জন্য ব্যবহৃত হয়। এগুলি ডেটাবেস পরিচালনার ক্ষেত্রে ব্যাকআপ এবং রিস্টোর প্রক্রিয়া সহজ এবং নিরাপদ করে।
1. pg_dump — ব্যাকআপ নেওয়া
pg_dump একটি PostgreSQL ডেটাবেসের ব্যাকআপ তৈরির জন্য ব্যবহৃত হয়। এটি ডেটাবেসের সকল তথ্য (টেবিল, ডেটা, স্কিমা, ফাংশন ইত্যাদি) একটি ফাইলের মধ্যে সংরক্ষণ করে, যা পরবর্তীতে রিস্টোর (পুনরুদ্ধার) করা যেতে পারে।
pg_dump এর সাধারণ গঠন:
pg_dump -U username -d database_name -f backup_file.sql
- username: PostgreSQL ব্যবহারকারীর নাম।
- database_name: যে ডেটাবেসটির ব্যাকআপ নিতে চান তার নাম।
- backup_file.sql: যেখানে ব্যাকআপ ফাইলটি সংরক্ষণ করা হবে।
উদাহরণ:
pg_dump -U postgres -d my_database -f my_database_backup.sql
এই কুয়েরিটি my_database ডেটাবেসের একটি ব্যাকআপ তৈরি করবে এবং সেটি my_database_backup.sql ফাইলে সংরক্ষণ করবে।
pg_dump এর অন্যান্য অপশন:
- -F c: কাস্টম ফরম্যাট (যা পুনরুদ্ধারের জন্য আরও বেশি সুবিধাজনক)
- -F t: টার (TAR) ফরম্যাট
- -F p: প্লেইন SQL ফরম্যাট (ডিফল্ট)
- -C: ডেটাবেসের তৈরি কমান্ডও ব্যাকআপে অন্তর্ভুক্ত করবে
- -v: ভার্বোস মোডে আরও বিস্তারিত আউটপুট দেখাবে
উদাহরণ 1: কাস্টম ফরম্যাটে ব্যাকআপ নেওয়া
pg_dump -U postgres -d my_database -F c -f my_database_backup.dump
এটি my_database ডেটাবেসের একটি কাস্টম ফরম্যাট ব্যাকআপ তৈরি করবে যা পুনরুদ্ধারের জন্য বেশি উপকারী।
উদাহরণ 2: ডেটাবেস স্কিমা (structure) ব্যাকআপ
pg_dump -U postgres -d my_database -s -f my_database_schema_backup.sql
এটি my_database ডেটাবেসের শুধু স্কিমা (টেবিল, ভিউ, ফাংশন ইত্যাদি) ব্যাকআপ করবে, ডেটা নয়।
2. pg_restore — ব্যাকআপ রিস্টোর করা
pg_restore হল একটি টুল যা pg_dump দ্বারা তৈরি কাস্টম বা টার ফরম্যাট ব্যাকআপ ফাইল থেকে ডেটাবেস পুনরুদ্ধার (restore) করার জন্য ব্যবহৃত হয়।
pg_restore এর সাধারণ গঠন:
pg_restore -U username -d database_name backup_file.dump
- username: PostgreSQL ব্যবহারকারীর নাম।
- database_name: ডেটাবেসের নাম যেখানে ব্যাকআপ রিস্টোর করতে চান।
- backup_file.dump: ব্যাকআপ ফাইল যা আপনি পুনরুদ্ধার করতে চান।
উদাহরণ:
pg_restore -U postgres -d my_database my_database_backup.dump
এই কুয়েরি my_database_backup.dump ফাইল থেকে ডেটাবেস my_database-এ ব্যাকআপ রিস্টোর করবে।
pg_restore এর অন্যান্য অপশন:
- -C: ডেটাবেসটি তৈরি করার সময় একটি নতুন ডেটাবেস তৈরি করবে
- -v: ভার্বোস মোডে আউটপুট দেখাবে
- -d: রিস্টোর করার ডেটাবেসের নাম
- -F c: কাস্টম ফরম্যাট ব্যাকআপ ফাইল
- -l: ব্যাকআপের উপাদানগুলির তালিকা দেখতে
- -t: নির্দিষ্ট টেবিল রিস্টোর করতে
উদাহরণ 1: একটি নির্দিষ্ট টেবিল রিস্টোর করা
pg_restore -U postgres -d my_database -t my_table my_database_backup.dump
এটি কেবল my_table টেবিলটি রিস্টোর করবে।
উদাহরণ 2: নতুন ডেটাবেস তৈরি করে রিস্টোর করা
pg_restore -U postgres -C -d postgres my_database_backup.dump
এটি postgres ডেটাবেস থেকে my_database নামক একটি নতুন ডেটাবেস তৈরি করবে এবং তার মধ্যে ব্যাকআপটি রিস্টোর করবে।
3. pg_dump এবং pg_restore এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | pg_dump | pg_restore |
|---|---|---|
| ব্যবহার | ডেটাবেসের ব্যাকআপ তৈরি করা | ব্যাকআপ থেকে ডেটাবেস রিস্টোর করা |
| ফাইল আউটপুট | SQL স্ক্রিপ্ট বা কাস্টম/টার ফরম্যাট ফাইল | কাস্টম/টার ফরম্যাট থেকে ডেটাবেস পুনরুদ্ধার |
| ফরম্যাট | SQL, কাস্টম, টার ফরম্যাটে ব্যাকআপ তৈরি | কাস্টম বা টার ফরম্যাট ফাইল পুনরুদ্ধার করে |
| ইনডেক্সিং ও ডেটা | ডেটাবেসের ডেটা, স্কিমা, ইনডেক্স ব্যাকআপ নেয় | কাস্টম ব্যাকআপ ফাইল থেকে ইনডেক্স ও ডেটা রিস্টোর করে |
| কাস্টম ফরম্যাট | কাস্টম ফরম্যাটে ব্যাকআপ নেয় | কাস্টম ফরম্যাট ফাইল থেকে পুনরুদ্ধার করে |
সারাংশ
- pg_dump: PostgreSQL ডেটাবেসের ব্যাকআপ তৈরি করার জন্য ব্যবহৃত হয় এবং এটি বিভিন্ন ফরম্যাটে ব্যাকআপ ফাইল তৈরি করতে পারে। এটি একটি ডেটাবেসের তথ্য, স্কিমা, বা দুটি কম্বিনেশনও ব্যাকআপ নিতে পারে।
- pg_restore: pg_dump দ্বারা তৈরি ব্যাকআপ ফাইল থেকে ডেটাবেস পুনরুদ্ধার করার জন্য ব্যবহৃত হয়। এটি কাস্টম বা টার ফরম্যাট ব্যাকআপ ফাইল পুনরুদ্ধার করতে সক্ষম।
এই দুটি টুল ব্যবহার করে আপনি PostgreSQL ডেটাবেসের ব্যাকআপ এবং পুনরুদ্ধার প্রক্রিয়াকে সহজ এবং নিরাপদ করতে পারেন।
Point-in-Time Recovery (PITR) হল PostgreSQL এর একটি শক্তিশালী বৈশিষ্ট্য যা ডেটাবেসের একটি নির্দিষ্ট সময়ে ডেটা পুনরুদ্ধার করতে সাহায্য করে। এটি সাধারণত ব্যাকআপ এবং ট্রানজেকশন লগ (WAL - Write-Ahead Logging) ব্যবহারের মাধ্যমে কার্যকর হয়। PITR ব্যবহৃত হয় যখন আপনাকে একটি নির্দিষ্ট সময়ের পরে ডেটাবেস পুনরুদ্ধার করতে হয়, যেমন যদি কোনো ডেটা মুছে যায় বা ভুল ডেটা ইনসার্ট হয়ে যায়।
PITR কনফিগারেশন করা সাধারণত দুইটি প্রধান পদক্ষেপের মাধ্যমে করা হয়:
- Base Backup: একটি স্ন্যাপশট বা ব্যাকআপ তৈরি করা যা সিস্টেমের বর্তমান অবস্থা প্রতিফলিত করে।
- WAL Archiving: ট্রানজেকশন লগগুলি সংরক্ষণ করা, যাতে সেগুলি ব্যবহার করে নির্দিষ্ট সময়ের পরে ডেটাবেস পুনরুদ্ধার করা যায়।
1. PITR কনফিগারেশনের জন্য প্রস্তুতি
a. Base Backup তৈরি করা
Base Backup হল ডেটাবেসের বর্তমান অবস্থা বা স্ন্যাপশট যা পরে পুনরুদ্ধার করা হবে।
Pg_basebackup ব্যবহার করে Base Backup তৈরি করা:
PostgreSQL
pg_basebackupটুল ব্যবহার করে Base Backup তৈরি করা যায়। এটি ডেটাবেসের একটি সম্পূর্ণ ব্যাকআপ তৈরি করে এবং ট্রানজেকশন লগগুলি সংগ্রহ করে। এটি ব্যাকআপ প্রক্রিয়া সহজতর করে।pg_basebackup -D /path/to/backup_directory -Ft -z -Pএখানে:
-D: ব্যাকআপের জন্য ডিরেক্টরি নির্ধারণ করে।-Ft: টার্বাল আর্কাইভ ফরম্যাট ব্যবহার করে ব্যাকআপ তৈরি করে।-z: ব্যাকআপ ফাইলটি জিপ করে।-P: প্রগ্রেস বার দেখানোর জন্য।
Backups Directory: ব্যাকআপগুলি কোথায় রাখা হবে তার জন্য একটি ডিরেক্টরি তৈরি করতে হবে। উদাহরণ:
mkdir -p /var/lib/postgresql/backups pg_basebackup -D /var/lib/postgresql/backups -Ft -z -PPostgreSQL Configuration: Base Backup এর আগে আপনার PostgreSQL কনফিগারেশনটি সঠিকভাবে সেট করতে হবে।
/etc/postgresql/{version}/main/postgresql.confফাইলে নিম্নলিখিত কনফিগারেশন পরিবর্তন করুন:wal_level = replica archive_mode = on archive_command = 'cp %p /path_to_archive/%f'এখানে:
wal_level = replica: ট্রানজেকশন লগ তৈরি করতে বাধ্য করে।archive_mode = on: WAL আর্কাইভিং সক্ষম করে।archive_command: আর্কাইভ করা ট্রানজেকশন লগগুলি সংরক্ষণ করতে কাস্টম কমান্ড নির্ধারণ করা হয়।
b. WAL Archiving
WAL (Write-Ahead Logging) ট্রানজেকশন লগগুলি ট্রানজেকশন ইনসার্ট, আপডেট, বা ডিলিট হওয়ার পর ডেটাবেসে সঞ্চিত ডেটাকে সংরক্ষণ করে। PITR এ সফলভাবে কাজ করার জন্য, WAL আর্কাইভিং সেটআপ করা আবশ্যক।
Archive Directory: WAL আর্কাইভের জন্য একটি ডিরেক্টরি তৈরি করুন যেখানে ট্রানজেকশন লগ সংরক্ষিত হবে:
mkdir -p /path_to_archivePostgreSQL Configuration:
postgresql.confফাইলে WAL আর্কাইভিং সিস্টেম কনফিগার করুন:archive_mode = on archive_command = 'cp %p /path_to_archive/%f'এখানে
archive_commandট্রানজেকশন লগ ফাইলের জন্য কমান্ড নির্ধারণ করে।
2. PITR জন্য Recovery Configuration
a. recovery.conf ফাইল তৈরি করা
PostgreSQL এ PITR কনফিগারেশন করার জন্য recovery.conf ফাইলের প্রয়োজন হয়। এটি ডেটাবেসের জন্য পুনরুদ্ধারের সময় কাঙ্ক্ষিত সেটিংস নির্ধারণ করে।
recovery.conf ফাইল তৈরি:
recovery.confফাইলটি ব্যাকআপের ডিরেক্টরিতে রাখা উচিত। আপনি এই ফাইলটিতে নির্দিষ্ট করে দিতে পারেন যে কবে থেকে ডেটাবেস পুনরুদ্ধার করতে হবে এবং WAL এর আর্কাইভ ডিরেক্টরি কোথায়।উদাহরণস্বরূপ:
restore_command = 'cp /path_to_archive/%f %p' recovery_target_time = '2023-11-10 15:30:00' -- আপনার কাঙ্ক্ষিত সময় উল্লেখ করুনএখানে:
restore_command: এটি WAL ফাইলগুলিকে পুনরুদ্ধার করার জন্য ব্যবহৃত কমান্ড।recovery_target_time: আপনাকে যে সময়ে পুনরুদ্ধার করতে হবে, সেই সময় নির্ধারণ করে।
recovery.conf ফাইল স্থাপন:
recovery.confফাইলটি আপনার PostgreSQL ডেটাবেসের ডিরেক্টরিতে রাখুন:cp recovery.conf /var/lib/postgresql/data
b. Restarting PostgreSQL
PostgreSQL পুনরায় চালু করা: পুনরুদ্ধার প্রক্রিয়া শুরু করতে PostgreSQL সার্ভার পুনরায় চালু করুন:
pg_ctl restart -D /var/lib/postgresql/data- Recovery Process: PostgreSQL ট্রানজেকশন লগ থেকে ডেটা পুনরুদ্ধার করবে এবং পুনরুদ্ধার প্রক্রিয়া শেষ হলে
recovery.confফাইলটি স্বয়ংক্রিয়ভাবে মুছে ফেলবে।
3. PITR প্রক্রিয়া শেষে
a. Recovery Monitoring
ডেটাবেস পুনরুদ্ধার প্রক্রিয়ার সময়, PostgreSQL এর লগ ফাইল চেক করা গুরুত্বপূর্ণ, যাতে নিশ্চিত হওয়া যায় যে সমস্ত WAL লগ ফাইল পুনরুদ্ধার করা হয়েছে।
tail -f /var/log/postgresql/postgresql.log
b. Verifying the Recovery
পুনরুদ্ধার সফল হলে, ডেটাবেসে সেই নির্দিষ্ট সময়ে উপস্থিত ডেটা যাচাই করুন:
SELECT * FROM orders WHERE order_date <= '2023-11-10 15:30:00';
এটি নিশ্চিত করবে যে, পুনরুদ্ধারটি সঠিকভাবে হয়েছে এবং আপনি কাঙ্ক্ষিত সময়ে ডেটাবেসের অবস্থান ফিরে পেয়েছেন।
Conclusion
Point-in-Time Recovery (PITR) হল একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা ডেটাবেসের নির্দিষ্ট সময়ের অবস্থা পুনরুদ্ধার করতে সাহায্য করে। Base Backup এবং WAL Archiving ব্যবহার করে PostgreSQL এ PITR কনফিগারেশন করা যায়। এটি আপনাকে ডেটাবেসে পূর্বের অবস্থায় ফিরে যেতে সাহায্য করে, যেমন যদি কোনো ভুল তথ্য ইনসার্ট হয়ে যায় বা ডেটা ক্ষতি হয়ে যায়। PITR ব্যবহারের মাধ্যমে আপনি একটি নির্দিষ্ট সময়ের পরে ডেটাবেস পুনরুদ্ধার করতে পারেন এবং এর কার্যকরী প্রয়োগ সিস্টেমের স্থায়িত্ব ও নির্ভরযোগ্যতা নিশ্চিত করে।
Automated Backup এবং Recovery Techniques PostgreSQL ডেটাবেসের জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ডেটার সুরক্ষা, ব্যাকআপ নিশ্চিতকরণ এবং দ্রুত পুনরুদ্ধার নিশ্চিত করে। PostgreSQL-এ কিছু উন্নত ব্যাকআপ ও রিকভারি পদ্ধতি রয়েছে, যেগুলি ডেটাবেস অ্যাডমিনিস্ট্রেটরদের জন্য সুবিধাজনক। এখানে Automated Backup এবং Recovery Techniques নিয়ে বিস্তারিত আলোচনা করা হবে।
1. Automated Backup in PostgreSQL
Automated Backup হল একটি প্রক্রিয়া যেখানে ব্যাকআপের কাজ স্বয়ংক্রিয়ভাবে করা হয় নির্দিষ্ট সময়সীমার মধ্যে। PostgreSQL-এ বেশ কিছু পদ্ধতি আছে যেগুলির মাধ্যমে আপনি ব্যাকআপ স্বয়ংক্রিয়ভাবে পরিচালনা করতে পারেন।
a. pg_dump and pg_restore for Backup and Restore
pg_dump হল PostgreSQL-এর সবচেয়ে সাধারণ ব্যাকআপ টুল যা ডেটাবেসের সম্পূর্ণ কপি তৈরি করে। আপনি এটি একে একে কন্ট্রোল করে ব্যাকআপের সময় এবং ফ্রিকোয়েন্সি নির্ধারণ করতে পারেন।
pg_dump-এর মাধ্যমে ব্যাকআপ নেওয়া:
pg_dump -U username -h localhost -F c -b -v -f /path/to/backup/my_database.backup my_database
এখানে:
- -F c: কাস্টম ফরম্যাটে ব্যাকআপ
- -b: বড় অবজেক্টগুলিও ব্যাকআপে অন্তর্ভুক্ত করা
- -v: বর্ননামূলক (verbose) আউটপুট
- -f: ব্যাকআপ ফাইলের নাম এবং লোকেশন
pg_restore দিয়ে ব্যাকআপ পুনরুদ্ধার:
pg_restore -U username -h localhost -d my_database -v /path/to/backup/my_database.backup
b. Automating pg_dump with cron (Linux/Unix)
যেহেতু আপনি PostgreSQL-এ রেগুলার ব্যাকআপ স্বয়ংক্রিয়ভাবে চালাতে চান, আপনি cron jobs ব্যবহার করতে পারেন (Linux বা Unix সিস্টেমে)। এটি নির্দিষ্ট সময়ে ব্যাকআপ ফাইল তৈরির জন্য ব্যবহার করা হয়।
Cron job সেটআপ:
- crontab -e কমান্ড দিয়ে crontab ফাইল এডিট করুন।
নিচের মতো একটি cron job যোগ করুন:
0 2 * * * /usr/bin/pg_dump -U username -h localhost -F c -b -v -f /path/to/backup/my_database_$(date +\%Y\%m\%d).backup my_database
এটি প্রতিদিন রাত ২টায় ব্যাকআপ নেবে এবং ব্যাকআপ ফাইলের নামের সাথে বর্তমান তারিখ যুক্ত করবে।
c. Continuous Archiving and Point-in-Time Recovery (PITR)
PITR হল একটি অত্যন্ত শক্তিশালী ব্যাকআপ পদ্ধতি যা আপনাকে ডেটাবেসের নির্দিষ্ট একটি সময়ের অবস্থায় ফিরে যেতে সাহায্য করে। PostgreSQL এ এটি WAL (Write-Ahead Logging) ফিচার ব্যবহার করে।
- Archiving WAL files:
- PostgreSQL-এ WAL archiving চালু করতে হলে
archive_modeএবংarchive_commandকনফিগার করতে হয়।
- PostgreSQL-এ WAL archiving চালু করতে হলে
archive_mode = on
archive_command = 'cp %p /path/to/archive/%f'
এটি সমস্ত WAL ফাইলকে আর্কাইভে সংরক্ষণ করবে। এই ফাইলগুলো আপনাকে পরে PITR-এর মাধ্যমে পুনরুদ্ধার করতে সহায়তা করবে।
- Restore with PITR:
- PITR ব্যাকআপ পুনরুদ্ধার করতে base backup এবং WAL logs ব্যবহার করতে হয়।
# Step 1: Restore the base backup
pg_restore -U username -h localhost -d my_database /path/to/backup/base_backup
# Step 2: Apply WAL logs to restore the database to a specific point in time
cp /path/to/archive/wal/* /path/to/pg_wal/
- Recovery Target Time:
- আপনি
recovery_target_timeপ্যারামিটার ব্যবহার করে নির্দিষ্ট একটি সময়ের পরে ডেটাবেস পুনরুদ্ধার করতে পারেন।
- আপনি
recovery_target_time = '2024-11-25 03:00:00'
2. Recovery Techniques in PostgreSQL
Recovery Techniques হল ডেটাবেসের পুনরুদ্ধার প্রক্রিয়া, যেখানে pg_restore, WAL, এবং Point-in-Time Recovery (PITR) এর মাধ্যমে ব্যাকআপ থেকে ডেটা ফিরে আনা হয়।
a. Restoring from pg_dump Backup
আপনি যদি pg_dump দিয়ে ব্যাকআপ নিয়ে থাকেন, তবে pg_restore বা psql কমান্ড দিয়ে ডেটাবেস পুনরুদ্ধার করতে পারেন।
- Using pg_restore:
pg_restore -U username -h localhost -d my_database -v /path/to/backup/my_database.backup
- Using psql (SQL dump):
psql -U username -h localhost -d my_database -f /path/to/backup/my_database.sql
b. Restoring from WAL Logs
PostgreSQL WAL logs-এর মাধ্যমে আপনাকে ডেটাবেসকে একটি নির্দিষ্ট সময়ে পুনরুদ্ধার করতে সহায়তা করে।
- Restore Base Backup:
- আপনি যখন base backup তৈরি করেন, তখন শুধুমাত্র WAL ফাইলগুলির মাধ্যমে ডেটাবেস পুনরুদ্ধার করতে হবে।
- Replaying WAL Files:
- WAL ফাইলগুলো পুনরুদ্ধার করতে, আপনার উচিত আর্কাইভ ফোল্ডারে সংরক্ষিত ফাইলগুলো পুনঃপ্রয়োগ করা:
# Copy WAL files back to the pg_wal directory
cp /path/to/archive/wal/* /path/to/pg_wal/
# Restart PostgreSQL
pg_ctl restart -D /path/to/data/directory
- Using
recovery.confFile:- PITR চালু করার জন্য, আপনি একটি
recovery.confফাইল ব্যবহার করতে পারেন যেখানেrestore_commandএবংrecovery_target_timeকনফিগার করতে হয়।
- PITR চালু করার জন্য, আপনি একটি
restore_command = 'cp /path/to/archive/%f %p'
recovery_target_time = '2024-11-25 03:00:00'
c. Restore to a Different Server
Backup & Recovery এর সময় অনেক ক্ষেত্রে আপনাকে ব্যাকআপ ডেটা অন্য একটি সার্ভারে পুনরুদ্ধার করতে হতে পারে। এই অবস্থায়, ব্যাকআপ ফাইলটি অন্য সার্ভারে pg_restore বা psql এর মাধ্যমে পুনরুদ্ধার করা হয়।
# On the target server:
pg_restore -U username -h new_host -d new_database /path/to/backup/my_database.backup
3. Best Practices for Backup and Recovery
- Automate Backups:
- ব্যাকআপ স্বয়ংক্রিয় করতে cron job বা PostgreSQL-র native pg_basebackup এবং pg_dump ব্যবহার করুন।
- Use pgBackRest or Barman for Advanced Backup Solutions:
- যদি আপনি আরও উন্নত ব্যাকআপ এবং রিকভারি কৌশল চান, তবে PostgreSQL-এ pgBackRest বা Barman এর মতো টুলস ব্যবহার করতে পারেন।
- Test Backups Regularly:
- ব্যাকআপগুলো পুনরুদ্ধার করার জন্য নিয়মিত পরীক্ষা করুন। শুধুমাত্র ব্যাকআপ তৈরি করা নয়, পুনরুদ্ধার প্রক্রিয়াটি নিশ্চিত করতে হবে।
- Monitor Backup Process:
- ব্যাকআপ প্রক্রিয়া মনিটর করতে Postgres-এ লগ ফাইল ব্যবহার করুন এবং ব্যাকআপ সময় ফাইলগুলোর অবস্থান নিশ্চিত করুন।
- Consider Compression:
- ব্যাকআপ ফাইলের সাইজ ছোট করতে compression ব্যবহার করুন, বিশেষত যদি বড় ডেটাবেস থাকে।
সারাংশ
PostgreSQL-এ Automated Backup এবং Recovery Techniques ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ ডেটা সুরক্ষা এবং প্রাপ্যতা নিশ্চিত করতে। pg_dump, pg_restore, এবং PITR (Point-in-Time Recovery) পদ্ধতিগুলির মাধ্যমে সহজেই ব্যাকআপ তৈরি এবং পুনরুদ্ধার করা সম্ভব। ট্রিগার সময় নির্ধারণ, সংরক্ষিত WAL ফাইলের ব্যবহার এবং recovery.conf কনফিগারেশন ফাইলের মাধ্যমে পুনরুদ্ধার করা যেতে পারে।
Read more