2011-06-02 113 views
5

這個問題可能是MySQL專家和管理員之前完成了這種遷移。將MySQL表格和數據從存儲引擎MyISAM移動到InnoDB

我在MyISAM存儲引擎上有17個MySQL表,觸發器和存儲過程。這些表格共有8個MiB數據。因爲我將應用程序和數據庫移動到Amazon EC2和RDS,所以我想知道將表從MyISAM遷移到InnoDB時需要考慮什麼。

我將要經歷的步驟大致如下。

  1. AWS RDS上的系統表必須位於MyISAM上,因此沒有任何競爭。
  2. 創建17個與MyISAM上存在的結構相同的表,並在RDS InnoDB中構建它們。
  3. 從MyISAM表中導出數據並將它們導入InnoDB上在RDS中創建的新表中。
  4. 在InnoDB數據庫中創建觸發器,存儲過程和函數。

當我問這樣的跨MySQL的存儲引擎,我想但從經驗的管理員的角度瞭解遷移的關鍵因素,如果事情明確需要在數據庫級的數據遷移過程中照顧等等,以便數據庫按照它應該的方式行事,並且沒有小故障。我很擔心,主要是因爲我讀了InnoDB和MyISAM的緩衝,I/O,CPU和內存使用方式不同。

我會很高興地接受你在這個過程中的2美分。

謝謝。

* 更新 *

innodb_buffer_pool_size - {DBInstanceClassMemory * 3/4}這是它被設置到現在。

我在尋找其他參數。如果您想查看爲其他任何特定參數設置的值,請​​告知我們。

回答

2

有MyISAM和InnoDB,但你應該知道的遷移前的要點之間有許多差異, 1.數據備份,無法通過簡單的文件複製了在MyISAM數據 2. InnoDB的不工作完成在使用默認選項運行時以優化的方式,您將不得不根據您的需要進行配置和調整。 3. InnoDB沒有像MyISAM這樣的壓縮索引,因此需要佔用更多空間 4. InnoDB會自動將主鍵列附加到輔助鍵。所以確保主鍵列不大。,

除此之外,遷移應該很容易。 1.創建與MyISAM具有相似結構的表,但僅在引擎更改爲InnoDB的情況下。 2.從MyISAM表中轉儲數據 3.在InnoDB引擎中以主鍵順序導入數據,在START TRANSACTION和COMMIT之間包裝導入,這是加載數據的最快方式。 4.創建存儲過程並觸發。,。但他們與存儲引擎無關。

如果您需要InnoDB配置的任何幫助,您可以告訴我。

+0

您在RDS中設置了哪些推薦的InnoDB參數或配置值以使其性能有效?謝謝。我正在遵循這些步驟。 – Aakash 2011-06-03 15:00:34

0

遷移過程本身非常簡單。轉儲將記錄需要重建的所有必需對象。您只需要刪除(或更改,如果默認不是你想要的),存儲引擎子句。你可能要擔心的是,爲MyISAM編寫的應用程序可能會認爲從不需要提交事務。所以無論如何,幾年前我逃避了這一點:

mysqldump --all-databases | perl -pwe 's/\) TYPE=MyISAM/\)/' >dump.sql 
mysql <dump.sql 

加上必要時添加提交和回滾。

1

如果你想轉換當前的表InnoDB的,這裏的簡單的方法:

ALTER TABLE t1 ENGINE = InnoDB; 

MySQL doc

在您進入雲端之前,在您自己的服務器上執行此操作是一個好主意 - 不要同時更改兩個參數!

InnoDB引擎中有很多不同之處,但我相信用你最喜歡的搜索引擎幾分鐘就會告訴你。

+0

這工作...我試圖改變我的服務器MyISAM表上的引擎,它確實改變了它。我想知道當執行這個引擎變更表腳本時,表和數據實際發生了什麼變化......閱讀更多內容!謝謝。 – Aakash 2011-06-03 14:58:47

+0

你可以獲得innodb(行級鎖定等)和所有痛苦(無數(*)等)的所有樂趣。 – 2011-06-08 21:41:15

相關問題