لو عندك MySQL 8.0 في production الشهر ده، عندك أيام قليلة قبل ما الدعم الرسمي من Oracle يقف نهائيًا. المقال ده هيديك قرار واضح: إمتى تهاجر لـ 8.4 LTS، وإمتى توقف عند 8.0.46، وإمتى فعلاً تفكر في fork زي Percona أو MariaDB.
MySQL 8.0 EOL في أبريل 2026: قرارك قبل 8.0.46 النهائية
المشكلة باختصار
Oracle حدّدت إن MySQL 8.0 هيوصل End of Life في أبريل 2026 بإصدار 8.0.46 كآخر release رسمي. بعد التاريخ ده، مفيش security patches ولا bug fixes ولا دعم رسمي من Oracle. سواء شغّال على HeatWave أو On-Prem أو managed service زي RDS وCloud SQL، الضغط مش نظري. الترقية لـ 8.4 LTS لازم تكون على روديك Q2 2026.
الافتراض هنا إن عندك واحد أو أكثر من: تطبيق PHP/Node/Python بيكلّم MySQL 8.0 مباشرة، replication setup، أو managed DB على AWS/GCP/Azure.
ليه 8.4 LTS مش مجرد upgrade عادي
Oracle بتسوّق 8.4 كترقية سلسة. الكلام ده صحيح بنسبة 80% تقريبًا، لكن الـ 20% الباقية هي اللي بتكسر production في منتصف الليل.
أكبر نقطة كسر: الـ mysql_native_password plugin. في 8.0 كان shipped ومُفعّل افتراضيًا. في 8.4 بقى معطّل. أي connection جاي من client قديم مش بيدعم caching_sha2_password هيفشل برسالة "Authentication method unknown to the client" بدون ما يوضّح السبب الحقيقي.
نقاط كسر تانية بتظهر في production:
- SSL/TLS certificates موقّعة بـ SHA-1 مرفوضة — أي cert قديم لازم يتجدّد بـ SHA-256.
- group replication بياخد defaults مختلفة لـ
group_replication_consistency(BEFORE_ON_PRIMARY_FAILOVER). - أوامر
mysql_upgradeالقديمة اتشالت من 8.0.16 أصلاً، ولكن في 8.4 أي سكربت أتمتة لسه بيستدعيها هيفشل. - partitioning على engines غير InnoDB (زي MyISAM partitioned tables) اتشال — الجدول بيرفض الإقلاع.
- الـ query cache (كان شبه ميت في 8.0) اختفى خالص، أي تطبيق لسه معتمد على
SQL_CACHEhints هيلاقي errors.
شرح سريع قبل ما نكمل: إيه يعني caching_sha2_password؟
تخيل إنك ساكن في عمارة، والإدارة قرّرت تغيّر قفل البوابة من مفتاح عادي لبطاقة RFID. جيرانك اللي عندهم البطاقات بيدخلوا عادي. أي حد لسه ماسك مفتاح قديم بيقف قدام الباب مش فاهم السبب.
نفس الكلام في MySQL. الـ authentication plugin هو الطريقة اللي بيها الـ client بيثبت للـ server إنه هو فعلاً اليوزر اللي بيدّعيه. mysql_native_password هو الطريقة القديمة (مبنية على SHA-1)، وcaching_sha2_password هي الجديدة (مبنية على SHA-256 + caching). الجديدة أقوى أمنيًا وأسرع لأنها بتخزن الـ hash في memory بعد أول authentication ناجح.
تقنيًا: الـ server في 8.4 مش هيحاول يتفاهم مع client بيطلب الطريقة القديمة بشكل افتراضي. لازم كل الـ drivers (mysql-connector-python ≥ 8.0.11، mysql2 Node.js ≥ 2.0، JDBC ≥ 8.0.11) تكون مُحدَّثة، أو كل الـ users يتحوّلوا يدويًا للـ plugin الجديد.