بدأت MariaDB تفريعًا عن MySQL وبقيت متوافقة معها سنين. ثمّ تباعدتا حتى صار الانتقال بينهما ترحيلًا لا تبديلًا — أمّا تطبيق PHP العاديّ فتُشغّل كلتاهما له البنية نفسها والاستعلامات نفسها.
أين يبلغ اختلافهما حدّ الأهميّة
- JSON. في MySQL نوعُ JSON حقيقيّ بفهرسة. وMariaDB تخزّنه نصًّا بقيد تحقّق — قابلٌ للنقل، وأبطأ في كلّ ما يستعلم داخل المستند.
- النسخ المتماثل. MySQL تستعمل GTIDs، ولـ MariaDB نظامها. وهما لا يتبادلان، فلا تكون النسخةُ التابعة من الأخرى.
- دوالّ النوافذ وتعبيرات الجداول المشتركة. كلتاهما تملكهما اليوم، وقد لا تملكهما التركيبات القديمة من أيٍّ منهما.
- محرّكات التخزين. تأتي MariaDB بإضافات كـ Aria وColumnStore. ولا يكاد أحد يحتاجها.
كيف تعرف أيّتهما عندك
mysql -V
mysql -e "SELECT VERSION()"
# 10.x or 11.x is MariaDB; 8.x is MySQL
الانتقال بينهما
نسخٌ واستيراد، لا نسخُ ملفّات أبدًا. فأدلّة البيانات غير متوافقة، ودليلٌ منسوخ يعطيك قاعدةً تُقلع ثمّ تتصرّف تصرّفًا غريبًا — وذلك أسوأ بكثير من قاعدةٍ ترفض الإقلاع.
mysqldump --single-transaction --routines --triggers --default-character-set=utf8mb4 db > db.sql
# then import into the other engine and CHECK the row counts per table
أيّهما تختار لموقع جديد
أيّهما جاءت به توزيعتك ودعمه مضيفك. ففرق الأداء لتطبيق PHP معتاد داخل الضجيج؛ والذي يعنيك أكثر بكثير هو حوض الذاكرة والفهارس والاستعلامات — انظر innodb_buffer_pool_size ومتى تضيف فهرسًا.
وإن كان تطبيقك يوثّق إحداهما بعينها فاستعملها. فمشكلات التوافق نادرة، وبائسةٌ حين تقع.
