منصة البيانات · من MySQL إلى PostgreSQL

ترحيل MySQL إلى PostgreSQL مع بقاء MySQL متزامنة حتى التحويل

يبدو ترحيل MySQL إلى PostgreSQL سهلًا لأن القاعدتين مفتوحتا المصدر وعلائقيتان. لكن العمل يكمن في التفاصيل: أعداد صحيحة بلا إشارة وتواريخ صفرية، وترميز أحرف يحفظ النص العربي بطرق غير متوقعة، ومقارنات لا تميّز حالة الأحرف، ومفاتيح AUTO_INCREMENT، واستعلامات تقبلها MySQL ويرفضها PostgreSQL. وتنفّذ إنتركي الانتقال من الرياض، ويُبقي iblync، منصتها للنسخ المتماثل، القاعدتين على اتفاق حتى تنجح الفحوص.

ترحيل MySQL إلى PostgreSQL في لمحة

أهم ما يلزم معرفته عن ترحيل MySQL إلى PostgreSQL مع إنتركي
السؤالالإجابة المختصرة
لماذا تنتقل الفرقلتوحيد محرك قواعد البيانات، أو للاستفادة من خصائص في PostgreSQL مثل الأنواع الأكثر صرامة والإضافات، أو للانتقال إلى خدمة PostgreSQL مُدارة
ما الذي يُنقلالهيكل والبيانات والإجراءات المخزنة والمشغّلات والأحداث المجدولة واستعلامات التطبيقات التي تعتمد على سلوك MySQL
أين يتركز الجهدعادةً في جودة البيانات وترميز الأحرف واستعلامات التطبيقات، لا في النسخ نفسه
كيف يبقى التوقف قصيرًاتحميل أولي، ثم مزامنة مستمرة عبر iblync، ثم تشغيل متوازٍ، ثم تحويل على مراحل لها شروط عبور
أين يعمليمكن تشغيل جسر النسخ وقاعدة البيانات الهدف والأدوات على بنية داخل المملكة
التسعيرلكل مشروع بعد التقييم، وiblync بعرض سعر بحسب نظام المصدر ونظام الهدف وحجم البيانات

وللإدارة العليا: نادرًا ما يوفّر هذا الانتقال رسوم تراخيص، فالمبرر هو ما يكسبه العمل. ويذكر التقييم هذا المكسب، وقد ينتهي إلى أن البقاء على MySQL أنسب لكم.

متى يكون ترحيل MySQL إلى PostgreSQL قرارًا معقولًا

الفرق التي تطلب منا نقل MySQL إلى PostgreSQL لديها في الغالب واحد من ثلاثة أسباب. الأول توحيد محرك قواعد البيانات في أنظمتها، فيشغّل فريق واحد كل القواعد وينسخها احتياطيًا ويراقبها بالطريقة نفسها. والثاني حاجة إلى ما يتقنه PostgreSQL، مثل الأنواع الصارمة وفهرسة JSON وإضافات البيانات الجغرافية. والثالث اختيار خدمة PostgreSQL مُدارة لا بد أن تلحق بها قواعد MySQL.

ويستحق الترحيل كلفته حين يكون المكسب مسمّى ويوجد من يشغّل PostgreSQL بعد ذلك، لا لحل مشكلة أداء يكفي لها ضبط MySQL. فإن كان هذا هو الجواب الصادق قلناه كتابةً. والمنهج العام لأي مصدر في صفحة الترحيل إلى PostgreSQL، أما هذه الصفحة فتخص المصدر MySQL تحديدًا.

تحويل MySQL إلى PostgreSQL: كيف تتطابق أنواع البيانات

أنواع بيانات MySQL الشائعة وما يقابلها عادةً في PostgreSQL
MySQLPostgreSQLما الذي يُراجع
INT وBIGINT وSMALLINTinteger وbigint وsmallintتطابق مباشر في الغالب
INT UNSIGNEDbigintلا توجد في PostgreSQL أعداد صحيحة بلا إشارة، فالنوع الأوسع يستوعب المدى كاملًا، أو أضيفوا قيدًا للتحقق
TINYINT(1)boolean أو smallintيُستخدم كثيرًا علامةً بنعم أو لا، والشيفرة التي تقارن بالقيمتين 1 و0 تتغير إن أصبح boolean
AUTO_INCREMENTGENERATED AS IDENTITYاضبطوا القيمة التالية بعد التحميل، والتفصيل تحت الجدول
DATETIMEtimestampالتواريخ الصفرية مثل 0000-00-00 غير مقبولة في PostgreSQL، فقرّروا NULL أو قيمة حقيقية
TIMESTAMPtimestamptzتحوّل MySQL قيم TIMESTAMP بحسب المنطقة الزمنية للجلسة، فتأكدوا أي منطقة تفترضها القيم المحفوظة
VARCHAR(n) وTEXT وMEDIUMTEXT وLONGTEXTvarchar(n) أو textراجعوا ترميز الأحرف لكل عمود أولًا
ENUMنوع enum، أو text مع قيد تحققإضافة قيمة لاحقًا أسهل مع text والقيد
SETtext[] أو جدول ربطقرار تصميم، وتتغير الاستعلامات التي تستخدم FIND_IN_SET
JSONjsonbقابل للفهرسة، ولا يُحفظ ترتيب المفاتيح ولا المفاتيح المكررة

