تزيد أحجام قواعد البيانات مع الوقت حتى تتجاوز أحيانًا المساحة اﻷصلية التي خُصِّصت لها، وقد تواجهك مشاكل في المدخلات والمخرجات I/O إن كانت قاعدة البيانات موجودة في نفس القسم “Partition” الموجود به بقية نظام التشغيل. وسنتعلم في هذا الدليل كيفية نقل مجلد البيانات في نظام PostgreSQL لإدارة قواعد البيانات إلى مكان جديد في حالة كنت تريد إضافة مساحة جديدة أو تبحث في طرق لتحسين الأداء، أو الاستفادة من مزايا التخزين الأخرى التي توفرها أنظمة مصفوفات الأقراص المستقلة RAID، أو عُقّدُ التخزين الشبكية “Network Block Storages”، أو غيرها من الأجهزة وأنظمة التخزين.
المتطلبات
- خادم يعمل بتوزيعة أوبنتو 16.04، عليها مستخدم له صلاحية sudo -انتبه، ليس المستخدم الجذر root-.
- خادم PostgreSQL، يمكنك قراءة كيفية تثبيت واستخدام PostgreSQL على أوبنتو في هذا المقال.
وسننقل البيانات إلى وحدة تخزينية “Block Storage Device” لها نقطة الضم التالية /mnt/volume-nyc1-01
.
فائدة: تكون اﻷقراص أو اﻷجهزة/الوحدات “Devices”بشكل عام في أنظمة لينكس عبارة عن ملفات، وكل جهاز “قسم/partition من القرص الصلب مثلًا” له نقطة ضم “mount point” يكون فيها محتواه.
الخطوة الأولى: نقل مجلد بيانات PostgreSQL
-
سنبدأ جلسة PostgreSQL تفاعلية أولًا كي نتحقق من المكان الحالي للمجلد، وسنستخدم أمر
psql
للدخول إلى شاشة تفاعلية “interactive monitor”، ثم نضيفu postgres-
لتخبرsudo
أن ينفِّذ أمرpsql
كمستخدمpostgre
.
$ sudo -u postgres psql
- وبمجرد دخولك إلى الشاشة، اطلب عرض مجلد البيانات:
postgres=# SHOW data_directory;
وسيكون الخرج في حالتنا هكذا:
data_directory ------------------------------ /var/lib/postgresql/9.5/main (1 row)
ويؤكد هذا الخرج أن PostgreSQL مُعدَّ لاستخدام مجلد البيانات الافتراضي main
الموجود في المسار ذي اللون الأحمر بالأعلى، إذًا هذا هو المجلد الذي سننقله.
-
اكتب
q\
للخروج بمجرد أن تتأكد من وجود المجلد في النظام. -
سنوقف PostgreSQL لضمان سلامة البيانات، قبل أن نغيّر شيئًا في مجلد
main
:
$ sudo systemctl stop postgresql
-
ثم نستعلم عن حالة PostgreSQL لنتأكد أنها أُوقِفَت، إذ أن
systemctl
ﻻ يعرض نتائج أوامر إدارة الخدمات في النظام:
$ sudo systemctl status postgresql
وتتأكد أنها أوقفت إن كان السطر الأخير في الخرج يقول لك إن الخادم قد توقف:
. . .
Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.
والآن، سننسخ مجلد البيانات الحالي إلى مكان جديد باستخدام rsync
، مع استخدام لاحقة a-
للحفاظ على الصلاحيات وبقية خصائص المجلد، وv-
لعرض خرج مفصّل كي تتابع ما يحدث.
ملاحظة: تأكد من عدم وجود شرطة مائلة بعد اسم المجلد، والتي قد تضاف تلقائيًا إن استخدمت زر tab لإكمال النصوص، إذ أن rsync
سيضع محتوى المجلد في نقطة الضم بدلًا من مجلد محتوي لـ PostgreSQL.
-
سنبدأ
rsync
من مجلد postgresql من أجل محاكاة هيكل المجلد الأصلي في المكان الجديد، وسنتجنب مشاكل الصلاحيات للترقيات المستقبلية عبر إنشاء مجلد postgresql داخل نقطة الضم “mount point” والإبقاء على ملكيته لمستخدم PostgreSQL.
ونحن لا نحتاج هنا إلى مجلد الإصدار 9.5 بما أننا حددنا مكان المجلد بوضوح في ملفpostgresql.conf
، لكن ﻻ بأس باتباع أسلوب المشروع خاصة إن كانت هناك حاجة في المستقبل لتشغيل عدة إصدارات من PostgreSQL:
$ sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01
-
وسنعيد تسمية المجلد الحالي مع امتداد
bak
. ونبقي عليه حتى نتأكد أن النقل تم بنجاح، ونحن نعيد تسميته من أجل تجنب أي لبس قد يحدث من ملفات موجودة في كلا من المكان القديم والجديد:
$ sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak
وبهذا نكون جاهزين لننتقل إلى ضبط إعدادات PostgreSQL.
الخطوة الثانية: التوجيه إلى المكان الجديد للبيانات
تُضبط القيمة الافتراضية لـ data_directory
في إعدادات PostgreSQL على أنه موجود في هذا المسار:
/var/lib/postgresql/9.5/main
-
وتوجد هذه الإعدادات في ملف
postgresql.conf
، وسنغيّر الآن تلك الإعدادات لنضع المكان الجديد لمجلد البيانات:
$ sudo nano /etc/postgresql/9.5/main/postgresql.conf
-
ابحث عن السطر الذي يبدأ بكلمة
data_directory
وغيّر مساره إلى المسار الموجود فيه المجلد الجديد، وفي حالتنا فإن هذا السطر يجب أن يبدو هكذا بعد تغيير المسار:
. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
. . .
الخطوة الثالثة: إعادة تشغيل PostgreSQL
نحن الآن جاهزون لتشغيل PostgreSQL، الصق الأمر الأول لتشغيله، والثاني لمعرفة حالته:
$ sudo systemctl start postgresql
$ sudo systemctl status postgresql
- افتح شاشة PostgreSQL التفاعلية:
$ sudo -u postgres psql
- اطلب عرض قيمة data_directory لنتأكد أن مجلد البيانات الجديد هو المستخدَم الآن:
postgres=# SHOW data_directory;
يجب أن يكون الخرج هكذا في حالتنا:
data_directory
-----------------------------------------
/mnt/volume-nyc1-01/postgresql/9.5/main
(1 row)
وننتهز هذه الفرصة بما أننا أعدنا تشغيل PostgreSQL وتأكدنا أنه يستخدم المكان الجديد، كي نتأكد أن قاعدة البيانات تعمل بكفاءة.
- احذف مجلد البيانات الاحتياطي -القديم- بمجرد أن تتأكد من سلامة أي بيانات موجودة مسبقًا:
$ sudo rm -Rf /var/lib/postgresql/9.5/main.bak
- أعد تشغيل PostgreSQL مرة أخيرة للتأكد من أنها تعمل كما يجب:
$ sudo systemctl start postgresql $ sudo systemctl status postgresql
الخلاصة
يجب أن تستخدم قاعدةُ بياناتك الآن المجلدَ الجديد في المكان الذي اخترتَه له، وهذا يعني أنك تستطيع الآن زيادة حجم قاعدة البيانات بما أنك نقلتها من المكان القديم ذي المساحة المحدودة.
ترجمة -بتصرف- لمقال How To Move a PostgreSQL Data Directory to a New Location on Ubuntu 16.04 لصاحبته Melissa Anderson
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.