本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 MariaDB 僅供讀取複本
接下來,您可以找到在 Amazon RDS for MariaDB 上使用僅供讀取複本的特定資訊。如需僅供讀取複本的一般資訊及使用說明,請參閱 使用資料庫執行個體僅供讀取複本。
主題
使用 MariaDB 設定僅供讀取複本
MariaDB 資料庫執行個體做為複寫來源前,務必將備份保留期設定為 0 以外的值,藉此開啟來源資料庫執行個體的自動備份。若僅供讀取複本能讓其他僅供讀取複本做為來源資料庫執行個體,則亦適用此要求。
您可以從相同區域內的一個資料庫執行個體建立至多 15 個僅供讀取複本。若希望複寫作業順利運作,每個僅供讀取複本具備的運算和儲存資源數量應與來源資料庫執行個體相同。若您擴展來源資料庫執行個體,也要擴展僅供讀取複本。
RDS for MariaDB 支援階層式僅供讀取複本。若要了解如何設定階層式僅供讀取複本,請參閱 搭配 RDS for MariaDB 使用階層式僅供讀取複本。
您可以同時執行多個僅供讀取複本建立,並刪除參考相同來源資料庫執行個體的動作。執行這些動作時,請將每個來源執行個體的僅供讀取複本數目限制在 15 個之內。
設定與 MariaDB 的複寫篩選條件
您可以使用複寫篩選條件來指定要與僅供讀取複本一起複寫的資料庫和資料表。複寫篩選條件可以包含複寫中的資料庫和資料表,或將其排除在複寫之外。
下列是複寫篩選條件的一些應用案例:
-
要縮小僅供讀取複本的大小。使用複寫篩選,您可以排除僅供讀取複本不需要的資料庫和資料表。
-
基於安全考量,要將資料庫和資料表從僅供讀取複本中排除。
-
為不同僅供讀取複本的特定應用案例複寫不同的資料庫和資料表。例如,您可以使用特定僅供讀取複本進行分析或分區。
-
對於在不同 AWS 區域 中具有僅供讀取複本的資料庫執行個體,可在不同 AWS 區域 中複寫不同的資料庫或資料表。
注意
您也可以使用複寫篩選條件來指定要與主要 MariaDB 資料庫執行個體 (設定為輸入複寫拓撲中的複寫) 一起複寫的資料庫和資料表。如需此組態的詳細資訊,請參閱「使用外部來源執行個體設定二進位日誌檔案位置複寫」。
設定適用於 RDS for MariaDB 的複寫篩選參數
要設定複寫篩選條件,請在僅供讀取複本上設定下列複寫篩選參數:
-
replicate-do-db
– 將變更複寫至指定的資料庫。當您為僅供讀取複本設定此參數時,只會複寫參數中指定的資料庫。 -
replicate-ignore-db
– 請勿將變更複寫至指定的資料庫。為僅供讀取複本設定replicate-do-db
參數時,不會評估此參數。 -
replicate-do-table
– 將變更複製到指定的資料表。當您為僅供讀取複本設定此參數時,只會複寫參數中指定的資料表。此外,設定replicate-do-db
或replicate-ignore-db
參數時,必須使用僅供讀取複本將包含指定資料表的資料庫納入複寫中。 -
replicate-ignore-table
– 請勿將變更複寫至指定的資料表。為僅供讀取複本設定replicate-do-table
參數時,不會評估此參數。 -
replicate-wild-do-table
– 根據指定的資料庫和資料表名稱模式複寫資料表。支援%
和_
萬用字元。設定replicate-do-db
或replicate-ignore-db
參數時,請務必使用僅供讀取複本將包含指定資料表的資料庫納入複寫中。 -
replicate-wild-ignore-table
– 請勿根據指定的資料庫和資料表名稱模式複寫資料表。支援%
和_
萬用字元。為僅供讀取複本設定replicate-do-table
或replicate-wild-do-table
參數時,不會評估此參數。
系統會按照列出的順序對參數進行評估。如需有關這些參數如何運作的詳細資訊,請參閱 MariaDB 文件
根據預設,這些參數中的每個參數都有一個空值。在每個僅供讀取複本上,您可以使用這些參數來設定、變更和刪除複寫篩選條件。當您設定其中一個參數時,請使用逗號將每個篩選條件與其他篩選條件分隔。
您可以在 %
和 _
參數中使用 replicate-wild-do-table
和 replicate-wild-ignore-table
萬用字元。%
萬用字元等同於任意數目的字元,而 _
萬用字元只會等同於一個字元。
來源資料庫執行個體的二進位記錄格式對複寫非常重要,因為它會決定資料變更的記錄。binlog_format
參數的設定會決定複寫是以資料列為基礎還是以陳述式為基礎。如需詳細資訊,請參閱 二進位日誌格式。
注意
無論來源資料庫執行個體上的 binlog_format
設定為何,所有資料定義語言 (DDL) 陳述式都會複寫為陳述式。
RDS for MariaDB 的複寫篩選限制
下列限制適用於 RDS for MariaDB 的複寫篩選:
-
每個複寫篩選參數都有 2,000 個字元的限制。
-
複寫篩選條件不支援逗號。
-
不支援用於二進位日誌篩選的 MariaDB
binlog_do_db
和binlog_ignore_db
選項。 -
複寫篩選不支援 XA 交易。
如需詳細資訊,請參閱 MySQL 文件中的 XA 交易的限制
。 -
RDS for MariaDB 10.2 版不支援複寫篩選。
RDS for MariaDB 的複寫篩選範例
若要設定僅供讀取複本的複寫篩選,請修改與僅供讀取複本關聯之參數群組中的複寫篩選參數。
注意
您無法修改預設參數群組。如果僅供讀取複本使用預設參數群組,請建立新的參數群組,並將它與僅供讀取複本建立關聯。如需資料庫參數群組的詳細資訊,請參閱 的參數組 RDS。
您可以使用 AWS Management Console、AWS CLI 或 RDS API 在參數群組中設定參數。如需有關設定參數的詳細資訊,請參閱 修改 Amazon RDS Amazon 數據庫參數組中的參數。當您在參數群組中設定參數時,與參數群組關聯的所有資料庫執行個體都會使用參數設定。如果您在參數群組中設定複寫篩選參數,請確定參數群組僅與僅供讀取複本相關聯。將來源資料庫執行個體的複寫篩選參數保留空白。
下列範例會使用 AWS CLI 設定參數。這些範例將 ApplyMethod
設定為 immediate
,以便在 CLI 命令完成後立即發生參數變更。如果您想要在僅供讀取複本重新啟動後套用擱置變更,請將設定 ApplyMethod
為 pending-reboot
。
下列範例會設定複寫篩選條件:
範例 在複寫中包含資料庫
下列範例包含複寫中的 mydb1
和 mydb2
資料庫。當您為僅供讀取複本設定 replicate-do-db
時,只會複寫參數中指定的資料庫。
對於LinuxmacOS、或Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-do-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
在Windows中:
aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-do-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
範例 在複寫中包含資料表
下列範例包含複寫資料庫 table1
中的 table2
和 mydb1
資料表。
對於LinuxmacOS、或Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-do-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
在Windows中:
aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-do-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
範例 使用萬用字元在複寫中包含資料表
下列範例包含複寫時在資料庫 orders
中名稱開頭為 returns
和 mydb
的資料表。
對於LinuxmacOS、或Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
在Windows中:
aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
範例 逸出名稱中的萬用字元
下列範例會示範如何使用逸出字元 \
來逸出屬於名稱一部分的萬用字元。
假設您在資料庫 mydb1
中有數個以 my_table
開頭的資料庫名稱,而且您想要在複寫中包含這些資料表。資料表名稱包含底線,也是萬用字元,因此此範例會逸出資料表名稱中的底線。
對於LinuxmacOS、或Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
在Windows中:
aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
範例 從複寫中排除資料庫
下列範例會從複寫中排除 mydb1
和 mydb2
資料庫。
對於LinuxmacOS、或Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
在Windows中:
aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
範例 從複寫中排除資料表
下列範例會從複寫中排除資料庫 table1
中的資料表 table2
和 mydb1
。
對於LinuxmacOS、或Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
在Windows中:
aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
範例 使用萬用字元從複寫中排除資料表
下列範例會從複寫中排除資料庫 orders
中名稱開頭為 returns
和 mydb
的資料表。
對於LinuxmacOS、或Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
在Windows中:
aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
檢視僅供讀取複本的複寫篩選條件
您可以使用下列方式檢視僅供讀取複本的複寫篩選條件:
-
檢查與僅供讀取複本關聯之參數群組中複寫篩選參數的設定。
如需說明,請參閱「檢視 Amazon RDS Amazon 中資料庫參數群組的參數值」。
-
在 MariaDB 用戶端中,連線至僅供讀取複本並執行
SHOW REPLICA STATUS
陳述式。在輸出中,下列欄位會顯示僅供讀取複本的複寫篩選條件:
-
Replicate_Do_DB
-
Replicate_Ignore_DB
-
Replicate_Do_Table
-
Replicate_Ignore_Table
-
Replicate_Wild_Do_Table
-
Replicate_Wild_Ignore_Table
如需有關這些欄位的詳細資訊,請參閱 MySQL 文件中的檢查複寫狀態
。 注意
MariaDB 以前的版本使用
SHOW SLAVE STATUS
而不是SHOW REPLICA STATUS
。如果您使用的 MariaDB 是 10.5 之前的版本,請使用SHOW SLAVE STATUS
。 -
透過 MariaDB 設定延遲複寫
您可以將延遲複寫做為災難復原的策略。利用延遲複寫功能來指定最短時間 (以秒為單位),即可延遲來源到僅供讀取複本的複寫作業。在發生損毀之時 (例如不小心刪除資料表),若要快速完成事後復原作業,則請執行下列步驟:
-
停止僅供讀取複本的複寫作業,以免系統將造成損毀的變更內容傳送到該複本。
若要停止複寫作業,請使用 mysql.rds_stop_replication 預存程序。
-
若要將僅供讀取複本提升為新的來源資料庫執行個體,請參照提升僅供讀取複本為獨立的資料庫執行個體中的指示。
注意
-
MariaDB 10.6 及更高版本支援延遲複寫。
-
使用預存程序來設定延遲複寫。您無法透過 AWS Management Console、AWS CLI 或 Amazon RDS API 設定延遲複寫。
-
您可以在延遲複寫組態中使用基於全域交易識別符 (GTID) 的複寫。
在僅供讀取複本建立期間設定延遲複寫
若要為任何未來從資料庫執行個體建立的僅供讀取複本設定延遲複寫,請利用 mysql.rds_set_configuration 參數來執行 target delay
預存程序。
在僅供讀取複本建立期間設定延遲複寫
-
透過 MariaDB 用戶端,以主要使用者的身分連接至 MariaDB 資料庫執行個體,該執行個體將成為僅供讀取複本的來源。
-
利用 mysql.rds_set_configuration 參數來執行
target delay
預存程序。例如,您可以執行下列預存程序,藉此設定複寫至少會延遲一小時 (3600 秒),並將該設定套用至目前資料庫執行個體所建立的任何僅供讀取複本。
call mysql.rds_set_configuration('target delay', 3600);
注意
一旦執行此預存程序,系統即會針對任何透過 AWS CLI 或 Amazon RDS API 建立的僅供讀取複本,將複寫延遲時間設定為指定的秒數。
修改現有僅供讀取複本的延遲複寫
若要修改現有僅供讀取複本的延遲複寫,請執行 mysql.rds_set_source_delay 預存程序。
修改現有僅供讀取複本的延遲複寫
-
透過 MariaDB 用戶端,以主要使用者的身分連接至僅供讀取複本。
-
使用 mysql.rds_stop_replication 預存程序來停止複寫作業。
-
執行 mysql.rds_set_source_delay 預存程序。
例如,您可以執行下列預存程序,藉此設定複寫至少會延遲一小時 (3600 秒),並將該設定套用至僅供讀取複本。
call mysql.rds_set_source_delay(3600);
-
使用 mysql.rds_start_replication 預存程序來啟動複寫作業。
提升僅供讀取複本
使用災難復原功能時,您可以參照中的指示,在複寫作業停止後將僅供讀取複本提升為新的來源資料庫執行個體。如需提升僅供讀取複本的相關資訊,請參閱 提升僅供讀取複本為獨立的資料庫執行個體。
使用 MariaDB 更新僅供讀取複本
僅供讀取複本專門用來支援讀取查詢,但建議您不定期進行更新。例如,您可能需要新增索引來加快特定查詢類型存取複本的速度。您可以在僅供讀取複本的資料庫參數群組中將 read_only
參數設定為 0,以啟用更新。
使用 MariaDB 處理多可用區域僅供讀取複本的部署
您可以從單一可用區域或多可用區域的資料庫執行個體部署建立僅供讀取複本。您可使用異地同步備份部署來改善重要資料的耐用性和可用性,但無法使用異地同步備份部署來處理僅供讀取的查詢。反之,您可從高流量的多可用區域資料庫執行個體建立僅供讀取複本,藉此卸載僅供讀取的查詢。若異地同步備份部署的來源執行個體容錯移轉為次要,任何相關聯的僅供讀取複本會自動將複寫作業來源切換成次要 (現為主要)。如需詳細資訊,請參閱 設定及管理多可用區部署。
您可以建立僅供讀取複本並用作多可用區域資料庫執行個體。Amazon RDS 會在另一個可用區域中建立您的複本的待命複本,以獲得該複本的容錯移轉支援。建立您的僅供讀取複本做為異地同步備份部署資料庫執行個體,與來源資料庫是否為異地同步備份部署資料庫執行個體無關。
搭配 RDS for MariaDB 使用階層式僅供讀取複本
RDS for MariaDB 支援階層式僅供讀取複本。利用階層式僅供讀取複本,您可以擴展讀取,無須增加來源 RDS for MariaDB 資料庫執行個體的額外負荷。
利用階層式僅供讀取複本,您的 RDS for MariaDB 資料庫執行個體會將資料傳送至鏈結中的第一個僅供讀取複本。之後,該僅供讀取複本會將資料傳送至鏈結中的第二個複本,依此類推。最終結果是鏈結中的所有僅供讀取複本皆具有來自 RDS for MariaDB 資料庫執行個體的變更,但並無僅在來源資料庫執行個體上的額外負荷。
您可從來源 RDS for MariaDB 資料庫執行個體的鏈結中建立一系列最多三個僅供讀取複本。例如,假設您有一個 RDS for MariaDB 資料庫執行個體 mariadb-main
。您可以執行下列作業:
從
mariadb-main
開始,建立鏈結中的第一個僅供讀取複本read-replica-1
。接下來,從
read-replica-1
,建立鏈結中的下一個僅供讀取複本read-replica-2
。最後,從
read-replica-2
,建立鏈結中的第三個僅供讀取複本read-replica-3
。
除了 mariadb-main
系列中的第三個階層式僅供讀取複本之外,您無法建立另一個僅供讀取複本。從 RDS for MariaDB 來源資料庫執行個體至一系列階層式僅供讀取複本尾端的完整執行個體系列最多可包含四個資料庫執行個體。
若要使階層式僅供讀取複本可以運作,每個來源 RDS for MariaDB 資料庫執行個體都必須開啟自動備份。若要在僅供讀取複本上開啟自動備份,首先建立該僅供讀取複本,然後修改該複本來開啟自動備份。如需詳細資訊,請參閱建立僅供讀取複本。
與任何僅供讀取複本一樣,您可提升作為階層式一部分的僅供讀取複本。從僅供讀取複本鏈結中提升僅供讀取複本將會從鏈結中移除該僅供讀取複本。例如,假設您想要將部分工作負載從 mariadb-main
資料庫執行個體移至新的執行個體,僅供會計部門使用。假設範例中的三個僅供讀取複本鏈結,您決定提升 read-replica-2
。該鏈或受到下列影響:
提升
read-replica-2
會將其從複寫鏈結中移除。-
其現在是一個完整的讀取/寫入資料庫執行個體。
這會持續複寫至
read-replica-3
,就像在提升之前所做的一樣。
-
您的
mariadb-main
會持續複寫至read-replica-1
。
如需提升僅供讀取複本的相關詳細資訊,請參閱 提升僅供讀取複本為獨立的資料庫執行個體。
監控 MariaDB 僅供讀取複本
對於 MariaDB 僅供讀取複本,您可以 CloudWatch 透過檢視 Amazon RDS 指標來監控 Amazon 中的複寫延遲。ReplicaLag
ReplicaLag
指標會回報 Seconds_Behind_Master
命令的 SHOW REPLICA
STATUS
欄位值。
注意
MariaDB 以前的版本使用 SHOW SLAVE STATUS
而不是 SHOW REPLICA STATUS
。如果您使用的 MariaDB 是 10.5 之前的版本,請使用 SHOW SLAVE STATUS
。
MariaDB 複寫延遲的常見原因如下:
-
網路停機。
-
寫入僅供讀取複本上的資料表仍有索引。若未將僅供讀取複本的
read_only
參數設為 0,可能會中斷複寫。 -
使用非交易儲存引擎 (例如 MyISAM)。複寫功能僅支援 MariaDB 上的 InnoDB 儲存引擎。
當 ReplicaLag
指標到達 0,複本即已跟上來源資料庫執行個體。如果 ReplicaLag
指標傳回 -1,表示複寫目前為非作用中。ReplicaLag
= -1 相當於 Seconds_Behind_Master
= NULL
。
透過 MariaDB 僅供讀取複本啟動與停用複寫
您可呼叫系統預存程序 mysql.rds_stop_replication 和 mysql.rds_start_replication,藉此停止並重新啟動 Amazon RDS 資料庫執行個體的複寫程序。針對長時間操作 (如建立大型索引) 在兩個 Amazon RDS 執行個體間進行複寫時,即可採取此操作。匯入或匯出資料庫時,也必須停止並啟動複寫作業。如需詳細資訊,請參閱 將資料匯入至 Amazon RDS MariaDB 或 MySQL 資料庫,並減少停機時間 及 使用複寫從 MySQL 資料庫執行個體匯出資料。
若複寫作業停止連續超過 30 天 (不論手動停止或由於複寫錯誤),Amazon RDS 會結束來源資料庫執行個體和所有僅供讀取複本間的複寫作業。這樣做的原因在於,避免來源資料庫執行個體的儲存需求增加以及長期容錯移轉。僅供讀取複本資料庫執行個體仍可供使用。然而,無法恢復複寫作業,因為在複寫作業結束後,僅供讀取複本所需的二進位日誌已從來源資料庫執行個體刪除。您可建立新的僅供讀取複本供來源資料庫執行個體使用,以重新建立複寫作業。
對 MariaDB 僅供讀取複本的問題進行故障診斷
MariaDB 的複寫技術採取非同步,因此,來源資料庫執行個體的 BinLogDiskUsage
和僅供讀取複本上的 ReplicaLag
預料會偶爾增加。例如,來源資料庫執行個體可同時出現大量寫入操作。相對而言,僅供讀取複本的寫入操作則使用單一 I/O 執行緒序列化,這可能導致來源執行個體和僅供讀取複本之間的延遲。如需 MariaDB 文件中的僅供讀取複本詳細資訊,請造訪複寫概觀
您可執行下列動作,減少來源資料庫執行個體的更新與僅供讀取複本的後續更新間的延遲:
-
將僅供讀取複本的儲存體大小和資料庫執行個體類別大小,設定為等同於來源資料庫執行個體。
-
確保來源資料庫執行個體和僅供讀取複本所使用之資料庫參數群組中的參數設定相容。如需詳細資訊和範例,請參閱本節稍後討論的
max_allowed_packet
參數。
Amazon RDS 會監控複寫您的僅供讀取複本的狀態,並在複寫因任何原因停止時,將僅供讀取複本執行個體上的 Replication State
(複寫狀態) 欄位更新為 Error
(錯誤)。一個可能的範例為,僅供讀取複本上執行的 DML 查詢,與來源資料庫執行個體的更新相衝突。
您可以檢視 Replication Error
欄位,藉此檢閱 MariaDB 引擎擲出之相關聯錯誤的詳細資訊。也會產生指出僅供讀取複本之狀態的事件,包括 RDS-EVENT-0045、RDS-EVENT-0046 和 RDS-EVENT-0047。如需事件和訂閱事件的詳細資訊,請參閱使用 Amazon RDS 事件通知。如果傳回了 MariaDB 錯誤訊息,請在 MariaDB 錯誤訊息文件
其中一個常見問題就是僅供讀取複本的 max_allowed_packet
參數值小於來源資料庫執行個體的 max_allowed_packet
參數值,因而導致複寫錯誤。max_allowed_packet
參數是能夠在資料庫參數群組中設定的自訂參數,專用來指定可在資料庫上執行的 DML 程式碼大小上限。在部分案例中,與來源資料庫執行個體建立關聯之資料庫參數群組的 max_allowed_packet
參數值,會小於與來源僅供讀取複本建立關聯之資料庫參數群組的 max_allowed_packet
參數值。以這些情況而言,複寫程序可能會擲出錯誤 (Packet 大於 max_allowed_packet 位元組),並停止複寫作業。您可以透過讓來源和僅供讀取複本使用具有相同 max_allowed_packet
參數值的資料庫參數群組,藉此修正錯誤。
可能造成複寫錯誤的其他常見情況包括下列:
寫入僅供讀取複本上的資料表。如果您在僅供讀取複本上建立索引,您需要將
read_only
參數設為 0 才能建立索引。如果您要寫入僅供讀取複本上的資料表,可能中斷複寫。-
使用非交易式存放引擎 (例如 MyISAM)。僅供讀取複本需要交易式存放引擎。複寫功能僅支援 MariaDB 上的 InnoDB 儲存引擎。
-
使用不安全的非確定性查詢 (例如
SYSDATE()
)。如需詳細資訊,請參閱二進位日誌中安全和不安全陳述式的判定。
若您認為可安全略過錯誤,請遵循 略過目前複寫錯誤 中所述的步驟。否則,您可以刪除僅供讀取複本,並使用相同的資料庫執行個體識別符建立執行個體,讓端點與您的舊僅供讀取複本端點保持相同。如果複寫錯誤已修復,Replication State
(複寫狀態) 會變更為 replicating (複寫中)。
在某些情況下,如果程序失敗的期間未排清部分二進位日誌 (binlog) 事件,便無法將 MariaDB 資料庫執行個體的僅供讀取複本切換至次要資料庫。在這種情況下,手動刪除並重新建立僅供讀取複本。如果要降低此情況發生的機率,則可設定以下參數值:sync_binlog=1
和 innodb_flush_log_at_trx_commit=1
。但這些設定可能會降低效能,所以請先測試這些設定所帶來的影響,再於生產環境中實作變更內容。