آموزش بکاپ گیری از PostgreSQL در اوبونتو 24.04
۲۷ اسفند ۱۴۰۳
بکاپ گیری از PostgreSQL شما را از دردسر نابودی اطلاعات دیتابیس نجات میدهد. برای ایجاد یک نسخه بکاپ از دیتابیس PostgreSQL میتوانید از ابزار pg_dump
در رابط خط فرمان استفاده کنید. مهم نیست که این دیتابیس شما تا چه اندازه بزرگ و یا کوچک است، آشنایی با بکاپ PostgreSQL در این حالت برای شما اهمیت زیادی دارد. ما در ادامه، نحوه بکاپگیری از این دیتابیس در اوبونتو 24.04 را به شما آموزش خواهیم داد.
PostgreSQL را می توان یک سیستم مدیریت پایگاه داده دانست که به صورت رایگان و متن باز در اختیار کاربران قرار گرفته است. این سیستم مبتنی بر SQL بوده و از SQL و JSON برای پرس و جوهای رابطه ای و غیر رابطه ای خود استفاده می کند. با استفاده از PostgreSQL، میتوانید از ویژگیهای پیشرفتهای بهرهمند شوید که معمولاً در پایگاه دادههای گرانقیمت و تجاری مانند Oracle و SQL Server وجود دارند.
در ادامه بخوانید:
- بکاپگیری با دستور pg_dump در PostgreSQL
- بازیابی دادهها در PostgreSQL
- بکاپگیری و بازیابی کل پایگاههای داده در PostgreSQL
- جمع بندی
- سوالات متداول

