[Err] 1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or d

Mysql運用MERGE引擎進行分表

這裏所作的分表是指水平拆分,就是多張表數據結構徹底一致(全部的數據列一致,很少很多)。mysql

要想用 MERGE引擎,全部須要拆分的表及拆分後的字表,必須爲 MYISAM 引擎,這個好難知足。由於 MYISAM 引擎不支持事務,這在生產實際中極少數據表會採用 MYISAM。由於如今的應用,都想用分佈式事務(極麻煩),不用事務那就別提了,辦不到。sql

將user拆分紅二張表user1和user2,數據庫

// (備份users表)備份!備份!備份!重要的事情說三遍。
DROP TABLE IF EXISTS users;
CREAT users LIKE user1;
// 將users表的全部附加屬性都拷貝過來
ALTER TABLE users ENGINE=MRG_MYISAM UNION=(user1,user2) INSERT_METHOD=LAST;  

【特注】:在建立完成後,全部對users的操做均可能報一個錯:[Err] 1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist網絡

究其緣由,就是拷貝的時候遺漏了。我是遺漏了 CHARSET=utf8 其餘小夥伴呢?!!!數據結構

還有多是(網絡上的):分佈式

一、查看是否是有一些表不是MYISAM引擎的表,由於MERGE引擎只適用於MYISAM表spa

二、查看是否是在union的表中含有不存在的表。.net

三、查看是否是MERGE的時候引用了不在同一個庫的表,而且該表沒有指定數據庫名字。code

四、比較各個表的結構(索引、引擎、列、字符集等)是否一致。blog

五、CHARSET=utf8 等,相似的約定是否一致(全拷貝過來!!!)。

 

參考資料:

  1.mysql的merge存儲引擎應用

相關文章
相關標籤/搜索