استكشاف مشكلات الاتصال وإصلاحها في قاعدة بيانات Azure ل MySQL - الخادم المرن

ينطبق على:قاعدة بيانات Azure لـ MySQL - خادم فردي قاعدة بيانات Azure لـ MySQL - خادم مرن

هام

قاعدة بيانات Azure لخادم MySQL الفردي على مسار الإيقاف. نوصي بشدة بالترقية إلى قاعدة بيانات Azure لخادم MySQL المرن. لمزيد من المعلومات حول الترحيل إلى خادم Azure Database for MySQL المرن، راجع ما الذي يحدث لقاعدة بيانات Azure لخادم MySQL الفردي؟

يدير MySQL Community Edition الاتصالات باستخدام مؤشر ترابط واحد لكل اتصال. ونتيجة لذلك، يحصل كل اتصال مستخدم على مؤشر ترابط نظام تشغيل مخصص في عملية mysqld.

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

تشخيص أخطاء الاتصال الشائعة

كلما كان مثيل Azure Database for MySQL المرن يواجه مشكلات في الاتصال، تذكر أن المشكلات يمكن أن توجد في أي من الطبقات الثلاث المعنية: جهاز العميل أو الشبكة أو مثيل خادم Azure Database for MySQL المرن.

ونتيجة لذلك، كلما قمت بتشخيص أخطاء الاتصال، تأكد من مراعاة التفاصيل الكاملة ل:

  • العميل، بما في ذلك:
    • التكوين (محلي أو Azure VM وما إلى ذلك أو جهاز DBA).
    • نظام التشغيل.
    • البرامج والإصدارات.
  • سلسلة الاتصال وأي معلمات مضمنة.
  • مخطط الشبكة (نفس المنطقة؟ نفس AZ؟ قواعد جدار الحماية؟ التوجيه).
  • تجمع الاتصال (المعلمات والتكوين)، إذا كان أحدها قيد الاستخدام.

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

تأكد من النظر في إمكانية التحميل الزائد لحمل العمل أيضا، خاصة إذا فتح التطبيق طفرة في الاتصالات في فترة قصيرة جدا من الوقت. يمكنك استخدام مقاييس مثل "إجمالي الاتصالات" و"الاتصالات النشطة" و"الاتصالات التي تم إجهاضها" للتحقيق في ذلك.

عند إنشاء اتصال من جهاز عميل أو تطبيق، فإن أول استدعاء مهم في mysql هو getaddrinfo، الذي ينفذ ترجمة DNS من نقطة النهاية المقدمة إلى عنوان IP. إذا فشل الحصول على العنوان، يعرض MySQL رسالة خطأ مثل "ERROR 2005 (HY000): مضيف خادم MySQL غير معروف "mysql-example.mysql.database.azure.com" (11)" والرقم في النهاية (11 و110 وما إلى ذلك).

رموز الخطأ 2005 من جانب العميل

تظهر الملاحظات المرجعية السريعة لبعض رموز الخطأ 2005 من جانب العميل في الجدول التالي.

رمز الخطأ 2005 ملاحظات
(11) "EAI_SYSTEM - خطأ في النظام" يوجد خطأ في دقة DNS من جانب العميل. لا توجد مشكلة في خادم Azure Database for MySQL المرن. استخدم dig/nslookup على العميل لاستكشاف الأخطاء وإصلاحها.
(110) "ETIMEDOUT - مهلة الاتصال" كانت هناك مهلة للاتصال بخادم DNS الخاص بالعميل. لا توجد مشكلة في خادم Azure Database for MySQL المرن. استخدم dig/nslookup على العميل لاستكشاف الأخطاء وإصلاحها.
(0) "الاسم غير معروف" لم يكن الاسم المحدد قابلا للحل بواسطة DNS. تحقق من الإدخال على العميل. من المحتمل جدا ألا تكون هذه مشكلة في خادم Azure Database for MySQL المرن.

المكالمة الثانية في mysql هي مع اتصال مأخذ التوصيل وعند النظر إلى رسالة خطأ مثل "ERROR 2003 (HY000): لا يمكن الاتصال بقاعدة بيانات Azure لخادم MySQL المرن على "mysql-example.mysql.database.azure.com" (111)"، الرقم في النهاية (99، 110، 111، 113، إلخ).

رمز الخطأ 2003 من جانب العميل

تظهر الملاحظات المرجعية السريعة لبعض رموز الخطأ 2003 من جانب العميل في الجدول التالي.