تستطيع أداة تحويل من MySQL إلى PostgreSQL إعداد مسودة لهذه المطابقة في دقائق. أما العمود الأخير فيراجعه التقييم يدويًا.

AUTO_INCREMENT في التطبيق. عمود الهوية في PostgreSQL يأخذ قيمه من تسلسل (sequence). وحين تُحمَّل الصفوف بمفاتيحها الأصلية يبقى التسلسل عند الرقم واحد، فيصطدم أول إدخال جديد بمفتاح موجود. فيُضبط كل تسلسل بعد أعلى قيمة محمّلة، ثم مرة أخرى عند التحويل. وتتغير أيضًا التطبيقات التي تُدخل 0 أو NULL لتطلب مفتاحًا جديدًا.

ترميز الأحرف وقواعد الترتيب والنص العربي

هذا هو الجزء الذي يفاجئ الفرق السعودية أكثر من غيره في نقل MySQL، لأنه يمس أسماء العملاء وعناوينهم والنصوص الحرة بالعربية.

  • ترميز utf8 ليس دائمًا UTF-8 كاملًا. الترميز الذي تسميه MySQL باسم utf8 صيغة من ثلاثة بايتات لا تحفظ بعض الأحرف، مثل كثير من الرموز التعبيرية، أما utf8mb4 فهو الصيغة الكاملة. وترميز UTF8 في PostgreSQL كامل، لكن ما أسقطته MySQL من أحرف قد ضاع قبل الترحيل.
  • نص عربي في عمود latin1. كانت بعض التطبيقات القديمة تكتب بايتات UTF-8 في أعمدة latin1، فيظهر النص سليمًا في التطبيق ومشوّهًا في كل مكان آخر. ويأخذ التقييم عيّنة من كل عمود نصي ليكشف ذلك، ويُعالج التحويل لكل عمود على حدة.
  • البايتات غير الصالحة. يرفض PostgreSQL أي تسلسل بايتات لا يصح في ترميز القاعدة. فالتحميل الذي يفشل في صفوف قليلة يدلكم على مكان البيانات غير السليمة.
  • حالة الأحرف والتشكيل. قواعد الترتيب الافتراضية في MySQL لا تميّز حالة الأحرف عادةً، فتكون 'Riyadh' و'RIYADH' متساويتين، أما PostgreSQL فيقارن النصوص حرفيًا افتراضيًا. فالمفاتيح الفريدة والبحث على النصوص تحتاج إلى قرار: فهرس على الأحرف الصغيرة، أو إضافة citext، أو قاعدة ترتيب لا تميّز حالة الأحرف.
  • الأوضاع المتساهلة. حين تعمل MySQL دون الوضع الصارم قد تعدّل القيم الخارجة عن المدى أو غير الصالحة وتحفظها مع تحذير فقط. أما PostgreSQL فيرفضها بخطأ، فيكون الترحيل هو الموضع الذي تظهر فيه هذه القيم.

ويُعاد اختبار البحث في النصوص العربية التي كانت تعتمد على قواعد الترتيب في MySQL، على PostgreSQL وببياناتكم أنتم.

استعلامات SQL والشيفرة التي تحتاج عادةً إلى إعادة عمل

