Point In Time Recovery یا بازیابی لحظهای به مدیران دیتابیس کمک میکند تا مجموعهای از دادهها را که در زمان خاصی از آنها نسخه پشتیبان یا بکاپ تهیه شده را بازگردانند. PITR در واقع یکی از روشهای بازیابی اطلاعات در دیتابیسها است که به شما اجازه میدهد تا پایگاه داده خود را به وضعیت خاصی در گذشته بازگردانید. این وضعیت میتواند لحظهای قبل از وقوع یک خرابی، اشتباه کاربری، یا هر نوع حادثهای باشد که باعث از دست رفتن یا خراب شدن دادهها شده است. PITR اغلب در سیستمهای مدیریت دیتابیس مانند PostgreSQL، مونگودیبی، MySQL و Oracle استفاده میشود.
مراحل PITR
- پشتیبانگیری کامل: ابتدا یک بکاپ کامل از پایگاه داده تهیه میشود. این بکاپ شامل تمامی دادهها و متا-دادههای پایگاه داده است.
- آرشیو لاگها: بعد از تهیه پشتیبانگیری کامل، تمامی تغییرات بعدی در پایگاه داده در لاگها (مانند WAL در PostgreSQL) ذخیره میشوند. این لاگها باید به صورت منظم و پیوسته ذخیره شوند تا اطمینان حاصل شود که تمامی تغییرات ثبت میشوند.
- بازیابی به نقطه خاص: در صورت نیاز به بازیابی، ابتدا پشتیبانگیری کامل بازگردانده میشود. سپس لاگهای ذخیرهشده اعمال میشوند تا پایگاه داده به وضعیت خاصی در گذشته بازگردانده شود. این وضعیت خاص میتواند براساس زمان (برای مثال یک ماه پیش) یا حادثه خاص (برای مثال قبل از حذف یک جدول توسط کاربر) تعیین شود.
اسنپشات (Snapshot) در PITR
در زمینه بازیابی لحظهای (PITR) در پایگاه دادهها، اصطلاح snapshot به یک کپی فوری و ثابت از وضعیت دیتابیس در یک لحظه خاص اشاره دارد. این کپی شامل تمامی دادهها، جداول، ایندکسها و متادیتاهای مربوط به دیتابیس در آن لحظه است. snapshotها به عنوان نقطه شروع بازیابی استفاده میشوند و به شما اجازه میدهند تا پایگاه داده را به وضعیت خاصی بازگردانید. اسنپشاتها Read-only هستند و نمیتوان بهصورت دستی در آنها مقدار جدیدی را وارد کرد.
نقش snapshot در PITR:
- نقطه شروع بازیابی: snapshot به عنوان نقطه شروع برای بازیابی استفاده میشود. به عبارت دیگر، زمانی که نیاز به بازیابی دیتابیس به یک نقطه خاص دارید، ابتدا snapshot بازگردانده میشود و سپس تغییرات بعدی اعمال میشود.
- پشتیبانگیری ثابت و کامل: snapshot یک پشتیبانگیری ثابت و کامل از پایگاه داده است که تمامی دادهها و ساختارهای مربوط به آن را شامل میشود. این پشتیبانگیری به شما اطمینان میدهد که میتوانید در صورت نیاز، پایگاه داده را به وضعیت دقیقی که در لحظه تهیه snapshot داشت، بازگردانید.
- ترکیب با WAL: در روش PITR، اسنپشات با لاگهای WAL (Write-Ahead Logging) ترکیب میشود. پس از بازگرداندن snapshot، لاگهای WAL اعمال میشوند تا پایگاه داده به نقطه زمانی مورد نظر برسد. این فرآیند به شما امکان میدهد تا تغییرات بین زمان تهیه snapshot و زمان هدف بازیابی را اعمال کنید.
منظور از WAL در مورد سوم تکنیکی است که در دیتابیسهای مختلف به منظور افزایش قابلیت اطمینان و بازیابی اطلاعات در صورت وقوع خرابی استفاده میشود. در این تکنیک، تمامی تغییراتی که قرار است در پایگاه داده اعمال شوند، ابتدا به صورت یک لاگ دائمی نوشته میشوند.
پیادهسازی PITR در PostgreSQL با استفاده از Timelines
Timelines ابزاری قدرتمند برای بازیابی و مدیریت نسخههای مختلف دیتابیس است که میتواند قابلیت PITR را بهسادگی در PostgreSQL پیادهسازی کند. Timelines به شما اجازه میدهد تا تاریخچه تغییرات و انشعابات مختلف در دیتابیس را مدیریت کنید. این ویژگی به خصوص در مواردی مفید است که نیاز به بازیابی دادهها به وضعیت خاصی در گذشته دارید یا میخواهید تغییرات مختلف را بررسی کنید.
مراحل استفاده از PITR با Timelines در PostgreSQL:
- تهیه پشتیبان کامل: ابتدا یک پشتیبان کامل از پایگاه داده تهیه میشود. این پشتیبان میتواند به صورت یک snapshot از وضعیت فعلی پایگاه داده باشد.
pg_basebackup -D /var/lib/postgresql/data -Ft -z -P -X stream
- فعالسازی Archive Mode: فایل تنظیمات (PostgreSQL (
postgresql.conf
را باز کرده و موارد زیر را تنظیم کنید:
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/archive/%f'
wal_level = replica
max_wal_senders = 3
- ذخیره و آرشیو WAL (Write-Ahead Logging): پس از فعالسازی archive mode، تمامی تغییرات بعدی در پایگاه داده در فایلهای WAL ذخیره و آرشیو میشوند. این فایلها باید به صورت منظم در یک محل امن ذخیره شوند.
- ایجاد Timeline جدید: وقتی که نیاز به بازیابی به نقطه خاصی دارید، ابتدا باید پایگاه داده را خاموش کنید و سپس پشتیبانگیری کامل را بازگردانید. پس از آن، فایلهای WAL تا نقطه زمانی مورد نظر اعمال میشوند. برای این کار، میتوانید از ابزار
pg_restore
استفاده کنید.
pg_ctl stop -D /var/lib/postgresql/data
pg_ctl start -D /var/lib/postgresql/data -P
- بازگردانی پایگاه داده به نقطه زمانی خاص: فایلهای WAL را تا نقطه زمانی مورد نظر اعمال کنید. برای این کار، باید فایل
recovery.conf
را تنظیم کنید.
restore_command = 'cp /var/lib/postgresql/archive/%f %p'
recovery_target_time = '2024-06-10 12:34:56'
پس از تنظیم recovery.conf
، پایگاه داده را دوباره راهاندازی کنید. PostgreSQL به صورت خودکار لاگها را اعمال میکند و پایگاه داده را به نقطه زمانی مورد نظر بازمیگرداند.
pg_ctl start -D /var/lib/postgresql/data
مزایای استفاده از PITR
- کاهش از دست رفتن دادهها: با امکان بازیابی به نقطهای در گذشته، از دست رفتن دادهها به حداقل میرسد.
- انعطافپذیری: شما میتوانید پایگاه داده را به هر لحظهای در گذشته که لاگها موجود هستند، بازیابی کنید.
- بهبود امنیت دادهها: در صورت وقوع خرابیهای نرمافزاری یا اشتباهات انسانی، میتوانید به سرعت دادهها را بازیابی کنید.
PITR در دیتابیس مدیریتشده همروش
دیتابیس مدیریتشده همروش با هدف سادهسازی فرایند راهاندازی و نگهداری از دیتابیسها ارائه شده است. یکی از ویژگیهای کاربردی این سرویس PITR یا بکاپ و بازیابی لحظهای است که با استفاده از آن شما میتوانید در فاصلههای زمانی دلخواه پشتیبانهایی از دادههایتان تهیه کنید و در صورت نیاز به بازیابی، به راحتی دادههای خود را به هر لحظه از گذشته بازگردانی نمایید.
جمعبندی
PITR تکنیکی مهم در مدیریت دیتابیس است که به سازمانها کمک میکند تا در مواقع بحرانی دادههای خود را به سرعت و با حداقل از دست رفتن اطلاعات بازیابی کنند. با پیادهسازی صحیح PITR، شما میتوانید از دادههای خود در برابر خرابیهای غیرمنتظره محافظت کنید.