2010-10-30 85 views
1

當我嘗試在特定數據庫中重新創建特定表時,MySQL給我帶來了悲傷;我相信問題在於某處MySQL有一些表的外鍵記錄,並在嘗試重新創建表時嘗試檢查約束。MySQL「記得」刪除了InnoDB表

相關數據庫針對測試環境,並通過轉儲prod數據庫,刪除測試數據庫,再次創建測試數據庫,然後將prod數據庫轉儲應用到新的測試數據庫來定期刷新。

但是昨天晚上當我去做這個程序時,我突然遇到了MySQL的errno:121,它通常與不正確的外鍵有關......如果我嘗試使用不同的表定義,而沒有指定鍵,改爲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數據庫的問題;這應該刪除所有表和所有記錄。然後我創建它,連接到它並嘗試創建舊錶client_feed_group;我收到一個錯誤。我使用不同的名稱創建另一個數據庫,並遵循相同的步驟;這一次沒有問題。

+0

數據庫中是否有其他表,可能包含引用'client_feed_group'的外鍵約束? 'perror 150' - >'MySQL錯誤代碼150:外鍵約束錯誤地形成了' – joschi 2010-10-30 07:01:36

+0

在我上面的示例中,根本沒有數據庫中的其他表,並且沒有外鍵在我的create table調用中定義 - 請注意上面的第一個行爲是創建數據庫,所以它應該是空的。 – 2010-10-31 04:25:53

回答

1

它看起來與this MySQL bug相同。

位於靠後的意見爲我工作的程序,也就是

  • 創建表再次使用相同的模式與舊,但使用MyISAM引擎
  • 使用ALTER TABLE來改變引擎到innodb

此後事情似乎正常工作;我現在可以刪除數據庫並進行完全恢復,沒有任何問題。