MariaDB / الأساسي: الأسس العلاقية / الدرس 1
خادم MariaDB والعميل ومحركات التخزين
ابنِ تصوراً واضحاً لجلسة MariaDB قبل قراءة البيانات أو تغييرها، وافصل سلوك SQL عن عمل العميل وضمانات محرك التخزين.
في هذه الصفحة
أهداف الدرس
- تحديد إصدار الخادم وهوية الجلسة وقاعدة البيانات الحالية.
- شرح أثر اختيار المحرك في ضمانات المعاملات.
حدود الاتصال المتعددة
خادم MariaDB هو العملية التي تتحقق من الاتصالات وتحلل SQL وتنسق التخزين. برنامج mariadb عميل واحد، بينما يتصل تطبيق الويب عبر موصل. قاعدة البيانات نطاق أسماء للجداول والعروض والروتينات وليست عملية خادم مستقلة. قد تختلف نتيجة العبارة نفسها بحسب وضع SQL والترتيب اللغوي والمحرك. سجّل هذه الظروف قبل تشخيص النتائج، ولا تستخدم أمثلة إنشاء الكائنات إلا داخل بيئة تدريب قابلة للإتلاف.
افحص الجلسة بوضوح
يعرض الاستعلام الأول سياق الجلسة دون سجلات التطبيق. تعرض VERSION() إصدار الخادم؛ لذا لا يثبت إصدار العميل المثبت محلياً هوية الخادم المتصل. تكون DATABASE() بقيمة NULL ما لم تُحدد قاعدة افتراضية. تعرض CURRENT_USER() الحساب المستخدم لفحص الصلاحيات، بينما تصف USER() هوية الاتصال. لا تمنح أي منهما صلاحيات، والقيم تعتمد على البيئة، لذلك لا نعرض اسماً أو إصداراً مختلقاً باعتباره نتيجة فعلية.
SELECT VERSION(), DATABASE(), CURRENT_USER(), USER();
SELECT @@session.sql_mode, @@session.autocommit;
اقرأ النتيجتين كبصمة للجلسة. غالباً يكون autocommit مفعلاً، لكن افحصه بدلاً من افتراض ذلك.
اختر المحرك وفق الضمان المطلوب
يتولى محرك التخزين جانباً أساسياً من التخزين والتزامن. نعتمد InnoDB للمعاملات والتعافي بعد الانهيار وفرض المفاتيح الخارجية. لمحرك Aria استخدامات مهمة في MariaDB وفي العمل الداخلي، لكن تصميمه المقاوم للانهيار لا يجعل جداوله العادية معاملاتية مثل InnoDB. لمحرك MyISAM ضمانات مختلفة. يبين SHOW ENGINES ما تدعمه النسخة الفعلية؛ وتوافر إضافة لا يبرر اختيارها لكل جداول التطبيق.
افصل الإمكانات عن اختيار الجدول
يسرد SHOW ENGINES المحركات وإمكاناتها، بينما يوضح INFORMATION_SCHEMA.TABLES محرك الجدول الموجود. قد تعني النتيجة الفارغة غياب الجدول أو اختلاف اسم القاعدة أو حجب الصلاحيات؛ ولا تثبت غياب InnoDB. تشترك MariaDB وMySQL في أصل وبروتوكولات، لكنهما تطورتا بصورة مختلفة. ارجع إلى وثائق MariaDB لخيارات المحرك ودعم الإصدار بدلاً من افتراض تطابق تعليمات المنتج الآخر.
SHOW ENGINES;
SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'harbor_lab' AND TABLE_TYPE = 'BASE TABLE';
تصف العبارة الأولى الإمكانات، وتحصر الثانية جداول التدريب المرئية. كلاهما مثال للفحص.
صياغة العميل وحدود التدريب
تنهي الفاصلة المنقوطة العبارة عادة في عميل سطر الأوامر. أما DELIMITER الذي سنستخدمه مع الروتينات فهو توجيه للعميل لا عبارة SQL يفهمها الخادم. نجاح الاتصال لا يعني أن تغيير البيانات مناسب. لا يطلب المقرر الاتصال بقاعدة التطبيق؛ الأمثلة تفسيرية وغير قابلة للتشغيل في العرض لأنها روجعت بالاستدلال ولم تنفذ هنا. اقرأ التحذيرات ورموز الأخطاء قبل إعادة المحاولة.
الأخطاء الشائعة وإصلاحها
ERROR 1046 (3D000): No database selected
- لماذا يحدث؟
- اسم الجدول غير المؤهل يحتاج قاعدة افتراضية.
- كيف تصلحه؟
- حدد قاعدة التدريب المطلوبة أو استخدم schema.table.
- كيف تتجنب تكراره؟
- اعرض DATABASE() قبل التعامل مع الكائنات وسجل الوجهة.
لا يظهر أثر للتراجع
- لماذا يحدث؟
- قد يكون المحرك غير معاملاتي أو حفظ autocommit التغيير فعلاً.
- كيف تصلحه؟
- افحص المحرك وحدود المعاملة وأعد بيانات التدريب من تعريفها.
- كيف تتجنب تكراره؟
- اذكر المحرك وافتراضات الجلسة مع كل تغيير.
ERROR 2002 (HY000): فشل الاتصال
- لماذا يحدث؟
- قد لا يوجد خادم يستمع عند مقبس الاتصال المحلي المحدد.
- كيف تصلحه؟
- راجع عنوان الاتصال المصرح ومعلومات الخدمة دون تغيير المصادقة.
- كيف تتجنب تكراره؟
- ميز اتصال المقبس عن TCP وحدد نقاط الاتصال صراحة.
اختبر فهمك
1. يذكر زميل أن عميله MariaDB 11.4. ما الدليل الذي يحدد الخادم ومحرك harbor_lab.shipments؟
اعرض الحل المشروح
استخدم SELECT VERSION() في اتصال التدريب المقصود، ثم افحص INFORMATION_SCHEMA.TABLES بشرطي القاعدة والجدول. اذكر سلسلة إصدار الخادم والمحرك كلّاً على حدة. لا يثبت إصدار العميل أياً منهما، ولا تخمن نتيجة إذا كان الجدول غائباً.
2. يجب نجاح تحديث الطلب وإضافة التدقيق معاً. اختر InnoDB أو Aria العادي وبرر الاختيار.
اعرض الحل المشروح
اختر InnoDB للجدولين واجمع الكتابتين في معاملة صريحة. مقاومة الانهيار وحدها غير كافية؛ المطلوب هو إمكانية التراجع الذري عن التغييرين. تحقق لاحقاً من المفاتيح الخارجية وإعدادات المتانة؛ اختيار المحرك ضروري لكنه لا يحدد سياسة التعافي كاملة.
أهم ما تعلمته
- افحص الخادم والجلسة والمحرك بصورة مستقلة قبل تفسير السلوك.
- التوافق مسألة تُفحص لإصدار MariaDB محدد.