بکاپ گیری از PostgreSQL

چگونه از پایگاه داده PostgreSQL بکاپ گیری کنیم؟

زمانی که شما اطلاعات حیاتی و حساسی را در اختیار دارید، باید به نحوی بتوانید از آن ها در برابر تهدیدهای خارجی محافظت کنید. یکی از مهمترین اقداماتی که در این راه می توانید انجام دهید، گرفتن بکاپ یا پشتیبان از اطلاعات خود است. از این رو بحث پشتیبان گیری و پشتیبان گیری ابری به مهمترین بحث ها در زمینه کار با پایگاه داده ها بدل شده است.
حال اگر از یک پایگاه داده PostgreSQL استفاده می کنید، لازم است تا به صورت کامل با نحوه بکاپ گیری از آن آشنا شوید. مهم نیست که این پایگاه داده شما تا چه اندازه بزرگ و یا کوچک است، آشنایی با بکاپ PostgreSQL در این حالت برای شما اهمیت زیادی دارد. ما در ادامه به صورت کامل در خصوص این مورد صحبت خواهیم کرد.

لیست موضوعات و آموزش های این مقاله:

پایگاه داده PostgreSQL چیست؟

PostgreSQL را می توان یک سیستم مدیریت پایگاه داده دانست که به صورت رایگان و متن باز در اختیار کاربران قرار گرفته است. این سیستم مبتنی بر SQL بوده و از SQL و JSON برای پرس و جوهای رابطه ای و غیر رابطه ای خود استفاده می کند. به کمک PostgreSQL می توانید تا انواع مختلف اطلاعات پیشرفته و ویژگی های بهینه سازی عملکرد را به کار گرفته که تنها در پایگاه داده های تجاری و گران قیمتی مانند Oracle و SQL Server وجود دارد.

برای آشنایی بیشتر با پایگاه داده PostgreSQL به صفحه مشخص شده مراجعه کنید.

آشنایی با PostgreSQL

آشنایی با گرفتن بکاپ PostgreSQL

PostgreSQL جهت گرفتن بکاپ از پایگاه داده خود، ابزاری با نام pg_dump را به کاربران خود ارائه می دهد. این ابزار قادر است تا یک فایل پایگاه داده با دستورات SQL را در قالبی به شما ارائه کند تا در آینده به راحتی بتوانید مراحل بازیابی اطلاعات خود را دنبال کنید. برای تهیه نسخه پشتیبان از پایگاه داده PostgreSQL، در ابتدا نیاز است تا به سرور پایگاه داده خود وارد شوید.

حال نیاز است تا به حساب کاربری Postgres خود رفته و pg_dump را به صورت زیر اجرا کنید. (توجه کنید که در این مثال، شما باید نام پایگاه داده ای را که می خواهید از آن نسخه پشتیبان تهیه کنید را جایگزین tecmintdb کنید.) به صورت پیش فرض، فرمت خروجی شما یک فایل اسکریپت SQL متن ساده است.

$ pg_dump tecmintdb > tecmintdb.sql

pg_dump قادر است تا از فرمت های خروجی دیگری نیز پشتیبانی کند. می توانید با استفاده از گزینه –F فرمت خروجی دیگری را مشخص کنید. در این حالت c به معنای فایل بایگانی با فرمت سفارشی شما، d به معنای آرشیو فرمت دایرکتوری و t به معنای فایل بایگانی با فرمت tar است. همه فرمت ها برای ورود به pg_restore مناسب خواهند بود. برای درک بیشتر به مثال زیر توجه کنید:

$ pg_dump -F c tecmintdb > tecmintdb.dump

یا

$ pg_dump -F t tecmintdb > tecmintdb.tar

در ادامه مراحل بکاپ گرفتن از PostgreSQL جهت حذف خروجی در فرمت خروجی دایرکتوری، می توانید از فلگ –f (که برای تعیین فایل خروجی استفاده می شود) استفاده کنید. بدین صورت به جای فایل، فهرست هدف را مشخص خواهید کرد. توجه داشته باشید دایرکتوری که توسط pg_dump ایجاد می شود، نباید وجود داشته باشد.

$ pg_dump -F d tecmintdb -f tecmintdumpdir

برای دریافت بکاپ PostgreSQL از تمامی پایگاه داده، می توانید از ابزار pg_dumpall، همانطور که در قسمت زیر نشان داده ایم، استفاده کنید:

$ pg_dumpall > all_pg_dbs.sql

آموزش نحوه بازیابی پایگاه داده PostgreSQL

حال که با نحوه بکاپ گیری PostgreSQL آشنا شدید، زمان آن رسیده است تا با بازیابی یا Restore پایگاه داده PostgreSQL نیز آشنا شوید. برای بازیابی پایگاه داده PostgreSQL می توانید از ابزارهای psql یا pg_restore استفاده کنید. اگر شما قصد داشته باشید تا فایل های متنی ایجاد شده توسط pg_dump را بازیابی کنید، لازم است تا از ابزار psql کمک بگیرید. این در حالی است که ابزار pg_restore برای بازیابی فایل های ایجاد شده در آرشیو توسط pg_dump که دارای فرمت های غیرمتنی ساده مانند سفارشی، tar و یا فهرست هستند، قابلیت استفاده را دارد.

ما در این قسمت مثالی از نحوه بازیابی فایل متنی ساده Dump را به شما ارائه کرده ایم:

$ psql tecmintdb < tecmintdb.sql

