استكشاف الأخطاء التي تتم مواجهتها عادة أثناء الترحيل أو بعده إلى قاعدة بيانات Azure ل MySQL - الخادم المرن

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

هام

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

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

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

خطأ 1184 (08S01): تم إنهاء الاتصال 22 بموقع db: 'db-name' user: 'user' host: 'hostIP' (init_connect command failed)

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

هناك بعض معلمات الخادم مثل require_secure_transport التي لا يتم دعمها على مستوى الجلسة، وبالتالي فإن محاولة تغيير قيم هذه المعلمات باستخدام init_connect يمكن أن يؤدي إلى ظهور الخطأ 1184 أثناء الاتصال بمثيل خادم Azure Database for MySQL المرن كما هو موضح أدناه:

mysql> تظهر قواعد البيانات؛ خطأ 2006 (HY000): انقطع خادم MySQL عن الاتصال. محاولة إعادة الاتصال... معرف الاتصال: 64897 قاعدة البيانات الحالية: *** NONE *** خطأ 1184 (08S01): تم إحباط الاتصال 22 إلى db: مستخدم 'db-name': 'user' host: 'hostIP' (الأمر init_connect باء بالفشل)

الحل: إعادة تعيين init_connect القيمة في علامة تبويب معلمات الخادم في مدخل Microsoft Azure وتعيين معلمات الخادم المدعومة فقط باستخدام معلمة init_connect.

أخطاء بسبب عدم وجود امتياز SUPER ودور DBA

لا يتم دعم امتياز SUPER ودور DBA على الخدمة. نتيجة لذلك، قد تواجه بعض الأخطاء الشائعة المذكورة أدناه:

ERROR 1419: ليس لديك امتياز SUPER ويتم تمكين التسجيل الثنائي (قد ترغب في استخدام متغير log_bin_trust_function_creators الأقل أمانا)

قد يحدث الخطأ أعلاه في أثناء إنشاء دالة أو مشغل كما هو موضح أدناه أو ترحيل مخطط. تتم كتابة عبارات DDL مثل إنشاء دالة أو إنشاء مشغل في التسجيل الثنائي بحيث يمكن تنفيذ النسخة المتماثلة الثانوية لهم. تمتلك النسخة المتماثلة لثغرة SQL الامتيازات الكاملة، والتي يمكن استغلالها لرفع الامتيازات. لحماية الخوادم التي لديها تسجيل ثنائي من هذا الخطر، يطلب محرك MySQL أن يمتلك مؤسسو الدالة المخزنة امتياز SUPER بالإضافة إلى امتياز CREATE ROUTINE المعتاد.

CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
  RETURN i;
END;

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

خطأ 1227 (42000) في السطر 101: تم رفض الوصول; تحتاج إلى امتياز (امتيازات) SUPER (واحد على الأقل) لهذه العملية. فشلت العملية مع رمز الخروج 1

قد يحدث الخطأ أعلاه أثناء استيراد ملف تفريغ أو إنشاء إجراء يحتوي على محددات.

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

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

بدلاً من ذلك، يمكنك استبدال المحددات باسم المستخدم المسؤول الذي يقوم بتشغيل عملية الاسترداد كما هو موضح أدناه.

DELIMITER;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003
DELIMITER;;

/* Modified to */

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003
DELIMITER ;

خطأ 1227(42000) في السطر 295: تم رفض الوصول; تحتاج إلى امتياز SUPER (واحد على الأقل) أو امتياز SET_USER_ID لهذه العملية.

قد يحدث الخطأ أعلاه في أثناء تنفيذ CREATE VIEW مع عبارات DEFINER كجزء من استرداد ملف تفريغ أو تشغيل برنامج نصي. لا يسمح خادم Azure Database for MySQL المرن بامتيازات SUPER أو امتياز SET_USER_ID لأي مستخدم.

التحليل:

  • استخدم مستخدم التعريف لتنفيذ CREATE VIEW إذا أمكن. من المحتمل أن وجود العديد من طرق العرض مع المحددات المختلفة التي تمتلك أذونات مختلفة لذلك قد يتعذر تنفيذ الأمر. OR
  • قم بتحرير ملف التفريغ أو إنشاء برنامج نصي CREATE VIEW وإزالة DEFINER = العبارة من ملف التفريغ. OR
  • تحرير ملف تفريغ أو البرنامج النصي CREATE VIEW واستبدال قيم التعريف مع المستخدم بأذونات المسؤول الذي يقوم باسترداد أو تحرير ملف البرنامج النصي.

تلميح

استخدام sed أو perl لتعديل ملف تفريغ أو البرنامج النصي SQL لاستبدال عبارة= DEFINER

خطأ 1227 (42000) في السطر 18: تم رفض الوصول; تحتاج إلى امتياز (امتيازات) SUPER (واحد على الأقل) لهذه العملية.

قد يحدث الخطأ أعلاه إذا كنت تستخدم محاولة استيراد ملف تفريغ من قاعدة بيانات Azure لمثيل خادم MySQL المرن مع تمكين GTID إلى قاعدة بيانات Azure الهدف لمثيل الخادم المرن MySQL. يضيف Mysqldump SETSESSION.sql_log_bin = 0 عبارة إلى ملف تفريغ من خادم حيث يتم استخدام GTIDs، مما يؤدي إلى تعطيل التسجيل الثنائي أثناء إعادة تحميل ملف التفريغ.

الحل: لحل هذا الخطأ أثناء استيراد الأسطر أدناه أو إزالتها أو التعليق عليها في ملف mysqldump وتشغيل الاستيراد مرة أخرى للتأكد من نجاحه.

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

أخطاء الاتصال الشائعة لتسجيل دخول مسؤول الخادم

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

خطأ 1045 (28000): تم رفض الوصول للمستخدم 'username'@'IP address' (باستخدام كلمة المرور: نعم)

يحدث الخطأ أعلاه إذا:

  • كان اسم المستخدم غير موجود.
  • تم حذف اسم المستخدم.
  • يتم تغيير كلمة المرور الخاصة به أو إعادة تعيينها.

التحليل:

  • التحقق من صحة "اسم المستخدم" الموجود كمستخدم صالح في الخادم أو تم حذفه عن طريق الخطأ. يمكنك تنفيذ الاستعلام التالي عن طريق تسجيل الدخول إلى قاعدة بيانات Azure لمستخدم الخادم المرن MySQL:

    select user from mysql.user;
    
  • إذا لم تتمكن من تسجيل الدخول إلى مثيل خادم Azure Database for MySQL المرن لتنفيذ الاستعلام أعلاه نفسه، نوصيك بإعادة تعيين كلمة مرور المسؤول باستخدام مدخل Microsoft Azure. سيساعد خيار إعادة تعيين كلمة المرور من مدخل Azure في إعادة إنشاء المستخدم وإعادة تعيين كلمة المرور واستعادة أذونات المسؤول، والتي ستسمح لك بتسجيل الدخول باستخدام مسؤول الخادم وإجراء المزيد من العمليات.

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

إذا لم تجد الإجابة التي تبحث عنها، فانظر في الخيارات التالية: