對於複製程序而言,來源上的原始表格和副本上的複製表格是否使用不同的儲存引擎類型並不重要。事實上,default_storage_engine
系統變數不會被複製。
這在複製程序中提供了許多好處,因為您可以針對不同的複製情境利用不同的引擎類型。例如,在典型的橫向擴展情境中(請參閱第 19.4.5 節「使用複製進行橫向擴展」),您希望在來源上使用 InnoDB
表格以利用交易功能,但在不需要交易支援的副本上使用 MyISAM
,因為資料僅供讀取。在資料記錄環境中使用複製時,您可能會希望在副本上使用 Archive
儲存引擎。
在來源和副本上設定不同的引擎取決於您如何設定初始複製程序
如果您使用 mysqldump 在您的來源端建立資料庫快照,您可以編輯傾印檔案的文字來變更每個表格使用的引擎類型。
除了 mysqldump 之外,另一種替代方案是在使用傾印來在複本上建立資料之前,先在複本上停用您不想使用的引擎類型。例如,您可以在您的複本上加入
--skip-federated
選項,以停用FEDERATED
引擎。如果特定引擎不存在要建立的表格,MySQL 會使用預設的引擎類型,通常是InnoDB
。(這需要未啟用NO_ENGINE_SUBSTITUTION
SQL 模式。)如果您想以這種方式停用其他引擎,您可能需要考慮建立一個特殊的二進位檔案,以僅支援您想要的引擎,並在複本上使用。如果您使用原始資料檔案(二進位備份)來設定複本,則無法變更初始表格格式。相反地,請使用
ALTER TABLE
在複本啟動後變更表格類型。對於來源/複本的新複製設定,如果來源端目前沒有表格,請避免在建立新表格時指定引擎類型。
如果您已經在執行複製解決方案,並想要將現有的表格轉換為另一個引擎類型,請依照下列步驟執行
停止複本執行複製更新
mysql> STOP REPLICA;
這使得變更引擎類型成為可能,而不會中斷。
針對每個要變更的表格執行
ALTER TABLE ... ENGINE='
。engine_type
'再次啟動複製程序
mysql> START REPLICA;
雖然 default_storage_engine
變數不會複製,但請注意,包含引擎規格的 CREATE TABLE
和 ALTER TABLE
陳述式會正確複製到複本。如果以 CSV
表格為例,您執行這個陳述式
mysql> ALTER TABLE csvtable ENGINE='MyISAM';
這個陳述式會複製;即使您先前已將複本上的表格類型變更為 CSV
以外的引擎,複本上表格的引擎類型也會轉換為 InnoDB
。如果您想在來源端和複本上保留引擎差異,您在建立新表格時應謹慎使用來源端上的 default_storage_engine
變數。例如,請使用下列格式,而不是
mysql> CREATE TABLE tablea (columna int) Engine=MyISAM;
使用這個格式
mysql> SET default_storage_engine=MyISAM;
mysql> CREATE TABLE tablea (columna int);
在複製時,會忽略 default_storage_engine
變數,而 CREATE TABLE
陳述式會在複本上執行,並使用複本的預設引擎。