mysql表切換引擎的幾種方法

2022-05-12 03:55:41 字數 1170 閱讀 5995

alter table

mysql > alter table mytable engine=falcon;

這種語法適合所有引擎,但是轉換過程會耗費大量時間。mysql為此要執行乙個舊表到新錶的逐行複製。在這期間,轉換操作可能會占用伺服器的所有i/o處理能力,並且在轉換時,源表要被讀加鎖。因此,在乙個繁忙的表上做此操作,要加以注意。

如果從一種引擎到另一種引擎做表轉換,所有屬於原始引擎的專用特性都會丟失。例如,將乙個innodb表轉換成myisam表,再轉換回來,最初定義在原innodb表上的所有外來鍵都會丟失。

轉儲(dump)和匯入(import)

如果想對錶轉換的過程做更多控制,可以選擇使用mysqldump工具,將表先轉儲成乙個文字檔案,然後再編輯轉儲檔案,修改其中的create table語句。一定要注意修改表名和引擎型別,因為即使引擎型別有所不同,同一資料庫也不允許存在相同表名的兩張表。另外,mysqldump在create table語句之前,會默默地加上drop table命令,如果不注意,很可能丟失原有資料。

create 和 select

此方法在前兩種方法之間做了乙個平衡,它不轉儲整張表,或者一次性轉換所有資料,而是建立乙個新錶,使用mysql的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;

如果資料量不大,這種辦法效果不錯,但是更高效的辦法是增量地填充表,在填充每個增量資料塊的時候都提交事務,這樣就不會導致撤銷日誌變得過於龐大。假定id是主鍵,可以重複執行下列查詢(每次逐次增大x和y的值),直至所有的資料都複製到新錶。

mysql > start transaction;

mysql > insert into innodb_table select * from myisam_table

-> where id between x and y;

mysql > commit;

轉移操作完成後,源表扔會保留,可以在操作完成後刪除,而此時,新錶已被填充完畢。注意:如果有必要,請在轉換時加鎖源表,避免複製時資料不一致。

mysql切換到表 mysql表切換引擎的幾種方法

alter table mysql alter table mytable engine falcon 這種語法適合所有引擎,但是轉換過程會耗費大量時間。mysql為此要執行乙個舊表到新錶的逐行複製。在這期間,轉換操作可能會占用伺服器的所有i o處理能力,並且在轉換時,源表要被讀加鎖。因此,在乙個繁...

MYSQL切換表引擎

1 檢視表狀態 show table status like corr alert engine 引擎型別 舊版為type row format 行的格式。可選值dynamic fixed或compressed dynamic行長度可變,一般包含可變長度字段,varchar或bolb fixed 長...

Mysql表引擎的切換

p.p1 p.p2 p.p3 將1個表的引擎修改為另乙個引擎最簡單的方法是使用alter table語句。下面的語句將mytable的引擎修改為innodb mysql alter table mytable engine innodb 上述語法適用於任何乙個引擎,但是有以下的缺點 a.執行時間上,...