تحفظ معظم تطبيقات MySQL استعلاماتها في التطبيق لا في القاعدة. فالتغييرات صغيرة، لكنها موزعة على ملفات كثيرة:

  • علامات الاقتباس. تصبح العلامة المائلة حول الأسماء (backtick) علامة اقتباس مزدوجة أو تُحذف. ويحوّل PostgreSQL الأسماء غير المقتبسة إلى أحرف صغيرة.
  • الإدخال مع التحديث والمفاتيح. يصبح الشرط ON DUPLICATE KEY UPDATE في جملة INSERT هو ON CONFLICT DO UPDATE، وتحل RETURNING محل LAST_INSERT_ID().
  • تقسيم النتائج والدوال. تصبح LIMIT 20, 10 هي LIMIT 10 OFFSET 20، وIFNULL هي COALESCE. وفي MySQL تعني || في الغالب «أو»، أما في PostgreSQL فتربط النصوص.
  • GROUP BY. قد تسمح MySQL باختيار أعمدة غير مجمّعة ولا محسوبة بدالة تجميع، ويرفض PostgreSQL ذلك ما لم يعتمد العمود على المفتاح الأساسي المجمّع.
  • القسمة. في MySQL يعطي 5 / 2 القيمة 2.5، وفي PostgreSQL تعطي قسمة عددين صحيحين القيمة 2. والتقارير المالية تستحق اختبارًا خاصًا.
  • الإجراءات والمشغّلات والأحداث. تُعاد كتابة الإجراءات المخزنة بلغة PL/pgSQL، وتصبح المشغّلات دوال مشغّلات، وتحتاج المهام على مجدول الأحداث في MySQL إلى أداة جدولة جديدة.

ويكشف مهندسونا هذه الفروق بقراءة الشيفرة وبتشغيل اختبارات التطبيق على PostgreSQL، قبل أن يقدّر أحد أي مدة.

نقل MySQL إلى PostgreSQL مع مزامنة مستمرة أثناء التحويل

iblync منصة إنتركي لترحيل البيانات ونسخها، وMySQL وPostgreSQL كلاهما في قائمة موصلاتها المنشورة. وله في هذا المشروع مهمة واحدة: نقل البيانات وإبقاء القاعدتين على اتفاق بينما يُثبَت الهيكل والاستعلامات والتطبيق.

  • التحميل الأولي. تُنسخ البيانات الحالية إلى PostgreSQL مرة واحدة، مع تقييد المعدل حتى لا ينافس التحميل الإنتاج على MySQL. ويذكر موقع iblync أن الترحيل إذا انقطع يستأنف من حيث توقف.
  • المزامنة المستمرة. كل تغيير يجري على MySQL بعد التحميل يُطبَّق على PostgreSQL بقواعد الأنواع والترميز نفسها، وإن تعذّر الوصول إلى PostgreSQL تنتظر التغييرات في طابور بدل أن تفشل. ويراجع التقييم إعدادات السجلات في MySQL، فهي التي تحدد طريقة قراءة التغييرات.
  • الاتجاهان عند الحاجة. يدعم iblync المزامنة في الاتجاهين، فيمكن أن تعود التغييرات إلى MySQL مدة متفقًا عليها ليبقى التراجع ممكنًا.
  • الإثبات. يذكر موقع iblync أن التحقق يعتمد على المجاميع الاختبارية (checksums) وعدد الصفوف. ونتفق على شروط النجاح لبياناتكم قبل التحويل.

وأين لا يناسب: لا يعيد iblync كتابة الاستعلامات ولا يغيّر تطبيقاتكم، فهذا عمل هندسي نتولاه مع فرقكم. والمزيد عن البث المستمر للتغييرات في صفحة النسخ المتماثل الفوري.

كيف يسير مشروع الانتقال من MySQL إلى PostgreSQL

  1. التقييم.

    الخوادم وإصداراتها، والهيكل، وترميز الأحرف وقواعد الترتيب لكل عمود، وإعداد sql_mode، والإجراءات والأحداث، واستعلامات التطبيقات، وحجم البيانات ومعدل تغيرها، ونافذة التوقف، وإقامة البيانات. ونتيجته قرار يتضمن خيار البقاء على MySQL.

  2. الهيكل وجودة البيانات.

    تُطابَق الأنواع، وتُعالج مشكلات الترميز والقيم غير الصالحة لكل عمود، ويُختبر الهيكل على بيانات تشبه بيانات الإنتاج.

  3. تعديلات التطبيقات.

    تُعدَّل برامج الاتصال والاستعلامات وجمل الإدخال مع التحديث وتقسيم النتائج ومعالجة الأخطاء، وتُختبر لكل خدمة مع فرق التطبيقات لديكم.

  4. التحميل والمزامنة.

    يحمّل iblync البيانات ويُبقي PostgreSQL على اتفاق مع MySQL.

  5. التشغيل المتوازي.

    القاعدتان تعملان، وتنتقل القراءة أولًا خدمةً بعد خدمة، بخطوات يمكن التراجع عنها.

  6. تحويل على مراحل.

    تتوقف الكتابة لحظات، وتكتمل المزامنة الأخيرة، وتُقارن الأعداد والمجاميع الاختبارية، وتُضبط التسلسلات، ثم تنتقل الكتابة. ويُتمرَّن على التحويل والتراجع قبل ذلك.

  7. التثبيت والتسليم.

    ضبط الأداء، وإثبات الاستعادة من النسخ الاحتياطية، وتمارين الانتقال عند التعطل، ثم التسليم لمديري قواعد البيانات لديكم أو تشغيل إنتركي لها.

