1. 程式人生 > >mysql的InnoDB 數據庫引擎TableSpace Exists 問題

mysql的InnoDB 數據庫引擎TableSpace Exists 問題

拷貝 exists 一個 schema error 間隔 完全 table orm

Mysql數據庫報錯:

ERROR 1813 (HY000): Tablespace ‘`coll`.`t1`‘ exists.

原因:在使用InnoDB引擎的數據庫中,所有已經存在的表都使在使用InnoDB引擎的數據庫中,所有已經存在的表都使用兩個文件保存,假設表名為 t1,則在數據庫的數據目錄下會有兩個文件,

(1).frm 文件 數據表定義信息

(2).ibd 文件 數據表內容

處理方法:

在 MySql 5.6之前,這些文件都是可以公用的,如果.frm 文件丟失,則會報這個錯,使用一個臨時庫,建立一個完全相同的表,然後拷貝這兩個文件到丟失的庫中,就可以進行正常操作,這種很簡單,不再多言。

在MySql 5.6 及以後的版本,就沒有這麽簡單了,因為數據庫會默認使用表空間隔離,所以這時候這兩個文件並不能通用,導致使用上面的辦法並不能生效。直接刪除數據庫也會報錯,在系統下刪除報錯表殘留的數據文件。然而從新創建相同數據庫後,還是會報錯。【導入數據庫時,因表損壞,殘留的數據文件刪除不掉,也不能新建相同表名】

關掉mysql服務,直接把 .ibd 文件也刪了,重啟服務,這樣的方法在低版本的mysql可能奏效,但是對於5.6以上的版本根本不行,因為.ibd 文件會自動恢復,然後就回到上面的問題了。原來5.6以上的版本兩個文件都添加了index ,不能通用,默認是獨立的。而且還會根據information_schema 庫和一些配置文件中的信息,恢復.ibd文件,但是我們還是有方法。


具體處理方法如下:

5.6 及以上版本處理方式

(1) 關掉mysql服務,刪掉老的 coll.t1表的idb 文件,找到 my.ini 文件,修改innodb_file_per_table=0 。重啟服務。

(2) 新建一個測試test數據庫,並新建一個 test.t1 表,這時候test庫的目錄下出現了.frm 文件,把這個文件拷貝到coll數據庫的目錄下。

(3) 這個時候回到coll庫,刪掉並新建 t1表,不再報錯。

(4)網上有人說5.6 以上只能放棄這個表名,但是其實我們可以用這個方式解決問題,最後不要忘了把my.ini 文件,修改innodb_file_per_table=1 ,使用獨立表空間的默認設置。

以上是互聯網用戶為您的的內容,在阿裏雲內部有更多的關於InnoDB 數據庫引擎TableSpace Exists 問題 - DB2數據庫欄目的內容,歡迎繼續使用右上角搜索按鈕進行搜索exists、數據庫引擎、tablespace、InnoDB數據庫、以便於您獲取更多的相關信息。

mysql的InnoDB 數據庫引擎TableSpace Exists 問題