有很多種方法可以將表的儲存引擎轉換成另外一種引擎。
alter table
將表從乙個引擎修改為另乙個引擎最簡單的辦法是使用alter table語句。
例:將mytable的引擎修改為innodb:
mysql>altel table mytable engine=innodb;
上述語法可以適用任何儲存引擎。但有乙個問題:需要執行很長時間。mysql會按行將資料從原表複製到一張新的表中,在複製期間可能會消耗系統所有的i/o能力,同時原表上會加上讀鎖。所以,在繁忙的表上執行此操作要特別小心。乙個替代方案是採用接下來將討論的匯出與匯入的方法,手工進行表的複製。
如果轉換表的儲存引擎,將會失去和原引擎相關的所有特性。例如,如果將一張innodb表轉換為myisam,然後再轉換回innodb,原innodb表上的所有的外來鍵將丟失。
匯入與匯出
為了更好的控制轉換的過程,可以使用mysqldump工具將資料匯出到檔案,然後修改檔案中create table語句的儲存引擎選項,注意同時修改表名,因為同乙個資料庫中不能存在相同表名。即使他們使用的是不同的儲存引擎。同時要注意mysqldump缺省會自動在create table語句前加上drop table語句,不注意這一點可能會導致資料丟失。
建立與查詢(create select)
第三種轉換的技術綜合了第一種方法的高效和第二種方法的安全。不需要匯出整個表的資料,而是先建立乙個新的儲存引擎的表,然後利用insert…select語法來導資料;
mysql>create table innodb_table like myisam_table;
mysql>alter table innodb_table engine=innodb;
mysql>insert into innodb_table select * from myisam_table;
資料量不大的話,這樣做工作得很好。如果資料量大。則可以考慮做分批處理,針對每一段資料執行事務提交操作,以避免大事務產生過多的undo。假如有主鍵欄位id,重複執行以下語句(最大值y與最小值x進行相應的替換)將資料匯入到新錶:
mysql>start transaction;
mysql>insert into innodb_table select * from myisam_table;
->where id between x and y;
mysql>commit;
Mysql不同儲存引擎的表轉換方法
mysql不同儲存引擎的表轉換方法 1 alter table 直接修改表的儲存引擎,但是這樣會導致大量的系統開銷,mysql為此要執行乙個就表向新錶的逐行複製。在此期間,轉換操作可能會占用伺服器的所有i o處理能力。轉換表之後,原先引擎的特殊性質都會丟失,無法復原。2 轉儲和匯入方法 用提供的my...
mysql切換引擎 mysql轉換引擎的方法
有很多方法可以將表的儲存引擎轉換成另外一種引擎,每種方法都各有優缺點 a alter table 將表從乙個引擎直接改為另外乙個引擎最簡單的辦法 alter table tb name engine innodb 要注意 這種方法需要執行很長的時間,mysql會按行將資料從原表複製到另外一張新錶中,...
Mysql轉換表儲存引擎的三種方式
或許會有一些場景需要改變表的儲存引擎,例如儲存日誌的表如果幾乎只有insert和少量的select操作,為了追求更好的插入效能有可能會需要把儲存引擎更換為myisam。但是,本文不建議在同乙個資料庫中混合使用不同的儲存引擎。1.alter table 將表從乙個儲存引擎修改為另一種儲存引擎最簡單的方...