標籤:mysql 1146
錯誤ERROR Table ‘barfoo_datacenter_config.parttemplates‘ doesn‘t exist;
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/70/4D/wKioL1W18JPSqwf-AAJQ7MimIUo972.jpg" title="QQ圖片20150727163429.png" alt="wKioL1W18JPSqwf-AAJQ7MimIUo972.jpg" />
問題解釋:
1、發生該錯誤的情形。我是將別人的資料庫目錄下的data檔案夾直接複製過來的,裡面有三個資料庫mysql、test和barfoo_datacenter_config,主要想要barfoo_datacenter_config資料庫(是拷貝,不是備份),而且barfoo_datacenter_config是使用innodb作為儲存引擎的,這兩方面綜合起來就導致了1146這個錯誤(Table ‘barfoo_datacenter_config.parttemplates‘ doesn‘t exist)。
2、因為要使用innodb做儲存引擎,所以要對my.ini檔案進行相應的修改。在my.ini檔案中,你可以找到關於innodb的相關設定,但是被注釋掉了。因為mysql5.1版本後,innodb不在作為預設的設定了。首先將skip-innodb注釋掉,然後需要設定正確innodb的相關參數。
3、採用innodb儲存引擎,關係到data檔案夾下面的一些檔案:ib_logfile0、ib_logfile1和ibdata1,另外還有一個就是資料庫名下面的眾多.frm檔案。先對這幾個檔案作簡要介紹。
ib_logfile0和ib_logfile1是關於資料庫的一些記錄檔; .frm檔案是資料庫中很多的表的結構描述檔案; ibdata1檔案時資料庫的真實資料存放檔案。
到mysql目錄下的bin檔案夾下運行命令:
mysql --console
此時,你會發現很多的錯誤提示,該命令就是對環境進行測試的。如果你不理會這些錯誤,進入資料庫,用show tables;命令探索資料庫表存在,但是執行select等操作就會出現1146:Table doesn’t exist這個錯誤了。
其實這是由ibdata1檔案的錯誤引起的,這個應該在記錄檔ib_logfile0和ib_logfile1中找到,於是把ibdata1檔案刪除掉,再次執行該命令,發現沒有提示錯誤了,但進入資料庫以後,操作仍就導致1146這個錯誤。後來仔細一下,也是,你說你把ibdata1檔案刪除,相當於把資料庫的真實資料刪除了,這時你就會問為什麼資料庫表還存在呢,都能看到,因為資料庫表結構的描述是在.frm的眾多檔案中的,所以能通過show tables;查看到。 那麼問題就來了:ibdata1檔案是從別人那裡拷貝過來的,為什麼在那邊能用,到我這邊就不能用了呢?這就是最核心的問題所在,因為mysql是採用緩衝方式來將資料寫入到ibdata1檔案中的,這正是fflush()函數存在的理由。因此當別人的mysql在運行時,你對data檔案夾進行拷貝,即對ibdata1進行拷貝肯定會導致該檔案中的資料出錯的。
解決方案:
首先在自己的mysql下,建立一個你即將要拷貝的資料庫(資料庫名要一樣,裡面不需要建表),然後將所有的.frm檔案拷貝到你建的資料庫檔案夾下,再次進入mysql,用show tables查看錶是否已經建立起來了。然後停止你自己的mysql服務,發現在data檔案下面已經有ib_logfile0、ib_logfile1和ibdata1三個檔案了,之後停掉別人的mysql服務,只將ibdata1檔案拷貝過來進行覆蓋,最後啟動你自己的mysql服務就可以對資料庫進行正常操作了
本文出自 “廣州、雨人” 部落格,請務必保留此出處http://liulihuan.blog.51cto.com/8018739/1678833
Table 'barfoo_datacenter_config.parttemplates' doesn't exist------Mysql