لماذا تهاجر الآن: انتهاء الدعم والتعرض للثغرات
MySQL 8.0 وصل إلى نهاية دعمه الرسمي في 30 أبريل 2026 وفق جدول Oracle Lifetime Support (oracle.com/support/lifetime-support/). من هذا التاريخ، لم تعد Oracle تنشر تصحيحات أمنية للفرع 8.0.x، بصرف النظر عن خطورة الثغرة. الخوادم التي تبقى على 8.0 تتراكم لديها ديون أمنية تنمو مع كل تحديث ربعي من Oracle — دون أن تُعالج أبداً.
MySQL 8.4 هي أول إصدار يُعيَّن كـLTS في تاريخ MySQL. تضمن Oracle دعمه حتى أبريل 2032 (dev.mysql.com/doc/relnotes/mysql/8.4/). على عكس فروع الابتكار 8.1 و8.2 و8.3 — الصادرة بين 2023 و2024 دون دعم ممتد — يتلقى الإصدار 8.4 تصحيحات أمنية وإصلاحات الاستقرار على المدى الطويل.
التغييرات الجذرية التي يجب معرفتها قبل الترقية
—
- حذف
mysql_native_password: تمت إزالة هذا المكوّن الإضافي للمصادقة نهائياً في MySQL 8.4 (كان مُهملاً فقط في 8.0). أي حساب مستخدم يعتمد على هذا المكوّن سيفشل في الاتصال فوراً بعد الترقية. تطبيقات PHP الأقدم من 8.1، وWordPress دون تهيئة PDO صحيحة، وعملاء JDBC القديمة هي الحالات الأكثر شيوعاً. - تغيير المعامل
authentication_policy: أصبحت القيمة الافتراضية caching_sha2_password، ويُتجاهل أي سطر default_authentication_plugin في my.cnf مع تحذير. يجب استبداله بـauthentication_policy. - إزالة
innodb_file_format والخيارات المرتبطة: حذف هذا المتغير. الجداول المنشأة بـROW_FORMAT=COMPRESSED تعمل، لكن أي محاولة لتعيين innodb_file_format تنتج خطأ. تحقق من سكريبتات DDL. - تغييرات نوع JSON: يُعزز MySQL 8.4 توافق JSON/SQL. دوال مثل
JSON_TABLE() وJSON_VALUE() قد تتصرف بشكل مختلف. تحقق من الجداول التي تحتوي على أعمدة JSON كبيرة في بيئة اختبار أولاً. - مجموعة الأحرف والترتيب: تبقى
utf8mb4 وutf8mb4_0900_ai_ci افتراضيتين، لكن MySQL 8.4 ترفض بشكل أكثر صرامة الأعمدة المُعلنة بـutf8 (اسم مستعار لـutf8mb3). قد تكون هجرة الترتيب ضرورية لقواعد البيانات القديمة المنشأة تحت MySQL 5.7. - متغيرات النظام المُزالة أو المُعاد تسميتها: إزالة عدة متغيرات كانت مُهملة في 8.0 — خاصة
innodb_undo_tablespaces وslave_* (استُبدلت بـreplica_* ) وquery_cache_*. - النسخ المتطابق: أسماء المتغيرات المرتبطة بالنسخ المتطابق تحولت نهائياً إلى مصطلح
source/replica. أي سكريبت يستدعي SHOW SLAVE STATUS يجب تحديثه إلى SHOW REPLICA STATUS.
المتطلبات الأساسية قبل البدء
هجرة محرك قاعدة البيانات في الإنتاج تتطلب تحضيراً دقيقاً. ثلاثة شروط يجب توافرها: نسخة احتياطية مُتحقق منها، معرفة دقيقة بإصدارك الحالي، والتحقق من توافق التطبيق.
- نسخة احتياطية كاملة ومُتحقق منها: نفّذ
mysqldump --all-databases --single-transaction --routines --events > backup_pre_migration.sql وتحقق أن الملف قابل للقراءة. نسخة احتياطية غير مُتحقق منها ليست نسخة احتياطية. - الإصدار الحالي ومحركات الجداول: نفّذ
SELECT VERSION(); وأدرج الجداول غير المستندة إلى InnoDB من information_schema.tables. يجب تقييم أي جدول MyISAM أو MEMORY قبل الترقية. - توافق التطبيق: حدّد مكوّن المصادقة لكل حساب بـ
SELECT user, host, plugin FROM mysql.user;. أي مستخدم على mysql_native_password يجب ترحيله إلى caching_sha2_password. - المساحة المتاحة على القرص: قد تضاعف الترقية مؤقتاً المساحة التي تشغلها ملفات ibdata. تحقق من وجود 20% على الأقل من المساحة الحرة على قسم
/var.
إجراء هجرة MySQL 8.0 → 8.4 LTS على خادم VPS
نسخة احتياطية كاملة مع التحقق
نفّذ
mysqldump --all-databases --single-transaction --routines --events --triggers > /root/backup_mysql80_$(date +%Y%m%d).sql. تحقق من نهاية الملف بـtail -5 /root/backup_mysql80_*.sql: يجب أن يكون آخر سطر -- Dump completed on …. احفظ الملف خارج الخادم قبل المتابعة.مراجعة الحسابات ومكوّنات المصادقة
نفّذ
SELECT user, host, plugin FROM mysql.user ORDER BY plugin;. لكل مستخدم على mysql_native_password، نفّذ ALTER USER 'اسم'@'مضيف' IDENTIFIED WITH caching_sha2_password BY 'كلمة_مرور';. حدّث سلسلة الاتصال لكل تطبيق متأثر قبل الترقية.التحقق من المتغيرات المُهملة في my.cnf
افتح
/etc/mysql/mysql.conf.d/mysqld.cnf وأزل أو استبدل: default_authentication_plugin بـauthentication_policy = caching_sha2_password، وslave_* بـreplica_*، وأزل innodb_undo_tablespaces وquery_cache_size وquery_cache_type. أي متغير غير معروف يمنع تشغيل MySQL 8.4.إيقاف الخدمة وأخذ لقطة
على خادم Proxmox أو KVM، خذ لقطة قبل تعديل الحزم عبر لوحة التحكم أو API لمزود الاستضافة. ثم:
systemctl stop mysql وتحقق من التوقف بـsystemctl status mysql.إضافة مستودع MySQL 8.4 وتحديث الحزم
على Debian 12 / Ubuntu 22.04: نزّل حزمة إعداد مستودع MySQL من
dev.mysql.com/downloads/repo/apt/، ثبّتها بـdpkg -i mysql-apt-config_*.deb، اختر MySQL 8.4 LTS من القائمة، ثم نفّذ apt-get update && apt-get install mysql-server.ترقية جداول النظام
عند أول تشغيل لـMySQL 8.4، يُحدّث المحرك جداول النظام تلقائياً. تحقق من السجلات:
journalctl -u mysql -n 50 | grep -i 'upgrade\|error'. إذا لم تتم الترقية التلقائية، نفّذ mysql_upgrade --user=root --password.التحقق بعد الترقية
اتصل وتحقق من الإصدار:
SELECT VERSION(); يجب أن يُرجع 8.4.x. ثم نفّذ mysqlcheck --all-databases --auto-repair --user=root --password للكشف عن أي تلف في الجداول. راجع سجل الأخطاء /var/log/mysql/error.log.اختبار وظيفي للتطبيق
أعد تشغيل التطبيق وتحقق من النقاط الحساسة: الاتصال بقاعدة البيانات، مصادقة المستخدمين، استعلامات أعمدة JSON، الإجراءات المخزنة. الخطأ
The server requested authentication method unknown to the client يعني وجود حساب لا يزال على mysql_native_password.التنظيف وتفعيل المراقبة
احذف ملف النسخة الاحتياطية المحلية بعد تأكيد النسخة الخارجية. تحقق من أداة المراقبة: بعض أسماء المقاييس تغيرت بين 8.0 و8.4. جدوِل فحص سجل الأخطاء بعد 24 و72 ساعة من الهجرة.
MariaDB 11.x: متى تُفضّل هذا البديل
MariaDB 11.x هو شوكة من MySQL تباعدت بشكل كبير منذ الإصدار 10.3. هناك حالات محددة تجعل MariaDB 11.x أكثر ملاءمة من الترقية إلى MySQL 8.4.
فضّل MariaDB 11.x إذا كان تطبيقك يستخدم ميزات خاصة بـMariaDB (جداول ذات إصدار نظام، تسلسلات، محرك Spider، Galera Cluster الأصلي)؛ أو إذا كنت بحاجة إلى مجموعة متعددة الماسترات دون تعقيد MySQL Group Replication؛ أو إذا أردت البقاء على شوكة تحتفظ بـmysql_native_password للتطبيقات القديمة. MariaDB 11.4 LTS مدعومة حتى 2029.
فضّل MySQL 8.4 LTS إذا طُوِّر تطبيقك واختُبر خصيصاً مقابل MySQL (أطر عمل مثل Laravel Eloquent أو Hibernate التي تستغل ميزات MySQL الخاصة)؛ أو إذا كنت تستخدم MySQL Enterprise لوظائف كـaudit plugin أو Thread Pool التجاري؛ أو إذا كان مزود الاستضافة لا يدعم إلا النسخ الاحتياطية المحسّنة لـMySQL (Percona XtraBackup). أما الهجرة من MySQL 8.0 إلى MariaDB 11.x فهي هجرة بين محركَّين مختلفَّين، وأكثر خطورة وخارج نطاق هذا الدليل — فهي تستحق إجراءً مخصصاً مع اختبارات تكامل كاملة.
التراجع ممكن خلال 24 ساعة: إذا أخذت لقطة للخادم قبل الترقية، فإن استعادتها تُعيد الخادم إلى حالة MySQL 8.0 في دقائق. بدون لقطة، يمكن التراجع من تفريغ SQL لكنه أبطأ. لا تحذف النسخة الاحتياطية واللقطة إلا بعد 72 ساعة من الاستقرار في الإنتاج على MySQL 8.4.
MySQL 8.0 مقابل MySQL 8.4 LTS مقابل MariaDB 11.x
مرّر الجدول أفقيًا
| المعيار | MySQL 8.0 | MySQL 8.4 LTS | MariaDB 11.x |
|---|---|---|---|
| دعم الأمان | منتهٍ (30 أبريل 2026) | حتى أبريل 2032 | حتى 2029 (11.4 LTS) |
| mysql_native_password | موجود (مُهمل) | محذوف | موجود بشكل افتراضي |
| مجموعة متعددة الماسترات | Group Replication | Group Replication | Galera Cluster أصلي |
| توافق تطبيقات MySQL | أصلي | أصلي | معظمه متوافق، بعض الفجوات |
| الترخيص | GPL + Enterprise تجاري | GPL + Enterprise تجاري | LGPL (مؤسسة MariaDB) |
استكشاف الأخطاء: الأخطاء الشائعة بعد الهجرة
—
ERROR 1045 (28000): Access denied بعد الترقية: تحقق من مكوّن المصادقة بـSELECT plugin FROM mysql.user WHERE user='اسم';. إذا كان لا يزال mysql_native_password، نفّذ ALTER USER … IDENTIFIED WITH caching_sha2_password BY '…';.Unknown system variable 'default_authentication_plugin': هذا المتغير لم يعد مُعترفاً به في 8.4. أزله من my.cnf واستبدله بـauthentication_policy = caching_sha2_password.- MySQL لا يبدأ بعد الترقية: راجع
/var/log/mysql/error.log. الأكثر شيوعاً هو متغير نظام غير معروف في my.cnf. علّق المتغيرات واحداً تلو الآخر حتى تحدد المصدر. - تدهور الأداء في استعلامات الفرز: يُطبّق MySQL 8.4 ترتيب الفهرس بصرامة أكبر. نفّذ
EXPLAIN على الاستعلامات البطيئة. ANALYZE TABLE اسم_الجدول; يُجبر على تحديث الإحصائيات. - جدول
performance_schema.replication_applier_status غير موجود في سكريبتات المراقبة: بعض جداول performance_schema أُعيد تسميتها. حدّث استعلامات المراقبة وفق الأسماء الجديدة الموثّقة في dev.mysql.com/doc/refman/8.4/en/performance-schema.html.
الانتقال إلى MySQL 8.4 LTS: ما يجب تذكره
هجرة MySQL 8.0 إلى MySQL 8.4 LTS هي ترقية في المكان قابلة للتنفيذ في أقل من ساعة على خادم VPS مُحضَّر جيداً. أكثر نقطتي فشل شيوعاً هما حذف mysql_native_password — الذي يُعطّل اتصالات التطبيقات القديمة إذا لم تُهاجَر الحسابات مسبقاً — والمتغيرات المُزالة في my.cnf التي تمنع بدء الخدمة. تدقيق هاتين النقطتين مسبقاً يُقلل من وقت التوقف إلى أقل من خمس دقائق. والمكسب الجوهري: MySQL 8.4 LTS مدعوم حتى أبريل 2032 — ست سنوات من تصحيحات الأمان المضمونة دون الحاجة إلى ترقية أخرى طوال عمر الإصدار.