遷移匯入ibd表資料正確的方式以及各種錯誤示例

e71hao發表於2016-08-19
一、問題提出
      在mysql中使用獨享表空間,啟用innodb_file_per_table,把A庫表a遷移匯入B庫,怎麼樣匯入?

二、問題分析
      把A庫表a遷移匯入B庫,可以用mysqldump,當然也可以複製表a.ibd檔案。複製表a.ibd檔案要有正確的順序,否則,會有各種錯誤。

三、操作步驟
     正確的操作步驟應該是:在B庫,定義表-->刪除表空間(alter table ... discard tablespace;)-->複製*.ibd/*.cfg檔案-->匯入表空間(ALTER     TABLE ... IMPORT TABLESPACE )


四、不按照定義表-->刪除表空間-->複製*.ibd/*.cfg檔案-->匯入表空間,會出現哪些錯誤呢?
      請看如下操作:(1)直接複製a.ibd,a.frm到B庫的相應位置,報錯:
mysql> select * from a;
ERROR 1146 (42S02): Table 'test.a' doesn't exist
mysql> drop table a;
ERROR 1051 (42S02): Unknown table 'test.a'
mysql> create table a (id int,name varchar(30),age int);
ERROR 1813 (HY000): Tablespace for table '`test`.`a`' exists. Please DISCARD the tablespace before IMPORT.    #不能建立表a
mysql> #######delete a.ibd  a.frm  ######  這裡我刪除掉 a.ibd  a.frm
mysql> select * from a;
ERROR 1146 (42S02): Table 'test.a' doesn't exist
mysql> drop table a;
ERROR 1051 (42S02): Unknown table 'test.a'
mysql> create table a (id int,name varchar(30),age int);     ###能建立表a
Query OK, 0 rows affected (0.01 sec)
上面順序,不能建立表a,不能執行alter table a discard  tablespace; 
經典的1146錯誤,表空間遭到破壞,需要進行表空間的恢復。
五、問題總結:
       要按照順序,正確操作。

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

相關文章