無論來源上的原始表格和副本上的複寫表格是否使用不同的儲存引擎類型,對複寫程序來說都沒有影響。實際上,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';
此指令會被複製;從屬伺服器上表格的引擎類型會被轉換為 InnoDB
,即使您先前已將從屬伺服器上的表格類型變更為 CSV
以外的引擎。 如果您想要在來源伺服器和從屬伺服器上保留引擎差異,您在建立新表格時應該小心使用來源伺服器上的 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
指令會使用從屬伺服器的預設引擎在從屬伺服器上執行。