تعذّرت ترقية PostgreSQL

أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

المشكلة

ظهور خطأ عند تعديل قاعدة بيانات PostgreSQL

رسالة الخطأ

ERROR: PostgreSQL Upgrade FAILED 

الأسباب المحتملة

السبب الوصف تنطبق إرشادات استكشاف الأخطاء وإصلاحها على
إعدادات النسخ المتماثل غير صحيحة في ملف إعداد PostgreSQL تعذُّر ترقية PostgreSQL بسبب إعدادات النسخ غير الصحيحة أثناء الترقية. مستخدمو Edge Private Cloud
تم إجراء تثبيت PostgreSQL من خلال مستخدم تثبيت آخر غير مستخدم واجهة برمجة التطبيقات API تم تثبيت PostgreSQL في البداية مع مستخدم آخر كمستخدم تثبيت، وهو ما يؤدي إلى تعذُّر الترقية. مستخدمو Edge Private Cloud

خطوات التشخيص الشائعة

إذا ظهرت لك رسالة خطأ عند ترقية قاعدة بيانات PostgreSQL، عليك إجراء ما يلي: خطوات التشخيص أولاً:

  1. إعادة تسمية مجلد بيانات PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. تأكَّد من أنّ بياناتك الاحتياطية الأصلية متوفّرة في مجلد باسم /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    على سبيل المثال:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. استعادة البيانات الاحتياطية في /opt/apigee/data/apigee-postgresql/pgdata-version.old/ إلى /opt/apigee/data/apigee-postgresql/pgdata باستخدام الأمر التالي:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    على سبيل المثال:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. إعادة تشغيل الأمر db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. إذا ظهرت لك رسالة الخطأ التالية:

    pg_resetxlog: could not open file "global/pg_control" for reading:
    No such file or directory
    

    بعد ذلك، عليك إعادة تسمية ملف pg_control.old إلى pg_control باستخدام الأمر التالي:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. أعِد تشغيل الأمر db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    

    في حال استمرار المشكلة، انتقِل إلى السبب: إعدادات النسخ المتماثل غير صحيحة في ملف إعداد PostgreSQL.

السبب: إعدادات النسخ المتماثل غير صحيحة في ملف إعداد PostgreSQL

التشخيص

  1. تحقّق مما إذا كان ملف إعدادات PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf يحتوي على إعدادات النسخ التي تريدها.
  2. إذا كان هذا الملف يتضمّن إعدادات النسخ المتطابق المتوقّعة، انتقِل إلى عملية تثبيت PostgreSQL التي أجراها مستخدم تثبيت آخر غير مستخدم "apigee".
  3. إذا لم يكن الأمر كذلك، انتقِل إلى درجة الدقة.

الحلّ

  1. أعد تسمية مجلد بيانات PostgreSQL باستخدام الأمر التالي:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. يُرجى التأكّد من أنّ بيانات النسخة الاحتياطية الأصلية متوفّرة في مجلد باسم: /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    على سبيل المثال:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. يمكنك استعادة بيانات النسخة الاحتياطية من /opt/apigee/data/apigee-postgresql/pgdata-version.old/ إلى /opt/apigee/data/apigee-postgresql/pgdata باستخدام الأمر التالي:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    على سبيل المثال:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. إذا غيّرت المضيف الثانوي، عليك تعديل السمة التالية في /opt/apigee/customer/application/postgresql.properties لتعديل ملف الإعدادات pg_hba.conf:

    conf_pg_hba_replication.connection=host replication apigee
    existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust 
    
  5. أعِد تشغيل خدمة apigee-postgresql للتأكّد من تعديل القيمة المحدّدة في الخطوة 4 أعلاه في ملف الضبط pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. اجعل ملف الإعدادات pg_hba.conf غير قابل للتغيير باستخدام الأمر التالي لمحاولة ضمان عدم تعديله بإعدادات غير صحيحة أثناء ترقية PostgreSQL:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. أعِد تشغيل الأمر db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. إزالة الإعداد غير القابل للتغيير في ملف الإعداد pg_hba.conf:

    chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
    