ما تقدمه إنتركي في السعودية

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

وقبل البدء، تمر قائمة قرارات الترحيل لدينا على الأسئلة التي تحدد هل يستحق الانتقال كلفته. وإن كانت بيئتكم تضم SQL Server أيضًا فصفحة ترحيل SQL Server إلى PostgreSQL تتناول ذلك المصدر.

ما الذي يحدد الكلفة

يُسعَّر كل مشروع على حدة بعد التقييم. وأهم ما يحدد الكلفة: عدد الخوادم، ومدى سلامة البيانات وترميز الأحرف، وحجم ما يتغير من استعلامات التطبيقات، وحجم البيانات ومعدل تغيرها، ونافذة التوقف، ونموذج النشر، ومن يشغّل PostgreSQL بعد ذلك. ويُسعَّر iblync نفسه بعرض سعر بحسب نظام المصدر ونظام الهدف وحجم البيانات.

أسئلة شائعة

MySQL بلا رسوم ترخيص أيضًا، فما الذي نوفّره فعلًا بالانتقال إلى PostgreSQL؟

في الغالب ليست رسوم التراخيص، إلا إن كنتم تدفعون مقابل طبعة تجارية من MySQL. المكسب محرك واحد تديرونه، أو خصائص في PostgreSQL تحتاجها فرقكم، والكلفة هي الترحيل نفسه. ويوازن التقييم بين الأمرين.

كم يستغرق ترحيل MySQL إلى PostgreSQL لشركة في السعودية؟

يتوقف على جودة البيانات، واستعلامات التطبيقات التي تتغير، وحجم البيانات، ونافذة التوقف. ونقدّم مدى تقريبيًا بعد التقييم مع تسمية ما يغيّره.

هل ينتقل النص العربي المحفوظ في MySQL إلى PostgreSQL سليمًا؟

إن كان محفوظًا في MySQL بالترميز الصحيح، نعم. والخطر في الأعمدة القديمة التي تحفظ العربية بترميز غير مناسب. ويأخذ التقييم عيّنة من كل عمود نصي، وتُحوَّل هذه الأعمدة بقاعدة خاصة بها قبل التحميل.

ماذا يحدث لمفاتيح AUTO_INCREMENT بعد الانتقال؟

تصبح أعمدة هوية تحتفظ بقيمها الحالية. ثم يُضبط كل تسلسل بعد أعلى مفتاح محمّل، ويُضبط مرة أخرى عند التحويل، حتى لا تصطدم الإدخالات الجديدة بالصفوف القديمة.

هل يستمر تطبيقنا على MySQL في العمل أثناء تحميل PostgreSQL واختباره؟

نعم. يحمّل iblync البيانات، ثم يطبّق كل تغيير على MySQL في PostgreSQL باستمرار. ولا تنتقل الكتابة إلا حين تنجح الفحوص المتفق عليها، بعد توقف قصير للمزامنة الأخيرة.

هل يمكن استضافة خوادم الترحيل وقاعدة PostgreSQL الجديدة داخل المملكة؟

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

الخطوة التالية

خطّطوا لتحويلكم من MySQL إلى PostgreSQL

أخبرونا بإصدارات MySQL وعدد الخوادم، والحجم التقريبي للبيانات، وترميز الأحرف المستخدم، وعدد التطبيقات المتصلة، ونافذة التوقف التي يقبلها العمل.

خانة إلزامية

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

أو مباشرةً

+966-11-2180999 [email protected]

أبراج التعاونية، البرج الشمالي، الطابق السابع، طريق الملك فهد، العليا، ص.ب. ٥٦٨٣٥، الرياض ١١٥٦٤، المملكة العربية السعودية

أو كيف تتطابق أنواع البيانات

نشرته إنتركي. آخر تحديث . إنتركي مسجلة في الرياض بالسجل التجاري رقم 1010156897.