همانطور که در قسمت بالا نیز اشاره کردیم، یک Dump گزینه ای مناسب جهت بازیابی یک فرمت سفارشی اسکریپت برای pgsql نیست. از این رو باید از pg_restore به صورتی که در زیر مثال زده ایم، استفاده کنید:

$ pg_restore -d tecmintdb tecmintdb.dump

یا

$ pg_restore -d tecmintdb tecmintdb.tar

یا

$ pg_restore -d tecmintdb tecmintdumpdir

آشنایی با نحوه بکاپ PostgreSQL برای پایگاه داده های بزرگ

ممکن است پایگاه داده PostgreSQL شما بزرگتر از آن چیزی باشد که فایل خروجی ساده ای را به شما بازگرداند. حال اگر پایگاه داده ای که از آن نسخه پشتیبان تهیه کرده اید بزرگ است اما می خوهید تا یک فایل خروجی نسبتا کوچکتر ایجاد کنید، می توانید یک Dump فشرده را اجرا کنید. در این Dump فشرده باید خروجی pg_dump را به کمک یک ابزار فشرده سازی مانند gzip و یا هر ابزار دیگری که مدنظر دارید، فیلتر کنید. برای درک بیشتر به مثال زیر توجه کنید:

$ pg_dump tecmintdb | gzip > tecmintdb.gz

اکنون اگر قصد گرفتن بکاپ از یک پایگاه داده بسیار بزرگتر PostgreSQL را دارید، می توانید با حذف همزمان جداول number_of_jobs و با استفاده از فلگ –j، به صورت همزمان و موازی، همانطور که در قسمت زیر گفته شده است، مسیر خود را ساده تر کنید:

$ pg_dump -F d -j 5 -f tecmintdumpdir

نکته مهمی که در این قسمت باید به آن توجه کرد این است که گزینه dump می تواند زمان dump را کاهش دهد؛ اما از سوی دیگر بار بیشتری را روی سرور پایگاه داده اضافه می کند.

پشتیبان گیری از پایگاه داده PostgreSQL از راه دور

حال ممکن است قصد داشته باشید تا از راه دور بکاپ PostgreSQL بگیرید. در این حالت نیاز است تا از ابزار pg_dump استفاده کنید. pg_dump یک ابزار معمولی در پایگاه داده PostgreSQL بوده که می تواند از عملیات روی سرورهای پایگاه داده از راه دور، پشتیبانی کند. اکنون برای تعیین سرور پایگاه داده از راه دوری که pg_dump قصد تماس با آن را دارد، باید از گزینه های خط فرمان –h برای تعیین میزبان راه دور و –p برای پورت از راه دوری که سرور پایگاه داده باید به آن گوش دهد، استفاده کنید.

علاوه بر این موارد، جهت بکاپ گیری PostgreSQL از راه دور، نیاز است تا از یک فلگ  -U نیز برای تعیین نام نقش پایگاه داده برای اتصال بهره ببرید. (توجه کنید که در این مثال، باید 10.10.20.10 و 5432 و tecmintdb را به ترتیب با آدرس IP میزبان راه دور یا نام میزبان، پورت پایگاه داده و نام پایگاه داده خود جایگزین کنید.)

$ pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

البته باید اطمینان حاصل کنید کاربری که از راه دور قصد اتصال به شما را دارد، از امتیازات لازم جهت دسترسی به پایگاه داده برخوردار باشد. همچنین لازم است تا روش احراز هویت مناسب پایگاه داده روی سرور پایگاه داده، پیکربندی شده باشد. در صورتی که این موارد را رعایت نکنید، با خطایی به مانند خطای زیر مواجه خواهید شد:

خطا در بکاپ گیری پستگرس

البته که این شانس برای شما وجود دارد که یک پایگاه داده را مستقیما از یک سرور به سرور دیگری انتقال دهید. همانطور که در مثال زیر نیز به آن اشاره کرده ایم، برای این کار لازم است تا از ابزارهای pg_dump و psql استفاده کنید.

$ pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

پشتیبان گیری خودکار از پایگاه داده PostgreSQL با استفاده از Cron Job

جهت گرفتن بکاپ دیتابیس PostgreSQL این امکان برای کاربران وجود دارد تا با استفاده از cron job ها در فواصل زمانی معینی، عملیات پشتیبان گیری را به صورت خودکار انجام دهند. cron job ابزاری است که معمولا برای زمان بندی انواع مختلف وظایف جهت اجرا روی سرور، مورد استفاده قرار می گیرد. شما می توانید یک cron job را برای خودکار سازی پشتیبان گیری از پایگاه داده PostgreSQL به صورت زیر پیکربندی کنید. توجه داشته باشید که باید دستورات زیر را به عنوان superuser PostgreSQL اجرا کنید:

$ mkdir -p /srv/backups/databases

بعد از اجرای این دستور، لازم است تا دستور زیر را اجرا کرده تا crontab را ویرایش کنید. بدین صورت می توانید یک cron job جدید اضافه کنید:

$ crontab –e

اکنون نیاز است تا خط زیر را در انتهای crontab کپی و پیست کنید. شما این امکان را دارید تا از هر یک از قالب های dump که در بالا به آن اشاره شد، استفاده کنید:

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

حال پرونده را ذخیره کرده و خارج شوید.

سرویس cron به صورت خودکار اجرای این دستور جدید را بدون نیاز به راه اندازی مجدد، آغاز خواهد کرد. این cron job به نحوی تنظیم شده است که در نیمه شب، به صورت خودکار اجرا شود. بدین صورت می توانید فرایند گرفتن بکاپ از PostgreSQL را ساده سازی کنید.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *