دیتابیسهای 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 یا منابع مدیریت دیتابیس را کاوش کنید.