2010-11-23 51 views
19

有沒有人知道在什麼情況下你可以收到一個1146: Table '<database>.<table>' doesn't exist錯誤當你的表確實存在?MySQL表不存在錯誤,但它確實存在

我在5臺服務器上使用相同的代碼,只有我最近租用的代碼顯示此錯誤,所以我懷疑它可能是某種設置或安裝錯誤。我可以從命令行執行我的sql語句就好了。顯然,我可以從命令行看到表格。我在建立連接時沒有遇到任何連接錯誤(我正在使用mysqli,btw)。

任何幫助,將不勝感激。

精確查詢:

$sql = "SELECT DISTINCT(mm_dic_word) AS word FROM spider.mm_dictionary WHERE mm_dic_deleted=0"; 
+0

你能向我們展示確切的查詢,你在哪裏得到這個問題? – 2010-11-23 20:29:50

+0

是啊查詢在哪裏? – luckytaxi 2010-11-23 20:32:37

+0

你可以使用終端到達數據庫嗎? – 2010-11-23 20:33:55

回答

2

基本上,我相信我遇到的問題是由於不同的密碼哈希長度。在我的情況下,我得到了一個新的服務器,做了一個完整的mysql轉儲,它也傳遞了密碼和用戶信息。新服務器已經使用具有16char長度散列的root用戶初始化,但我的舊服務器使用了較新的32個char散列長度。

我不得不去my.conf設置舊的密碼設置爲0(其他明智每次我嘗試更新數據庫,新的更新是16個字符的長度)。然後我通過命令UPDATE mysql.user SET password=PASSWORD('password here');更新了所有的密碼,然後我刷新了權限。

顯然,讓每個用戶使用相同的密碼是一個非常糟糕的主意,所以我在確認它正在工作後逐一更改它們。

我在我遇到這個解決方案之前發現了一些我沒做過的工作here的博客文章(以防一個或多個變化影響我的結果),但是,我認爲上述解決方案是完整的......但我沒有試圖重現錯誤,所以我不能100%確定。

2

難道說你的一臺服務器是一臺Linux機器? Mysql在Linux上區分大小寫,但在Windows上不敏感。

1

我曾經有過這種行爲。後來我發現我使用的JDBC驅動程序將我的查詢改爲小寫,所以我無法使用我的數據庫(使用混合大小寫字母),儘管我的代碼使用了正確的混合字母。

0

如果您以無權查看該數據庫/表的人身份登錄,那麼您可能會得到該結果。你是否在命令行中使用與你通過mysqli相同的登錄名?

0

它可能與將InnoDB和MyISAM表放在一起有關。如果您複製數據庫文件,MyISAM將會很好,InnoDB將會顯示,但無法工作。

44

這只是發生在我身上,過了一段時間,我在博客文章中找到了答案,並且希望將它也放在這裏。

如果複製的MySQL數據目錄從/var/lib/mysql/path/to/new/dir,但只複製數據庫的文件夾(即mysqlwpdbecommerce等),你有InnoDB表,你InnoDB表將在「顯示錶」現身但對它們的查詢(selectdescribe)將失敗,並顯示錯誤Mysql error: table db.tableName doesn't exist。你會在db目錄中看到.frm文件,並想知道爲什麼。

InnoDB表,它在ib*文件,這在我的情況是ibdata1ib_logfile0,並ib_logfile1複製是非常重要的。一旦我做了轉讓,確保將其複製完畢,一切都按預期工作。

如果my.cnf文件包含「innodb_file_per_table」,.ibd文件將出現在db目錄中,但仍需要ib *文件。

4

在這種情況下使用mysqlcheck將是順序 - 所以你可以放棄表格完整性問題&如果需要修復它們。

0

我在一個使用mysql 5.1和xfs文件系統的centos 6.4系統上看到過這個。

這些表顯示'顯示錶',但選擇或描述失敗,表中不存在消息,如您所述。這些文件是我期望它們的地方。

系統運行良好數月,然後在更改/etc/my.cnf以將table_cache設置爲512而不是256之後重新啓動服務mysqld之後,它橫向移動。

根據arcconf,raid控制器認爲一切正常。 xfs_check沒有找到任何東西。 IPMI的系統事件列表清晰。 dmesg顯示了iptables關於連接跟蹤和丟包的一些抱怨,所以我們可能已經DOS了,但是因爲在服務器上沒有真正面對外面的問題,所以我沒有看到它會如何影響mysql的數據完整性?

我最終推動奴隸掌握和重新加載系統,現在想知道什麼可能導致錯誤,如果在centos 6.4上選擇xfs仍然是一個穩定的選擇,或者如果罪魁禍首是mysql 5.1 。

哦是的,永遠不會改變正在運行的系統:)

0

Mac OS X? 停止,不要重新複製任何東西......

我在小牛隊有幾次這個問題。不再包含MySQL,但我的安裝基本上與您期望在Snow Leopard上找到的相同,我認爲,而不是MAMP或其他。

從一臺計算機遷移到另一臺後,出現此問題。這是MySQL控制面板啓動mysqld的結果,而不是我在命令行上啓動的結果。 (在遷移時,這個稍微過時的控制面板會忘記您告訴它不要在啓動時啓動。)

查看我的系統上的進程(頂部或活動監視器):如果所有者爲root,則啓動時啓動並且不能正常工作;正確的過程將擁有_mysql作爲所有者。

有時候,我兩個人都並肩奔跑!

奇怪的是,你可以做所有事情,包括通過命令行使用mysql。但是,即使列出了innodb表,它們在查詢時也會生成不存在的錯誤。

這似乎是一個所有權問題,也可能適用於其他系統。

0

當我試圖用UPPERCASE選擇一個表格並且表格名稱爲小寫時,這種情況發生在我身上。

所以,爲了解決這個問題,我在my.cnf文件中加入了「lower_case_table_names = 1」。

相關問題