1. 程式人生 > >MariaDB Error:1932 Table doesn't exist in engine 的解決方法

MariaDB Error:1932 Table doesn't exist in engine 的解決方法

1,正式區,MySQL服務及DB安裝在D盤

2,測試我,MySQL服務及DB安裝在C盤

問題1,將正式區相應DB File目錄複製到測試區後,無法開啟Table,檢視Err Log發現,報1932的錯誤:

1932: Table 'mysql.gtid_slave_pos' doesn't exist in engine

將正式區對應data目錄下的

ib_logfile0
ib_logfile1
ibdata1

三個檔案複製到測試區對應Data目錄下,MySQL服務無法啟動,開始報第二個錯誤

問題2:錯誤 1067 無法啟動MariaDB服務

解決:

將剛複製的

ib_logfile0
ib_logfile1
兩個檔案刪除, 再次啟動MariaDB服務,正常,開啟Table,也可正常開啟,問題解決。

有關InnoDB 和MyISAM的相關資料:
以表”Table”為例:
如型別是MyISAM, 資料檔案則以”Table.frm””Table.MYD””Table.MYI””三個檔案儲存於”/data/$databasename/”目錄中.

如型別是InnoDB, 
資料檔案則儲存在”$innodb_data_home_dir/″中的ibdata1檔案中(一般情況),結構檔案存在於table_name.frm中.
MySQL的資料庫檔案直接複製便可以使用,但是那是指“MyISAM”型別的表。
而使用MySQL-Front直接建立表,預設是“InnoDB”型別,這種型別的一個表在磁碟上只對應一個“*.frm”檔案,不像MyISAM那樣還“*.MYD,*.MYI”檔案。
MyISAM型別的表直接拷到另一個數據庫就可以直接使用,但是InnoDB型別的表卻不行。解決方法就是:

同時拷貝innodb資料庫表“*.frm”檔案和innodb資料“ibdata1”檔案到合適的位置。啟動MySQL的Windows服務
由於MySQL這樣資料混雜的形式, 往往很容易讓使用者在備份時忘記了備份InnoDB, 從而導致了上述錯誤.

意思就是說在資料庫引擎型別為InnoDB時,拷貝資料檔案的同時還需要拷貝ibdata1,於是把ibdata1也拷貝過去覆蓋,發現還是有點問題,於是停止mysql服務,
將目錄下的ib_logfile*檔案全部刪除掉,重新啟動mysql服務,就可以了。

總結:

1,在進行mysql資料庫備份的或遷移時,儘量備份完成所需要的資料;

2,如果直接拷貝原有資料庫檔案"*.frm"、"*.MYD"、"*.MYI"等檔案時候,如果原資料庫引擎是InnoDB,切記還需拷貝ibdata1檔案

3,備份資料庫的時候,最好是用相關的工具進行備份或是匯出sql檔案,以免浪費時間在資料庫恢復上

4,msyql版本或是備份工具的版本不同,也可能引起資料恢復有問題。