بکاپگیری با دستور pg_dump در PostgreSQL
PostgreSQL دستوری به نام pg_dump
دارد که میتوانید از آن برای استخراج اطلاعات پایگاه داده به یک فایل، برای بکاپگیری استفاده کنید.
دستور pg_dump
را بصورت زیر اجرا کنید:
pg_dump name_of_database > name_of_backup_file
این دستور باید توسط کاربری که دسترسی لازم برای خواندن تمامی اطلاعات پایگاه داده را دارد، اجرا شود. بنابراین، معمولاً این دستور با دسترسی سوپر یوزر اجرا میشود.
با دستور زیر، وارد کاربر postgres شوید و دستور را روی پایگاه داده پیشفرض که نام خود postgres است، اجرا کنید:
sudo su - postgres pg_dump postgres > postgres_db.bak
دستور بالا در واقع یک برنامه مشتری PostgreSQL است، بنابراین میتوانید آن را از یک سرور راه دور اجرا کنید، به شرطی که آن سرور دسترسی به پایگاه داده داشته باشید.
اگر بخواهید از یک سرور راه دور بکاپگیری کنید، با استفاده دستور زیر از پرچم -h
برای مشخص کردن میزبان راه دور و از پرچم -p
برای تعیین پورت راه دور استفاده کنید:
pg_dump -h remote_host -p remote_port name_of_database > name_of_backup_file
در صورت نیاز با پارامتر -U
یک کاربر متفاوت دیگر را نیز مشخص کنید:
pg_dump -U user_name -h remote_host -p remote_port name_of_database > name_of_backup_file
تا این مرحله، نحوه بکاپگیری از پایگاه داده PostgreSQL با استفاده از دستور pg_dump
را بررسی کردیم. همچنین، نحوه مشخص کردن کاربر، میزبان و پورت در صورتی که بخواهید از سیستمهای راه دور بکاپگیری کنید را توضیح دادیم.
بازیابی دادهها در PostgreSQL
برای بازیابی بکاپی که با pg_dump
ایجاد کردید، میتوانید فایل را به ورودی استاندارد psql
بازیابی کنید:
psql empty_database < backup_file
توجه: این عملیات، انتقال (Redirection) پایگاه داده را ایجاد نمیکند. این کار را باید در یک مرحله جداگانه قبل از اجرای دستور انجام دهید.
برای مثال، میتوانید یک پایگاهداده جدید بهنام restored_database
ایجاد کرده و سپس بکاپی بهنام database.bak
را با دستورات زیر بازیابی کنید:
createdb -T template0 restored_database psql restored_database < database.bak
پایگاه داده خالی را باید با استفاده از template0
بهعنوان قالب اصلی ایجاد کنید.
گام دیگری که برای بازیابی صحیح باید انجام دهید، ایجاد مجدد کاربران است، بهویژه کاربرانی که مالک یا دارای مجوزهای دسترسی به اشیاء داخل پایگاه داده هستند.
برای مثال، اگر پایگاه داده شما جدولی داشته باشد که توسط کاربر test_user
مالکیت داشته باشد، باید قبل از وارد کردن دادهها، آن کاربر را در سیستم بازیابی، ایجاد کنید:
createuser test_user psql restored_database < database.bak
رفع خطاهای بازیابی
بهطور پیشفرض، PostgreSQL تلاش میکند تا به بازیابی پایگاه داده ادامه دهد، حتی زمانی که در مسیر با خطا مواجه میشود. بررسی و رفع مشکلات بهمنظور بازگرداندن پایگاه داده به وضعیت صحیح، میتواند کاری دشوار و زمانبر باشد.
در چنین شرایطی، با دستور زیر هر گونه خطا را میتوانید متوقف کنید:
psql --set ON_ERROR_STOP=on restored_database < backup_file
این کار باعث میشود عملیات بازیابی PostgreSQL بلافاصله پس از مواجهه با خطا متوقف شود.
با این حال، هنوز پایگاه دادهی ناقصی خواهید داشت که بهطور کامل بازیابی نشده است، اما حالا میتوانید خطاها را بهطور جداگانه و در زمان بروز آنها مدیریت کنید.
در بسیاری از مواقع، گزینهی بهتر میتواند استفاده از فلگ -1
(عدد یک) یا --single-transaction
باشد:
psql -1 restored_database < backup_file
با این دستور تمام مراحل بازیابی را در یک عملیات انجام دادهاید.
تنها تفاوت آن با ON_ERROR_STOP
ایناست که یا همه چیز کامل بازیابی شود یا نمیشود.
نکته: این روش ممکن است برای بازیابیهای بزرگ هزینهبر باشد.
بکاپگیری و بازیابی کل پایگاههای داده در PostgreSQL
برای صرفهجویی در زمان، اگر بخواهید از تمام پایگاههای داده سیستمتان بکاپ بگیرید، ابزاری به نام pg_dumpall
مناسب اینکار است.
نحوۀ دستور بسیار مشابه دستور معمولی pg_dump
است، اما این دستور نیازی به مشخص کردن پایگاه داده ندارد. در عوض، این دستور از تمام پایگاههای داده موجود بکاپ میگیرد:
pg_dumpall > backup_file
میتوانید طبق دستور زیر، پایگاههای داده را با انتقال فایل به psql
و استفاده از پایگاه داده پیشفرض، بازیابی کنید:
psql -f backup_file postgres
جمعبندی
در این آموزش دیدید که چطور از پایگاه داده PostgreSQL بکاپ گرفتیم و نحوه بازیابی آن را بررسی کردیم. بکاپها جزء اساسی هر برنامه ذخیرهسازی داده هستند و خوشبختانه PostgreSQL ابزارهای لازم برای بکاپگیری مؤثر از اطلاعات مهم را فراهم میکند.
مثل هر بکاپ دیگری، مهم است که بکاپها را بهطور منظم تست کنید تا مطمئن شوید میتوان از آنها برای بازیابی سیستم استفاده کرد. بکاپها زمانی مفیدند که واقعاً بتوانند برای بازگرداندن سیستم استفاده شوند.
در لیارا فقط با یک کلیک و در چند ثانیه، دیتابیس PostgreSQL تهیه کنید.
✅ شبکه خصوصی ✅ منابع اختصاصی ✅ مدیریت آسان
خرید هاست ابری PostgreSQL
سوالات متداول
1- چگونه از پایگاه داده PostgreSQL بکاپ گیری کنیم؟
برای بکاپ گیری از PostgreSQL میتوانید از ابزار pg_dump
در رابط خط فرمان استفاده کنید و به فرمت SQL بکاپ را ذخیره کنید.
2- نحوه بازیابی پایگاه داده PostgreSQL چگونه است؟
برای بازگرداندن بکاپ PostgreSQL، میتوانید از دستورهای psql
و pg_restore
در رابط خط فرمان استفاده کنید.
3- موقع بکاپ گیری از PostgreSQL چه اطلاعاتی را میتوان ذخیره کرد؟
در بکاپ گیری از PostgreSQL شما میتوانید تمام اطلاعات موجود در دیتابیس خود شامل نمودار، جدول، توابع و اطلاعات متنی و تصویری را ذخیره کنید.
4- چطور مطمئن شوم که بکاپها درست کار میکنند؟
تست منظم بکاپها ضروری است تا از قابلیت بازیابی دادهها اطمینان حاصل کنید و مطمئن شوید که میتوانید سیستم را به وضعیت قبلی بازگردانید.
5- چرا بکاپگیری منظم مهم است؟
بکاپها به شما این امکان را میدهند که در صورت بروز مشکلات یا خطاها، سیستم خود را بازیابی کنید.