آموزش انتقال دایرکتوری داده PostgreSQL به مکان جدید در Ubuntu 22.04

به اشتراک بگذارید

فهرست مطالب

دیتابیس‌های PostgreSQL با گذشت زمان رشد می‌کنند و گاهی فضای دیسک اولیه را پر می‌کنند. اگر دیتابیس روی همان پارتیشن سیستم‌عامل باشد، ممکن است با مشکل I/O contention مواجه شوید. استفاده از Block Storage، RAID یا سایر دستگاه‌های ذخیره‌سازی می‌تواند redundancy و مقیاس‌پذیری را بهبود بخشد. این آموزش شما را با مراحل انتقال دایرکتوری داده PostgreSQL به مکان جدید، مانند Block Storage، روی Ubuntu 22.04 آشنا می‌کند. این راهنما برای مدیران دیتابیس که به دنبال بهینه‌سازی فضای ذخیره‌سازی یا عملکرد هستند، طراحی شده است.

پیش‌نیازهای انتقال دایرکتوری داده PostgreSQL

برای شروع، به موارد زیر نیاز دارید:

  • سرور Ubuntu 22.04 با کاربر sudo غیرروت و فایروال فعال.
  • PostgreSQL نصب‌شده و فعال روی سرور.
  • Block Storage یا فضای ذخیره‌سازی جدید که به سرور متصل و مانت شده است (مثلاً در /mnt/volume_nyc1_01).

اطمینان حاصل کنید که فضای ذخیره‌سازی جدید آماده و مانت شده است تا بتوانید دایرکتوری داده را به آن منتقل کنید.

گام 1: انتقال دایرکتوری داده PostgreSQL

ابتدا مکان فعلی دایرکتوری داده را بررسی کنید. یک جلسه تعاملی PostgreSQL را باز کنید:

sudo -u postgres psql

مکان دایرکتوری داده را بررسی کنید:

SHOW data_directory;

خروجی:

       data_directory
-----------------------------
 /var/lib/postgresql/14/main
(1 row)

این خروجی تأیید می‌کند که دایرکتوری داده در /var/lib/postgresql/14/main قرار دارد. برای خروج از psql:

\q

برای حفظ یکپارچگی داده‌ها، سرویس PostgreSQL را متوقف کنید:

sudo systemctl stop postgresql

وضعیت سرویس را بررسی کنید:

sudo systemctl status postgresql

خروجی باید نشان دهد که سرویس متوقف شده است (inactive):

○ postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor>
     Active: inactive (dead) since Thu 2022-06-30 18:46:35 UTC; 27s ago
    Process: 4588 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4588 (code=exited, status=0/SUCCESS)
        CPU: 1ms

حالا دایرکتوری داده را با rsync به مکان جدید کپی کنید. گزینه -a مجوزها و ویژگی‌ها را حفظ می‌کند و -v جزئیات را نمایش می‌دهد:

sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

هشدار: از افزودن اسلش (/) در انتهای مسیر خودداری کنید تا ساختار دایرکتوری حفظ شود.

پس از کپی، دایرکتوری قدیمی را به‌عنوان نسخه پشتیبان تغییر نام دهید:

sudo mv /var/lib/postgresql/14/main /var/lib/postgresql/14/main.bak

این کار از سردرگمی جلوگیری می‌کند تا زمانی که انتقال را تأیید کنید.

گام 2: تنظیم مکان جدید دایرکتوری داده

فایل پیکربندی PostgreSQL را برای اشاره به مکان جدید ویرایش کنید:

sudo nano /etc/postgresql/14/main/postgresql.conf

خط data_directory را پیدا کرده و مسیر را به مکان جدید تغییر دهید:

data_directory = '/mnt/volume_nyc1_01/postgresql/14/main'

فایل را ذخیره کنید و ببندید (در nano: Ctrl+X، Y، Enter).

اکنون PostgreSQL برای استفاده از دایرکتوری جدید آماده است.

گام 3: راه‌اندازی مجدد PostgreSQL و تأیید

سرویس PostgreSQL را دوباره راه‌اندازی کنید:

sudo systemctl start postgresql

وضعیت سرویس را بررسی کنید:

sudo systemctl status postgresql

خروجی باید active (exited) را نشان دهد:

● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor>
     Active: active (exited) since Thu 2022-06-30 18:50:18 UTC; 3s ago
    Process: 4852 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4852 (code=exited, status=0/SUCCESS)
        CPU: 1ms

برای اطمینان از استفاده از دایرکتوری جدید، جلسه psql را باز کنید:

sudo -u postgres psql

مکان دایرکتوری داده را دوباره بررسی کنید:

SHOW data_directory;

خروجی:

             data_directory
----------------------------------------
 /mnt/volume_nyc1_01/postgresql/14/main
(1 row)

دسترسی به دیتابیس و داده‌ها را تست کنید. پس از تأیید، دایرکتوری پشتیبان را حذف کنید:

sudo rm -Rf /var/lib/postgresql/14/main.bak

رفع اشکال (Troubleshooting)

اگر با خطای اتصال مواجه شدید (مانند “No such file or directory” برای سوکت)، موارد زیر را بررسی کنید:

    • اطمینان حاصل کنید که مسیر data_directory در postgresql.conf درست است.
    • مجوزهای دایرکتوری جدید را بررسی کنید (مالک باید postgres باشد):
sudo chown -R postgres:postgres /mnt/volume_nyc1_01/postgresql
  • اگر از مسیر غیراستاندارد (مانند /home/postgresql) استفاده می‌کنید، اطمینان حاصل کنید که SELinux یا AppArmor مانع دسترسی نمی‌شوند.
  • فایل‌های سوکت PostgreSQL را بررسی کنید (/var/run/postgresql).

نتیجه‌گیری

در این آموزش، دایرکتوری داده PostgreSQL را به مکان جدیدی در Ubuntu 22.04 منتقل کردید. این فرآیند شامل توقف سرویس، کپی داده‌ها با rsync، به‌روزرسانی فایل پیکربندی و راه‌اندازی مجدد سرویس بود. این کار به شما امکان می‌دهد از Block Storage یا سایر دستگاه‌های ذخیره‌سازی برای بهبود مقیاس‌پذیری و عملکرد استفاده کنید. برای اطلاعات بیشتر، مستندات رسمی PostgreSQL یا منابع مدیریت دیتابیس را کاوش کنید.