MySQL查詢報錯:ERROR 1146 (42S02): Table 'craw.sitePageConfig' doesn't exist

tolywang發表於2016-11-17
    今天一同事諮詢mysql的問題,在mysql主庫訪問某個表報錯, 但是備庫上可以,感覺有點奇怪。即使不同步,
也不能說主庫不能訪問啊。

    既然是主備,就從主備同步開始查。各種show master status\G, show binary logs , 在備庫上show slave status\G,
在備庫上看到: 
Salve_IO_Runing : NO
Salve_SQL_Runing : YES
顯然已經不同步了,看到Relay_Master_Log_File是 mysql-bin.000064, 但是在主庫上show binary logs檢視的是:67,68,69,
已沒有了 64,65,66 。

在備庫上也看到了Last_IO_Error的報錯很明顯,1236嚴重錯誤,Could not find first log file name in binary log index file.

    不同步確認了,那麼為啥主庫的表也不能訪問呢。許可權確認了,沒有問題。遇到的最多的應該就是大小寫問題了,這個也是mysql
做的比較差的地方。 在主庫查詢全部是小寫的表,沒有報錯,查詢大小寫混合的表,都報錯,提示一樣 : 

ERROR 1146 (42S02): Table 'craw.sitePageConfig' doesn't exist 

    查詢my.cnf下的lower_case_table_names引數,發現果然,引數是1,預設是0來的,檢視my.cnf檔案修改日期,是2天前,而備
庫上的my.cnf是半年前的。大致找到原因後,如何進行解決呢 ? 改回來 ? 

    改回來(改為0)其實應該是OK的。待驗證。其實在Linux/Unix下會碰到這種錯誤,在windows下不會。 為什麼呢。因為MySQL中
資料庫相當於資料目錄下的目錄,表相當於目錄下的檔案,而Linux/Unix系統是區分大小寫的(windows不區分),建立了大小寫混合
的庫或表後,我們在修改引數lower_case_table_names=1 ,這時MySQL將所有SQL中的表名都翻譯為了小寫(為了大小寫不敏感),
但是Linux下沒有全部是小寫的這個檔案或目錄(表或庫)。 就出現了找不到的情況。 

    如果你是windows平臺下開發的,完了之後放到Linux上,很可能會碰到這個錯誤。必須去掉大小寫敏感。  
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-2128651/,如需轉載,請註明出處,否則將追究法律責任。

相關文章