السبب: تم إجراء تثبيت PostgreSQL من خلال مستخدم آخر للتثبيت غير مستخدم apigee.

التشخيص

  1. تحقَّق مما إذا كان هناك أي مستخدم آخر تم ضبط rolesuper لديه على true من خلال اتّباع الخطوات التالية:

    1. في عقدة PostgreSQL، سجِّل الدخول إلى PostgreSQL باستخدام الأمر التالي:

      psql -h $(hostname -i)  -U apigee
      
    2. قم بتشغيل استعلام SQL التالي:

      select * from pg_authid;
      
    3. تحقَّق مما إذا كان هناك مستخدمون متعدّدون تم ضبط rolesuper لديهم على true. إذا كان الأمر كذلك، ستتعذّر ترقية PostgreSQL لأنّه تم ضبط مستخدم آخر على أنّه مستخدم التثبيت بدلاً من مستخدم apigee. يُعتبر أي مستخدم لديه الدور rolesuper وOID أقل من ذلك مستخدم تثبيت.

      للتحقق من هذا النوع من مشكلات الدور، قم بتشغيل استعلامات SQL التالية:

      select oid,rolname,rolsuper from pg_roles;
      select * from pg_user;
      

الحلّ

  1. سجِّل الدخول إلى PostgreSQL باستخدام الأمر التالي:

    psql -h $(hostname -i)  -U apigee
    
  2. أعِد تسمية دور apigee الحالي في قاعدة البيانات القديمة ليصبح مستخدمًا مؤقتًا (على سبيل المثال: apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. لنفترض أنّ هناك مستخدم تثبيت آخر هو "srcapige". إعادة تسمية الدور srcapige ليصبح apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. إعادة تسمية apigee2 إلى المستخدم srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. عدِّل كلمة المرور لجميع المستخدمين الذين تمت إعادة تسميتهم:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. غيِّر اسم مجلد بيانات PostgreSQL باستخدام الأمر التالي:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. التأكد من وجود بيانات نسخ احتياطي أصلية داخل مجلد يحمل اسم /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    على سبيل المثال:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. استعد البيانات في مجلد /opt/apigee/data/apigee-postgresql/pgdata-version.old/ إلى /opt/apigee/data/apigee-postgresql/pgdata باستخدام الأمر التالي:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    على سبيل المثال:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. أعِد تشغيل الأمر db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. إعادة تشغيل جميع خدمات apigee-qpidd وedge-qpid-server:

    /opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
    

إذا استمرت المشكلة، انتقِل إلى يجب جمع معلومات بيانات التشخيص.

يجب جمع معلومات التشخيص

إذا استمرت المشكلة بعد اتّباع تعليمات تحديد المشاكل وحلّها أعلاه، اجمع المعلومات التشخيصية التالية. يُرجى التواصل مع فريق دعم Apigee ومشاركة هذه المعلومات مع فريق الدعم:

  1. أضِف set -x في السطر الثاني من ملف /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. اتّبِع الخطوات الشائعة لتشخيص المشاكل وقدِّم db_upgrade ناتج وحدة التحكّم إلى فريق الدعم:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. قدِّم ملفات السجلّات التالية لفريق الدعم:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. تقديم مُخرجات أوامر نظام التشغيل التالية للتحقق مما إذا تم ضبط البدائل على auto.

    update-alternatives --display psql 
    

    أو

    update-alternatives --display pgsql
    update-alternatives --list psql
    

    أو

    update-alternatives --list pgsql
    

    في حال ضبط البدائل على manual، يمكنك ضبطها على auto من خلال ما يلي: :

    update-alternatives --auto psql
    

    يؤدي ضبط البدائل على auto إلى توجيه البرنامجين الثنائيين psql وpostgres إلى الإصدارات التي تمت ترقيتها. وبخلاف ذلك، ستشير الملفات الثنائية إلى الإصدار الأقدم، ما قد يتسبب في حدوث مشاكل.