سؤال

يعطيني MySQL الحزن عندما أحاول إعادة إنشاء جدول معين في قاعدة بيانات معينة ؛ أعتقد أن المشكلة هي أن MySQL في مكان ما لديه بعض السجلات للمفاتيح الخارجية للجدول ويستمر في محاولة التحقق من القيد عندما أحاول إعادة إنشاء الجدول.

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

ومع ذلك ، الليلة الماضية عندما ذهبت للقيام بهذا الإجراء ، ركضت فجأة إلى Errno: 121 من MySQL ، والذي يرتبط عادةً بمفتاح خارجي غير صحيح ... إذا حاولت مع وجود جدول مختلف ، دون تحديد مفتاح ، أحصل على Errno: 150 في حين أن. ومع ذلك ، يحدث هذا فقط إذا حاولت تطبيق التفريغ على قاعدة بيانات جديدة بنفس الاسم تمامًا مثل الاسم القديم. إذا قمت بإنشاء قاعدة بيانات تحمل اسمًا مختلفًا عن اسم قديم (على نفس الخادم لا يزال) وتطبيق التفريغ ، فلا توجد مشكلة.

في الواقع ، لا يمكنني حتى إنشاء جدول من نفس الاسم بالضبط دون أي مفاتيح على الإطلاق حتى في قاعدة بيانات جديدة تمامًا.

يوضح هذا المثال المشكلة

mysql> create database test_db;
Query OK, 1 row affected (0.01 sec)

mysql> connect test_db;
Connection id:    1590
Current database: test_db

mysql> create table client_feed_group(id int);
ERROR 1005 (HY000): Can't create table './test_db/client_feed_group.frm' (errno: 150)
mysql> create database new_db_name;
Query OK, 1 row affected (0.00 sec)

mysql> connect new_db_name;
Connection id:    1591
Current database: new_db_name

mysql> create table client_feed_group(id int);
Query OK, 0 rows affected (0.01 sec)

لقد أسقطت بالفعل قاعدة بيانات test_db ؛ هذا يجب أن يزيل جميع الجدول وجميع السجلات. أقوم بعد ذلك بإنشائها ، والاتصال بها وحاول إنشاء Table Client_Feed_Group القديم ؛ أحصل على خطأ. أقوم بإنشاء قاعدة بيانات أخرى تحمل اسمًا مختلفًا وأتبع نفس الخطوات ؛ هذه المرة لا توجد مشكلة.

هل كانت مفيدة؟

المحلول

يبدو أنه هو نفسه هذا الخطأ mysql.

الإجراء الموجود بعيدًا في التعليقات عملت بالنسبة لي ، أي

  • قم بإنشاء الجدول مرة أخرى باستخدام نفس المخطط مثل المخطط القديم ، ولكن باستخدام محرك Myisam
  • استخدم جدول Alter لتغيير المحرك إلى Innodb

بعد ذلك يبدو أن الأمور تعمل بشكل صحيح ؛ يمكنني الآن إسقاط قاعدة البيانات والقيام باستعادة كاملة دون أي مشاكل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top