رمز الخطأ 2003 ملاحظات
(99) "EADDRNOTAVAIL - لا يمكن تعيين العنوان المطلوب" لا يحدث هذا الخطأ بسبب قاعدة بيانات Azure لخادم MySQL المرن، بل هو على جانب العميل.
(110) "ETIMEDOUT - مهلة الاتصال" TThere كانت مهلة تتصل بعنوان IP المقدم. من المحتمل أن يكون هناك مشكلة في الأمان (قواعد جدار الحماية) أو الشبكات (التوجيه). عادة، هذه ليست مشكلة مع خادم Azure Database for MySQL المرن. استخدم nc/telnet/TCPtraceroute على جهاز العميل لاستكشاف الأخطاء وإصلاحها.
(111) "ECONNREFUSED - رفض الاتصال" أثناء وصول الحزم إلى الخادم الهدف، رفض الخادم الاتصال. قد تكون هذه محاولة للاتصال بالخادم الخطأ أو المنفذ الخطأ. قد يتعلق هذا أيضا بالخدمة الهدف (قاعدة بيانات Azure لخادم MySQL المرن) التي يتم إيقافها أو استردادها من تجاوز الفشل أو الانتقال من خلال استرداد الأعطال وعدم قبول الاتصالات بعد. قد تكون هذه المشكلة على جانب العميل أو من جانب الخادم. استخدم nc/telnet/TCPtraceroute على جهاز العميل لاستكشاف الأخطاء وإصلاحها.
(113) "EHOSTUNREACH - المضيف غير قابل للوصول" لا يتضمن جدول توجيه جهاز العميل مسارا إلى الشبكة التي يوجد عليها خادم قاعدة البيانات. تحقق من تكوين شبكة جهاز العميل.

رموز خطأ أخرى

تظهر الملاحظات المرجعية السريعة لبعض رموز الأخطاء الأخرى المتعلقة بالمشكلات التي تحدث بعد تأسيس اتصال الشبكة بخادم قاعدة البيانات بنجاح في الجدول التالي.

رمز الخطأ ملاحظات
ERROR 2013 "فقدان الاتصال بخادم MySQL" تم تأسيس الاتصال، لكنه فقد بعد ذلك. يمكن أن يحدث هذا إذا تمت محاولة اتصال مقابل شيء ليس MySQL (مثل استخدام عميل MySQL للاتصال ب SSH على المنفذ 22 على سبيل المثال). يمكن أن يحدث أيضا إذا قام المستخدم الفائق بقتل الجلسة. يمكن أن يحدث ذلك أيضًا إذا انتهت مهلة قاعدة البيانات لجلسة العمل. أو يمكن أن يشير إلى المشكلات في خادم قاعدة البيانات، بعد تأسيس الاتصال. يمكن أن يحدث هذا في أي وقت خلال عمر اتصال العميل. يمكن أن يشير إلى أن قاعدة البيانات لديها مشكلة خطيرة.
خطأ 1040 (08004): اتصالات كثيرة جدًا عدد عملاء قاعدة البيانات المتصلة بالفعل عند الحد الأقصى المكون. تحتاج إلى تقييم سبب إنشاء العديد من الاتصالات مقابل قاعدة البيانات.
ERROR 1045 "تم رفض الوصول للمستخدم" قدم العميل اسم مستخدم أو كلمة مرور غير صحيحة، لذلك رفضت قاعدة البيانات الوصول.
خطأ 2006 "خادم MySQL قد اختفى" على غرار إدخال ERROR 2013 "Lost connection to MySQL server" في الجدول السابق.
ERROR 1317 "تمت مقاطعة تنفيذ الاستعلام" خطأ يتلقاه العميل عندما يوقف المستخدم الأساسي الاستعلام، وليس الاتصال.
الخطأ 1129 "المضيف '1.2.3.4' محظور بسبب العديد من أخطاء الاتصال" إلغاء الحظر باستخدام "mysqladmin flush-hosts" - سيتم حظر جميع العملاء في جهاز واحد إذا حاول عميل واحد من هذا الجهاز عدة مرات استخدام البروتوكول الخطأ للاتصال ب MySQL (telnetting إلى منفذ MySQL هو مثال واحد). كما تقول رسالة الخطأ، يجب على مستخدم مسؤول قاعدة البيانات تشغيل FLUSH HOSTS; لمسح المشكلة.

إشعار

لمزيد من المعلومات حول أخطاء الاتصال، راجع منشور المدونة الذي يقوم بالتحقيق في مشكلات الاتصال مع خادم Azure Database for MySQL المرن.

الخطوات التالية

للعثور على إجابات النظراء لأسئلتك الأكثر أهمية أو لنشر سؤال أو الإجابة عليه، تفضل بزيارة Stack Overflow.