mysql錶轉換

mysql有三種常用的方法可以把表從一個引擎轉移到另一種引擎上,每種方法各有優缺點。

ALTER TABLE

把表從一種引擎轉移到另一種引擎最簡單的方法是使用ALTER TABLE語句。下列命令將表mytable轉換成innodb引擎:

  1. mysql>alter table mytale engenes=innodb

這種方法適合所有的存儲引擎,但是這種轉換會耗費大量的時候,mysql執行的是一個表到另一個表的逐行復制,在這期間轉換操作可能佔用的所有的I/O處理能力,並且在轉換的時候,原表要加鎖,因此大表在比較繁忙的時候不適合這種轉換方法。

Dump和import

如果想對錶轉換的過程做更多的控制,可以選擇mysqldump工具,先將錶轉存成一個文本文件,然後編輯轉存文件,修改其中的create table語句,注意修改表明和引擎類型,因爲即使表明不通,同一個數據庫也不可能存在同一個名字的兩張表。另外mysql在create table之前默認會加上drop table命令。如果不注意,會丟失所有的數據。

CREATE和SELECT

這種方式不是轉存整張表,或者一次性轉換所有的數據,而是創建一個新表,入下圖所示:

  1. mysql> create table innodb_table like myisam table; 
  2. mysql> alter table innodb_table engines=innodb
  3. mysql> insert into innodb_table select * from myisam_table; 

如果數據不大這種方法很有效,更有效的方法是增量的填充表,在填充每個增量數據庫的時候都提交事務,這樣就不會導致撤銷日誌變得過於龐大。加入id是主鍵,可以重複運行下列插於(逐次增大x和y的值),直至所有數據都複製到新表。

  1. mysql> start transaction; 
  2. mysql> insert into innodb_table select * from myisam_table; 
  3.         -> where is between x and y; 
  4. mysql> commit; 

轉換操作完成後,原表仍會保留,可以完成後刪除它,如果有必要,在轉換是加鎖源表,防止轉移複製時數據不一致的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章