استكشاف الأخطاء التي تتم مواجهتها عادة أثناء الترحيل أو بعده إلى قاعدة بيانات Azure ل MySQL - الخادم المرن
ينطبق على: قاعدة بيانات Azure ل MySQL - خادم واحد قاعدة بيانات Azure ل MySQL - خادم مرن
هام
قاعدة بيانات Azure لخادم MySQL الفردي على مسار الإيقاف. نوصي بشدة بالترقية إلى قاعدة بيانات Azure لخادم MySQL المرن. لمزيد من المعلومات حول الترحيل إلى خادم Azure Database for MySQL المرن، راجع ما الذي يحدث لقاعدة بيانات Azure لخادم MySQL الفردي؟
Azure Database for MySQL Flexible Server هي خدمة مدارة بالكامل مدعومة بإصدار المجتمع من 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 Flexible Server كما هو موضح أدناه:
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 لخادم 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؛
تعيين @@SESSION. SQL_LOG_BIN= 0; تعيين @@GLOBAL. GTID_PURGED=''؛ تعيين @@SESSION. SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN؛
أخطاء الاتصال الشائعة لتسجيل دخول مسؤول الخادم
عند إنشاء مثيل خادم مرن ل Azure Database for MySQL، يتم توفير تسجيل دخول مسؤول الخادم من قبل المستخدم النهائي أثناء إنشاء الخادم. يسمح لك تسجيل دخول مسؤول الخادم بإنشاء قواعد بيانات جديدة وإضافة مستخدمين جدد ومنح الأذونات. إذا تم حذف تسجيل دخول مسؤول الخادم، أو تم إبطال أذوناته أو تغيير كلمة المرور الخاصة به، فقد تبدأ في رؤية أخطاء الاتصالات في التطبيق الخاص بك أثناء الاتصالات. فيما يلي بعض الأخطاء الشائعة.
خطأ 1045 (28000): تم رفض الوصول للمستخدم 'username'@'IP address' (باستخدام كلمة المرور: نعم)
يحدث الخطأ أعلاه إذا:
- كان اسم المستخدم غير موجود.
- تم حذف اسم المستخدم.
- يتم تغيير كلمة المرور الخاصة به أو إعادة تعيينها.
التحليل:
التحقق من صحة "اسم المستخدم" الموجود كمستخدم صالح في الخادم أو تم حذفه عن طريق الخطأ. يمكنك تنفيذ الاستعلام التالي عن طريق تسجيل الدخول إلى مستخدم Azure Database for MySQL Flexible Server:
select user from mysql.user;
إذا لم تتمكن من تسجيل الدخول إلى مثيل Azure Database for MySQL Flexible Server لتنفيذ الاستعلام أعلاه نفسه، نوصيك بإعادة تعيين كلمة مرور المسؤول باستخدام مدخل Microsoft Azure. سيساعد خيار إعادة تعيين كلمة المرور من مدخل Azure في إعادة إنشاء المستخدم وإعادة تعيين كلمة المرور واستعادة أذونات المسؤول، والتي ستسمح لك بتسجيل الدخول باستخدام مسؤول الخادم وإجراء المزيد من العمليات.