PmaControl logo PmaControl
  • مرحباً
  • PmaControl
    • وكلاء الذكاء الاصطناعي 13 وكلاء محليين
    • عروضنا المجتمع، السحابة، محليًا، المميز
    • التوثيق أدلة، API، الهندسة المعمارية
    • السوق المكونات الإضافية للمجتمع
    • عملاء أكثر من 28 شركة
    • الأسئلة الشائعة 25 سؤالا / 7 فئات
    قواعد البيانات
    • ماريا دي بي 31 مادة
    • ماي إس كيو إل 11 مادة
    • مجموعة جاليرا 6 عناصر
    • ماكس سكيل 3 عناصر
    • ProxySQL 2 عناصر
    • أمازون أورورا ماي إس كيو إل 0 العناصر
    • قاعدة بيانات أزور 0 العناصر
    • انقر البيت 0 العناصر
    • GCP CloudSQL 0 العناصر
    • بيركوناسيرفر 0 العناصر
    • متجر واحد 0 العناصر
    • تي دي بي 0 العناصر
    • سرعة 0 العناصر
    الحلول
    • دعم 24 × 7 حالات الطوارئ MariaDB وMySQL
    • Observabilité SQL المراقبة والتنبيهات والطوبولوجيا
    • Haute disponibilité النسخ المتماثل، تجاوز الفشل، جاليرا
    • Disaster Recovery النسخ الاحتياطي والاستعادة، RPO/RTO
    • Sécurité & conformité التدقيق، اللائحة العامة لحماية البيانات، SOC2
    • Migration & upgrade صفر توقف عن العمل، pt-osc، gh-ost
  • عروضنا
  • موارد
    • التوثيق الأدلة الفنية وواجهات برمجة التطبيقات
    • مركز تحسين MySQL مؤشر تخفيض السعر والمقاييس والإعدادات والحوادث
    • الأسئلة الشائعة 25 سؤالا متكررا
    • الشهادات ملاحظات العملاء وحالات الاستخدام
    • مدونة مقالات ورؤى
    • خريطة الطريق الميزات القادمة
    مجالات الخبرة
    • Observabilité SQL المراقبة والتنبيهات وطوبولوجيا Dot3
    • Haute disponibilité النسخ المتماثل، تجاوز الفشل، جاليرا
    • Sécurité & conformité التدقيق، اللائحة العامة لحماية البيانات، SOC2، ISO 27001
    • Disaster Recovery النسخ الاحتياطي والاستعادة، RPO/RTO
    • Performance & optimisation ملخصات، شرح، ضبط
    • Migration & upgrade صفر توقف عن العمل، pt-osc
    روابط سريعة
    • جيثب ويكي 26 صفحة - التثبيت والمحرك والمكونات الإضافية
    • كود المصدر مستودع جيثب الرسمي
    • دعم 24 × 7 حالات الطوارئ MariaDB وMySQL
    • احجز عرضًا توضيحيًا 30 دقيقة - هندسة معمارية حقيقية
  • دعم 24 × 7
  • احجز عرضًا توضيحيًا
احجز عرضًا توضيحيًا
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文 🇸🇦 AR العربية
← العودة إلى بلوق

MyISAM قديم: حان وقت الترحيل

تم النشر بتاريخ 4 أغسطس 2025 بواسطة Sylvain ARBAUDIE
mysql myisam innodb migration
يشارك X LinkedIn Facebook Email PDF
MyISAM قديم: حان وقت الترحيل

نهاية حقبة

MyISAM عفا عليه الزمن رسميًا. وهذا ليس مفاجئا، فقد كان واضحا منذ سنوات. ولكن هذه المرة، تم تسجيله في الكود المصدري لـ MariaDB / MySQL: تم وضع علامة على محرك MyISAM على أنه مهمل، وتم ترحيل آخر المعاقل التي استخدمته داخليًا.

قاعدة بيانات النظام mysql (التي تخزن المستخدمين والامتيازات وجداول المنح) لم تعد تستخدم MyISAM. ولا الجداول المؤقتة الداخلية. لقد اختفى للتو العذران الأخيران للتسامح مع MyISAM في الإنتاج.

لماذا نجا MyISAM لفترة طويلة

لفهم الوضع الحالي، يجب علينا العودة إلى تاريخ MyISAM ودوره في النظام البيئي.

كان MyISAM هو محرك التخزين الافتراضي لـ MySQL حتى الإصدار 5.5 (2010). لأكثر من عقد من الزمان، كان هذا هو الخيار الافتراضي لملايين تطبيقات الويب. WordPress، Joomla، Drupal، phpBB - تم تطوير جميع هذه التطبيقات واختبارها بشكل أساسي باستخدام MyISAM.

كانت مزايا MyISAM حقيقية في ذلك الوقت:

  • البساطة: ملف .MYD للبيانات، وملف .MYI للفهارس. سهل الحفظ وسهل النقل.
  • أداء القراءة: بالنسبة لأحمال عمل القراءة الخالصة (المدونات ومواقع العرض)، كان MyISAM سريعًا.
  • البحث عن النص الكامل: يدعم MyISAM البحث عن النص الكامل قبل InnoDB.
  • مساحة منخفضة للذاكرة: استخدم MyISAM القليل من ذاكرة الوصول العشوائي، وهو أمر بالغ الأهمية في أيام الخوادم التي تبلغ سعتها 512 ميجابايت.

لكن هذه المزايا أصبحت بقايا. يقدم InnoDB الآن كل هذا وأكثر.

لماذا تحتاج إلى الهجرة الآن

لا توجد معاملات

MyISAM لا يدعم معاملات ACID. لا BEGIN، لا COMMIT، لا ROLLBACK. كل بيان ملتزم بذاته. في حالة حدوث عطل أثناء الكتابة، تكون بياناتك في حالة غير محددة.

لا يوجد قفل على مستوى الصف

يستخدم MyISAM القفل على مستوى الجدول. تؤدي عملية كتابة واحدة إلى قفل الجدول بأكمله، مما يؤدي إلى حظر كافة عمليات القراءة والكتابة الأخرى. مع InnoDB، يتم القفل على مستوى الصف، مما يسمح بالتزامن.

لا توجد مفاتيح خارجية

MyISAM لا يدعم قيود المفاتيح الخارجية. لا يوجد تكامل مرجعي على المستوى الأساسي. أنت تعتمد كليًا على التطبيق للحفاظ على اتساق البيانات.

الفساد المتكرر

من المعروف أن جداول MyISAM هشة. إيقاف تشغيل مفاجئ للخادم، امتلاء القرص، وkill -9 من عملية mysqld - وجداولك تالفة. myisamchk وREPAIR TABLE أصبحا أفضل أصدقائك، لكنهما ليسا معصومين من الخطأ.

تطوير أكثر نشاطا

ولعل هذه هي الحجة الأكثر أهمية. لم يعد أحد يعمل على MyISAM بعد الآن. لا توجد إصلاحات للأخطاء، ولا تحسينات في الأداء، ولا توجد ميزات جديدة. إنه رمز مجمد يؤدي إلى تراكم الديون الفنية.

الهجرة: أبسط مما تعتقد

والخبر السار هو أن الترحيل من MyISAM إلى InnoDB هو أمر بسيط بشكل عام.

تحديد جداول MyISAM

SELECT table_schema, table_name, engine, table_rows,
       ROUND(data_length / 1024 / 1024, 2) AS data_mb
FROM information_schema.tables
WHERE engine = 'MyISAM'
  AND table_schema NOT IN ('mysql', 'information_schema',
                            'performance_schema', 'sys')
ORDER BY data_length DESC;

تحويل جدول

ALTER TABLE mydb.mytable ENGINE = InnoDB;

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

نقاط الاهتمام

بعض الحالات الخاصة التي يجب الانتباه لها أثناء الهجرة:

جداول النص الكامل: إذا كنت تستخدم فهارس FULLTEXT على MyISAM، فهذا خبر جيد — InnoDB يدعم فهارس FULLTEXT منذ MySQL 5.6 / MariaDB 10.0. بناء الجملة متطابق.

دمج الجداول: إذا كنت تستخدم محرك MERGE (اتحاد جداول MyISAM)، فستحتاج إلى إعادة التفكير في بنيتك. InnoDB التقسيم أو طرق العرض هي بدائل.

*COUNT() بدون WHERE*: يقوم MyISAM بتخزين العدد الدقيق للصفوف، مما يجعل `SELECT COUNT() FROM tableفوريًا. InnoDB يجب أن يقوم بمسح الفهرس. إذا كان تطبيقك يستخدم في كثير من الأحيانCOUNT(*)` غير المشروط، فستلاحظ اختلافًا (بسيطًا بالنسبة للجداول التي تحتوي على أقل من مليون صف).

مساحة القرص: InnoDB يستخدم مساحة قرص أكبر من MyISAM لنفس البيانات (في المتوسط ​​1.5-2x أكثر)، ويرجع ذلك أساسًا إلى MVCC وإدارة المعاملات. تحقق من المساحة المتوفرة لديك قبل الترحيل.

البرنامج النصي للترحيل الجماعي

بالنسبة للقواعد التي تحتوي على العديد من جداول MyISAM، إليك طريقة منهجية:

-- Générer les commandes ALTER TABLE
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name,
              '` ENGINE=InnoDB;') AS migration_sql
FROM information_schema.tables
WHERE engine = 'MyISAM'
  AND table_schema NOT IN ('mysql', 'information_schema',
                            'performance_schema', 'sys')
ORDER BY data_length ASC;

ابدأ بأصغر الجداول للتحقق من صحة العملية، ثم انتقل إلى الجداول الأكبر.

بعد الهجرة

بمجرد ترحيل جميع جداولك إلى InnoDB، يوصى ببعض تعديلات التكوين:

# my.cnf
[mysqld]
default_storage_engine = InnoDB
innodb_buffer_pool_size = 70%  # de la RAM disponible
innodb_log_file_size = 256M    # ou plus selon la charge
innodb_flush_log_at_trx_commit = 1  # durabilité complète

وقم بإلغاء تنشيط ميزات MyISAM التي لم تعد بحاجة إليها:

skip-external-locking
key_buffer_size = 8M  # minimum, pour les tables système restantes

الخلاصة

MyISAM عفا عليه الزمن. وهذا لم يعد رأيا، بل هو حقيقة فنية. تم ترحيل قاعدة بيانات النظام، وتم ترحيل الجداول المؤقتة، والكود في وضع الصيانة بدون مستقبل.

إذا كان لا يزال لديك جداول MyISAM قيد الإنتاج، فهذا هو وقت الترحيل. التحويل بسيط، والفوائد فورية (المعاملات، والقفل لكل سطر، والتعافي من الأعطال)، وتزداد مخاطر البقاء في MyISAM.

ALTER TABLE ... ENGINE=InnoDB; — هذا هو أفضل استعلام ستقوم بتشغيله هذا الأسبوع.


تم نشر هذه المقالة في الأصل على متوسط.

يشارك X LinkedIn Facebook Email PDF
← العودة إلى بلوق

تعليقات (0)

لا توجد تعليقات حتى الآن.

اترك تعليقا

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
إشعارات قانونية GitHub اتصال
لا تنتظر وقوع الحادث حتى تفهم هندستك المعمارية. © 2014-2026 PmaControl — 68Koncept