有很多方法可以將表的儲存引擎轉換成另外一種引擎,每種方法都各有優缺點:
a:alter table
將表從乙個引擎直接改為另外乙個引擎最簡單的辦法
alter table tb_name engine=innodb;
要注意:這種方法需要執行很長的時間,mysql會按行將資料從原表複製到另外一張新錶中,在複製期間可能會消耗系統所有的io能力,同時原表會加上讀鎖,所以,在繁忙的表上執行此操作需要特別小心,乙個替代的方案是採用後邊討論的方法。另外,轉換表的儲存引擎,將會失去和原引擎相關的所有特性,如:把innodb轉換成myisam,再轉回innodb,原innodb表上的所有外來鍵將丟失。
b:匯入與匯出
可以使用mysqldump工具將資料匯出到檔案,然後修改檔案中的create table語句的儲存引擎選項,注意同時修改表名,因為同乙個資料庫中不能存在相同表名,即使是使用不同的儲存引擎也不能同名,同時要注意,mysqldump缺省會自動在create table語句前加上drop table語句,不注意這一點可能導致資料丟失。
c:建立與查詢
結合前面兩種方法的優點,不需要匯出整個表的資料,而是先建立一張新的表,然後使用insert…select語法來匯出資料到新錶:
create table tb_name_new like tb_name_old;
alter table tb_name_new engine=innodb;
insert into tb_name_new select * from tb_name_old;
注意:資料量不大的話,這樣做很好,如果資料很大,則可以考慮做分批處理(select加乙個where條件,或者使用儲存過程帶上limit條件),針對每一段資料執行事務提交操作,以避免大事務產生過多的undo。執行完成後,刪除原表,把新錶改名。
d:percona-tookit提供了乙個pt-online-schema-change工具,可以比較簡單,方便地執行上面的過程,避免手工操作可能導致的失誤和繁瑣。且,這個工具是不鎖表的。
MYSQL切換表引擎
1 檢視表狀態 show table status like corr alert engine 引擎型別 舊版為type row format 行的格式。可選值dynamic fixed或compressed dynamic行長度可變,一般包含可變長度字段,varchar或bolb fixed 長...
mysql切換到表 mysql表切換引擎的幾種方法
alter table mysql alter table mytable engine falcon 這種語法適合所有引擎,但是轉換過程會耗費大量時間。mysql為此要執行乙個舊表到新錶的逐行複製。在這期間,轉換操作可能會占用伺服器的所有i o處理能力,並且在轉換時,源表要被讀加鎖。因此,在乙個繁...
Mysql表引擎的切換
p.p1 p.p2 p.p3 將1個表的引擎修改為另乙個引擎最簡單的方法是使用alter table語句。下面的語句將mytable的引擎修改為innodb mysql alter table mytable engine innodb 上述語法適用於任何乙個引擎,但是有以下的缺點 a.執行時間上,...