文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  複本伺服器選項與變數

19.1.6.3 複本伺服器選項與變數

本節說明適用於複本伺服器的伺服器選項與系統變數,並包含下列內容

命令列選項檔案中指定選項。許多選項可以在伺服器執行時,使用CHANGE REPLICATION SOURCE TO陳述式設定。使用SET指定系統變數值。

伺服器 ID。在來源與每個複本上,您必須設定server_id系統變數,以建立 1 到 232 − 1 範圍內的唯一複製 ID。唯一表示每個 ID 必須與複製拓樸中任何其他來源或複本所使用的任何其他 ID 不同。範例 my.cnf 檔案

[mysqld]
server-id=3
複本伺服器的啟動選項

本節說明用於控制複本伺服器的啟動選項。許多選項可以在伺服器執行時,使用CHANGE REPLICATION SOURCE TO陳述式設定。其他選項,例如 --replicate-* 選項,只能在複本伺服器啟動時設定。與複製相關的系統變數將在本節稍後討論。

  • --master-retry-count=count

    命令列格式 --master-retry-count=#
    已棄用
    類型 整數
    預設值 10
    最小值 0
    最大值 (64 位元平台) 18446744073709551615
    最大值 (32 位元平台) 4294967295

    此選項已棄用;預計將在未來的 MySQL 版本中移除。請改用CHANGE REPLICATION SOURCE TO陳述式的 SOURCE_RETRY_COUNT 選項。

  • --max-relay-log-size=size

    命令列格式 --max-relay-log-size=#
    系統變數 max_relay_log_size
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 0
    最小值 0
    最大值 1073741824
    單位 位元組
    區塊大小 4096

    伺服器自動輪換中繼日誌檔案的大小。如果此值為非零值,則當中繼日誌大小超過此值時,會自動輪換。如果此值為零(預設值),則中繼日誌輪換發生時的大小由 max_binlog_size 的值決定。如需更多資訊,請參閱章節 19.2.4.1,「中繼日誌」

  • --relay-log-purge={0|1}

    命令列格式 --relay-log-purge[={OFF|ON}]
    系統變數 relay_log_purge
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 ON

    停用或啟用不再需要時自動清除中繼日誌。預設值為 1(啟用)。這是一個全域變數,可以使用 SET GLOBAL relay_log_purge = N 動態變更。當啟用 --relay-log-recovery 選項時停用中繼日誌的清除會造成資料一致性的風險,因此不具備當機安全性。

  • --relay-log-space-limit=size

    命令列格式 --relay-log-space-limit=#
    系統變數 relay_log_space_limit
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 0
    最小值 0
    最大值 18446744073709551615
    單位 位元組

    此選項會對複本上所有中繼日誌的總大小設定以位元組為單位的上限。值為 0 表示 無限制。這對於磁碟空間有限的複本伺服器主機很有用。當達到限制時,I/O(接收器)執行緒會停止從來源伺服器讀取二進位日誌事件,直到 SQL 執行緒趕上並刪除一些未使用的中繼日誌。請注意,此限制並非絕對:在某些情況下,SQL(應用程式)執行緒需要更多事件才能刪除中繼日誌。在這種情況下,接收器執行緒會超出限制,直到應用程式執行緒可以刪除某些中繼日誌為止,因為不這樣做會造成死結。您不應將 --relay-log-space-limit 設定為小於 --max-relay-log-size 值兩倍的值(如果 --max-relay-log-size 為 0,則為 --max-binlog-size)。在這種情況下,接收器執行緒可能因為超出 --relay-log-space-limit 而等待可用空間,但應用程式執行緒沒有中繼日誌可清除,也無法滿足接收器執行緒的需求。這會強制接收器執行緒暫時忽略 --relay-log-space-limit

  • --replicate-do-db=db_name

    命令列格式 --replicate-do-db=name
    類型 字串

    使用資料庫的名稱建立複寫篩選器。也可以使用 CHANGE REPLICATION FILTER REPLICATE_DO_DB 建立這類篩選器。

    此選項支援通道特定的複寫篩選器,讓多來源複本可以使用不同來源的特定篩選器。若要在名為 channel_1 的通道上設定通道特定的複寫篩選器,請使用 --replicate-do-db:channel_1:db_name。在這種情況下,第一個冒號會被解譯為分隔符號,後續的冒號則為字面冒號。如需更多資訊,請參閱章節 19.2.5.4,「基於複寫通道的篩選器」

    注意

    全域複寫篩選器無法在設定為群組複寫的 MySQL 伺服器執行個體上使用,因為在某些伺服器上篩選交易會使群組無法針對一致狀態達成協議。通道特定的複寫篩選器可用於與群組複寫沒有直接關聯的複寫通道,例如群組成員也充當群組外部來源的複本的情況。它們不能用於 group_replication_appliergroup_replication_recovery 通道。

    此複寫篩選器的精確效果取決於使用的是陳述式型複寫還是以列為基礎的複寫。

    陳述式型複寫。告知複寫 SQL 執行緒將複寫限制為預設資料庫(也就是由 USE 選取的資料庫)為 db_name 的陳述式。若要指定多個資料庫,請多次使用此選項,每個資料庫一次;但是,這樣做不會複寫跨資料庫的陳述式,例如 UPDATE some_db.some_table SET foo='bar',同時選取不同的資料庫(或沒有選取任何資料庫)。

    警告

    若要指定多個資料庫,您必須使用此選項的多個執行個體。由於資料庫名稱可以包含逗號,如果您提供逗號分隔清單,則該清單會被視為單一資料庫的名稱。

    以下範例說明在使用陳述式型複寫時,結果可能不如預期:如果複本是以 --replicate-do-db=sales 啟動,並且您在來源上發出下列陳述式,則 UPDATE 陳述式不會被複寫

    USE prices;
    UPDATE sales.january SET amount=amount+1000;

    這種 僅檢查預設資料庫 行為的主要原因是,單從陳述式很難判斷是否應該複寫(例如,如果您使用的是跨多個資料庫的多表 DELETE 陳述式或多表 UPDATE 陳述式)。如果沒有需要,則只檢查預設資料庫而非所有資料庫也比較快。

    以列為基礎的複寫。告知複寫 SQL 執行緒將複寫限制為資料庫 db_name。僅變更屬於 db_name 的表格;目前的資料庫對此沒有任何影響。假設複本是以 --replicate-do-db=sales 啟動,並且以列為基礎的複寫生效,然後在來源上執行下列陳述式

    USE prices;
    UPDATE sales.february SET amount=amount+100;

    複本上 sales 資料庫中的 february 表格會根據 UPDATE 陳述式進行變更;無論是否發出 USE 陳述式,都會發生這種情況。但是,當使用以列為基礎的複寫和 --replicate-do-db=sales 時,在來源上發出下列陳述式對複本沒有任何影響

    USE prices;
    UPDATE prices.march SET amount=amount-25;

    即使將 USE prices 陳述式變更為 USE salesUPDATE 陳述式的效果仍然不會被複寫。

    關於 --replicate-do-db 在陳述式型複寫和以列為基礎的複寫中處理方式的另一個重要差異,發生在參照多個資料庫的陳述式上。假設複本是以 --replicate-do-db=db1 啟動,並且在來源上執行下列陳述式

    USE db1;
    UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;

    如果您使用的是陳述式型複寫,則複本上的兩個表格都會更新。但是,當使用以列為基礎的複寫時,複本上只會影響 table1;由於 table2 位於不同的資料庫中,因此複本上的 table2 不會因 UPDATE 而變更。現在假設,使用的不是 USE db1 陳述式,而是使用了 USE db4 陳述式

    USE db4;
    UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;

    在這種情況下,當使用陳述式型複寫時,UPDATE 陳述式對複本沒有任何影響。但是,如果您使用的是以列為基礎的複寫,UPDATE 會變更複本上的 table1,但不會變更 table2,換句話說,只會變更以 --replicate-do-db 指定名稱的資料庫中的表格,而預設資料庫的選擇對此行為沒有任何影響。

    如果您需要跨資料庫更新才能運作,請改用 --replicate-wild-do-table=db_name.%。請參閱章節 19.2.5,「伺服器如何評估複寫篩選規則」

    注意

    此選項對複寫的影響方式與 --binlog-do-db 對二進位記錄的影響方式相同,並且複寫格式對 --replicate-do-db 如何影響複寫行為的影響,與記錄格式對 --binlog-do-db 行為的影響相同。

    此選項對 BEGINCOMMITROLLBACK 陳述式沒有任何影響。

  • --replicate-ignore-db=db_name

    命令列格式 --replicate-ignore-db=name
    類型 字串

    使用資料庫的名稱建立複寫篩選器。也可以使用 CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB 建立這類篩選器。

    此選項支援針對特定通道的複製篩選器,使多來源複本能夠針對不同的來源使用特定的篩選器。若要設定名為 channel_1 的通道上的特定通道複製篩選器,請使用 --replicate-ignore-db:channel_1:db_name。在此情況下,第一個冒號會被解譯為分隔符號,後續的冒號則為字面上的冒號。請參閱第 19.2.5.4 節,「複製通道式篩選器」以取得更多資訊。

    注意

    全域複寫篩選器無法在設定為群組複寫的 MySQL 伺服器執行個體上使用,因為在某些伺服器上篩選交易會使群組無法針對一致狀態達成協議。通道特定的複寫篩選器可用於與群組複寫沒有直接關聯的複寫通道,例如群組成員也充當群組外部來源的複本的情況。它們不能用於 group_replication_appliergroup_replication_recovery 通道。

    若要指定多個要忽略的資料庫,請多次使用此選項,每個資料庫使用一次。因為資料庫名稱可以包含逗號,如果您提供以逗號分隔的清單,則會將其視為單一資料庫的名稱。

    --replicate-do-db相同,此篩選的精確效果取決於是否使用基於語句或基於列的複製,並在接下來的幾段中進行描述。

    基於語句的複製。告知複製 SQL 線程不要複製預設資料庫(即由 USE 選取的資料庫)為 db_name 的任何語句。

    基於列的複製。告知複製 SQL 線程不要更新資料庫 db_name 中的任何表格。預設資料庫沒有影響。

    當使用基於語句的複製時,以下範例不會如您預期的那樣運作。假設複本以 --replicate-ignore-db=sales 啟動,並且您在來源上發出以下語句

    USE prices;
    UPDATE sales.january SET amount=amount+1000;

    UPDATE 語句在這種情況下被複製,因為 --replicate-ignore-db 僅適用於預設資料庫(由 USE 語句決定)。因為語句中明確指定了 sales 資料庫,所以語句未被篩選。然而,當使用基於列的複製時,UPDATE 語句的效果不會傳播到複本,並且複本的 sales.january 表格副本保持不變;在此情況下,--replicate-ignore-db=sales 會導致複本忽略對來源 sales 資料庫副本中的表格所做的所有變更。

    如果您使用跨資料庫更新,並且不希望這些更新被複製,則不應使用此選項。請參閱第 19.2.5 節,「伺服器如何評估複製篩選規則」

    如果您需要跨資料庫更新才能運作,請改用 --replicate-wild-ignore-table=db_name.%。請參閱第 19.2.5 節,「伺服器如何評估複製篩選規則」

    注意

    此選項對複製的影響方式與 --binlog-ignore-db 對二進位日誌記錄的影響相同,並且複製格式對 --replicate-ignore-db 如何影響複製行為的影響,與日誌記錄格式對 --binlog-ignore-db 行為的影響相同。

    此選項對 BEGINCOMMITROLLBACK 陳述式沒有任何影響。

  • --replicate-do-table=db_name.tbl_name

    命令列格式 --replicate-do-table=name
    類型 字串

    透過告知複製 SQL 線程將複製限制為給定表格來建立複製篩選器。若要指定多個表格,請多次使用此選項,每個表格使用一次。與 --replicate-do-db 相比,這適用於跨資料庫更新和預設資料庫更新。請參閱第 19.2.5 節,「伺服器如何評估複製篩選規則」。您也可以透過發出 CHANGE REPLICATION FILTER REPLICATE_DO_TABLE 語句來建立此類篩選器。

    此選項支援針對特定通道的複製篩選器,使多來源複本能夠針對不同的來源使用特定的篩選器。若要設定名為 channel_1 的通道上的特定通道複製篩選器,請使用 --replicate-do-table:channel_1:db_name.tbl_name。在此情況下,第一個冒號會被解譯為分隔符號,後續的冒號則為字面上的冒號。請參閱第 19.2.5.4 節,「複製通道式篩選器」以取得更多資訊。

    注意

    全域複寫篩選器無法在設定為群組複寫的 MySQL 伺服器執行個體上使用,因為在某些伺服器上篩選交易會使群組無法針對一致狀態達成協議。通道特定的複寫篩選器可用於與群組複寫沒有直接關聯的複寫通道,例如群組成員也充當群組外部來源的複本的情況。它們不能用於 group_replication_appliergroup_replication_recovery 通道。

    此選項僅影響適用於表格的語句。它不影響僅適用於其他資料庫物件(例如預存常式)的語句。若要篩選在預存常式上運作的語句,請使用一個或多個 --replicate-*-db 選項。

  • --replicate-ignore-table=db_name.tbl_name

    命令列格式 --replicate-ignore-table=name
    類型 字串

    透過告知複製 SQL 線程不要複製任何更新指定表格的語句(即使相同的語句可能會更新任何其他表格)來建立複製篩選器。若要指定多個要忽略的表格,請多次使用此選項,每個表格使用一次。與 --replicate-ignore-db 相比,這適用於跨資料庫更新。請參閱第 19.2.5 節,「伺服器如何評估複製篩選規則」。您也可以透過發出 CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE 語句來建立此類篩選器。

    此選項支援針對特定通道的複製篩選器,使多來源複本能夠針對不同的來源使用特定的篩選器。若要設定名為 channel_1 的通道上的特定通道複製篩選器,請使用 --replicate-ignore-table:channel_1:db_name.tbl_name。在此情況下,第一個冒號會被解譯為分隔符號,後續的冒號則為字面上的冒號。請參閱第 19.2.5.4 節,「複製通道式篩選器」以取得更多資訊。

    注意

    全域複寫篩選器無法在設定為群組複寫的 MySQL 伺服器執行個體上使用,因為在某些伺服器上篩選交易會使群組無法針對一致狀態達成協議。通道特定的複寫篩選器可用於與群組複寫沒有直接關聯的複寫通道,例如群組成員也充當群組外部來源的複本的情況。它們不能用於 group_replication_appliergroup_replication_recovery 通道。

    此選項僅影響適用於表格的語句。它不影響僅適用於其他資料庫物件(例如預存常式)的語句。若要篩選在預存常式上運作的語句,請使用一個或多個 --replicate-*-db 選項。

  • --replicate-rewrite-db=from_name->to_name

    命令列格式 --replicate-rewrite-db=old_name->new_name
    類型 字串

    告知複本建立一個複製篩選器,將來源上的資料庫名稱 from_name 翻譯為 to_name。僅影響涉及表格的語句,不影響 CREATE DATABASEDROP DATABASEALTER DATABASE 等語句。

    若要指定多個重寫,請多次使用此選項。伺服器使用第一個具有符合的 from_name 值的選項。資料庫名稱翻譯是在測試 --replicate-* 規則之前完成的。您也可以透過發出 CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB 語句來建立此類篩選器。

    如果您在命令列上使用 --replicate-rewrite-db 選項,並且 > 字元對您的命令解譯器來說是特殊的,請引用選項值。例如

    $> mysqld --replicate-rewrite-db="olddb->newdb"

    --replicate-rewrite-db 選項的效果,會因查詢使用基於語句或基於列的二進位日誌記錄格式而有所不同。對於基於語句的格式,DML 語句會根據目前資料庫進行翻譯,如 USE 語句所指定。對於基於列的格式,DML 語句會根據修改後的表格所在的資料庫進行翻譯。DDL 語句始終根據目前資料庫進行篩選,如 USE 語句所指定,無論二進位日誌記錄格式如何。

    為了確保重寫產生預期的結果,尤其是在與其他複製篩選選項結合使用時,請在使用 --replicate-rewrite-db 選項時遵循以下建議

    • 在來源和複本上以不同的名稱手動建立 from_nameto_name 資料庫。

    • 如果您使用基於語句或混合的二進位日誌記錄格式,請勿使用跨資料庫查詢,並且請勿在查詢中指定資料庫名稱。對於 DDL 和 DML 語句,請依賴 USE 語句來指定目前的資料庫,並且僅在查詢中使用表格名稱。

    • 如果您僅使用基於列的二進位日誌記錄格式,對於 DDL 語句,請依賴 USE 語句來指定目前的資料庫,並且僅在查詢中使用表格名稱。對於 DML 語句,您可以根據需要使用完全限定的表格名稱 (db.table)。

    如果遵循這些建議,則可以安全地將 --replicate-rewrite-db 選項與表格層級複製篩選選項(例如 --replicate-do-table)結合使用。

    此選項支援針對特定通道的複製篩選器,使多來源複本能夠針對不同的來源使用特定的篩選器。指定通道名稱,後跟一個冒號,然後是篩選器規格。第一個冒號會被解譯為分隔符號,後續的任何冒號都會被解譯為字面上的冒號。例如,若要設定名為 channel_1 的通道上的特定通道複製篩選器,請使用

    $> mysqld --replicate-rewrite-db=channel_1:db_name1->db_name2

    如果您使用冒號但未指定通道名稱,則該選項會設定預設複製通道的複製篩選器。請參閱第 19.2.5.4 節,「複製通道式篩選器」以取得更多資訊。

    注意

    全域複寫篩選器無法在設定為群組複寫的 MySQL 伺服器執行個體上使用,因為在某些伺服器上篩選交易會使群組無法針對一致狀態達成協議。通道特定的複寫篩選器可用於與群組複寫沒有直接關聯的複寫通道,例如群組成員也充當群組外部來源的複本的情況。它們不能用於 group_replication_appliergroup_replication_recovery 通道。

  • --replicate-same-server-id

    命令列格式 --replicate-same-server-id[={OFF|ON}]
    類型 布林值
    預設值 OFF

    此選項用於副本伺服器。預設值為 0(FALSE)。將此選項設為 1(TRUE)時,副本伺服器不會跳過具有自身伺服器 ID 的事件。此設定通常僅在罕見的配置中才有用。

    當在副本伺服器上啟用二進制日誌時,如果伺服器是循環複製拓撲的一部分,則副本伺服器上的 --replicate-same-server-id--log-replica-updates 選項的組合可能會導致複製中的無限迴圈。(在 MySQL 8.4 中,預設啟用二進制日誌,當啟用二進制日誌時,預設會記錄副本更新。)但是,全域交易識別符號 (GTID) 可透過跳過已套用的交易來防止這種情況發生。如果在副本伺服器上設定 gtid_mode=ON,您可以使用此選項組合啟動伺服器,但在伺服器執行時,您無法變更為任何其他 GTID 模式。如果設定了任何其他 GTID 模式,則伺服器不會以此選項組合啟動。

    預設情況下,如果複製 I/O(接收器)執行緒的二進制日誌事件具有副本伺服器的伺服器 ID,則不會將其寫入中繼日誌(此最佳化有助於節省磁碟空間)。如果您想使用 --replicate-same-server-id,請務必在您讓副本伺服器讀取您希望複製 SQL(套用程式)執行緒執行的自身事件之前,使用此選項啟動副本伺服器。

  • --replicate-wild-do-table=db_name.tbl_name

    命令列格式 --replicate-wild-do-table=name
    類型 字串

    透過告知複製 SQL(套用程式)執行緒將複製限制在任何更新的表格符合指定的資料庫和表格名稱模式的語句,來建立複製篩選器。模式可以包含 %_ 通配符,它們的含義與 LIKE 模式比對運算符的含義相同。若要指定多個表格,請多次使用此選項,每個表格一次。這適用於跨資料庫更新。請參閱 第 19.2.5 節,「伺服器如何評估複製篩選規則」。您也可以透過發出 CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE 陳述式來建立此類篩選器。

    此選項支援通道特定的複製篩選器,使多來源副本能夠為不同的來源使用特定的篩選器。若要在名為 channel_1 的通道上設定通道特定的複製篩選器,請使用 --replicate-wild-do-table:channel_1:db_name.tbl_name。在此情況下,第一個冒號會被視為分隔符號,後續的冒號則為文字冒號。有關詳細資訊,請參閱 第 19.2.5.4 節,「基於複製通道的篩選器」

    重要事項

    全域複寫篩選器無法在設定為群組複寫的 MySQL 伺服器執行個體上使用,因為在某些伺服器上篩選交易會使群組無法針對一致狀態達成協議。通道特定的複寫篩選器可用於與群組複寫沒有直接關聯的複寫通道,例如群組成員也充當群組外部來源的複本的情況。它們不能用於 group_replication_appliergroup_replication_recovery 通道。

    --replicate-wild-do-table 選項指定的複製篩選器適用於表格、檢視和觸發程序。它不適用於預存程序和函式或事件。若要篩選在後者物件上操作的語句,請使用一個或多個 --replicate-*-db 選項。

    例如,--replicate-wild-do-table=foo%.bar% 只會複製使用資料庫名稱以 foo 開頭,且表格名稱以 bar 開頭的表格的更新。

    如果表格名稱模式為 %,它會符合任何表格名稱,且該選項也適用於資料庫層級語句(CREATE DATABASEDROP DATABASEALTER DATABASE)。例如,如果您使用 --replicate-wild-do-table=foo%.%,如果資料庫名稱符合模式 foo%,則會複製資料庫層級語句。

    重要事項

    表格層級複製篩選器僅適用於查詢中明確提及和操作的表格。它們不適用於查詢隱含更新的表格。例如,GRANT 語句會更新 mysql.user 系統表格,但未提及該表格,因此不受指定 mysql.% 作為通配符模式的篩選器影響。

    若要在資料庫或表格名稱模式中包含文字通配符,請使用反斜線逸出它們。例如,若要複製名為 my_own%db 的資料庫的所有表格,但不複製來自 my1ownAABCdb 資料庫的表格,您應該像這樣逸出 _% 字元:--replicate-wild-do-table=my\_own\%db。如果您在命令列上使用此選項,您可能需要根據您的命令解釋器加倍反斜線或引用選項值。例如,對於 bash Shell,您需要輸入 --replicate-wild-do-table=my\\_own\\%db

  • --replicate-wild-ignore-table=db_name.tbl_name

    命令列格式 --replicate-wild-ignore-table=name
    類型 字串

    建立一個複製篩選器,該篩選器會阻止複製 SQL 執行緒複製任何表格符合指定通配符模式的語句。若要指定多個要忽略的表格,請多次使用此選項,每個表格一次。這適用於跨資料庫更新。請參閱 第 19.2.5 節,「伺服器如何評估複製篩選規則」。您也可以透過發出 CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE 陳述式來建立此類篩選器。

    此選項支援通道特定的複製篩選器,使多來源副本能夠為不同的來源使用特定的篩選器。若要在名為 channel_1 的通道上設定通道特定的複製篩選器,請使用 --replicate-wild-ignore:channel_1:db_name.tbl_name。在此情況下,第一個冒號會被視為分隔符號,後續的冒號則為文字冒號。有關詳細資訊,請參閱 第 19.2.5.4 節,「基於複製通道的篩選器」

    重要事項

    全域複寫篩選器無法在設定為群組複寫的 MySQL 伺服器執行個體上使用,因為在某些伺服器上篩選交易會使群組無法針對一致狀態達成協議。通道特定的複寫篩選器可用於與群組複寫沒有直接關聯的複寫通道,例如群組成員也充當群組外部來源的複本的情況。它們不能用於 group_replication_appliergroup_replication_recovery 通道。

    例如,--replicate-wild-ignore-table=foo%.bar% 不會複製使用資料庫名稱以 foo 開頭,且表格名稱以 bar 開頭的表格的更新。有關比對如何運作的資訊,請參閱 --replicate-wild-do-table 選項的說明。在選項值中包含文字通配符的規則與 --replicate-wild-ignore-table 的規則相同。

    重要事項

    表格層級複製篩選器僅適用於查詢中明確提及和操作的表格。它們不適用於查詢隱含更新的表格。例如,GRANT 語句會更新 mysql.user 系統表格,但未提及該表格,因此不受指定 mysql.% 作為通配符模式的篩選器影響。

    如果您需要篩選掉 GRANT 語句或其他管理語句,一種可能的解決方法是使用 --replicate-ignore-db 篩選器。此篩選器會根據 USE 語句所決定的目前生效的預設資料庫來運作。因此,您可以建立一個篩選器來忽略未複製的資料庫的語句,然後立即發出 USE 語句,將預設資料庫切換到該資料庫,然後再發出任何您想要忽略的管理語句。在管理語句中,命名該語句套用的實際資料庫。

    例如,如果在副本伺服器上設定 --replicate-ignore-db=nonreplicated,則以下語句序列會導致忽略 GRANT 語句,因為預設資料庫 nonreplicated 處於作用中

    USE nonreplicated;
    GRANT SELECT, INSERT ON replicated.t1 TO 'someuser'@'somehost';
  • --skip-replica-start

    命令列格式 --skip-replica-start[={OFF|ON}]
    系統變數 skip_replica_start
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    --skip-replica-start 會告知副本伺服器在伺服器啟動時不要啟動複製 I/O(接收器)和 SQL(套用程式)執行緒。若要稍後啟動執行緒,請使用 START REPLICA 陳述式。

    您可以使用 skip_replica_start 系統變數來取代命令列選項,以允許使用 MySQL 伺服器的權限結構來存取此功能,以便資料庫管理員不需要任何作業系統的特殊存取權限。

  • --skip-slave-start

    命令列格式 --skip-slave-start[={OFF|ON}]
    已棄用
    系統變數 skip_slave_start
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    已棄用的 --skip-replica-start 別名。

  • --slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]

    命令列格式 --slave-skip-errors=name
    已棄用
    系統變數 slave_skip_errors
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 字串
    預設值 OFF
    有效值

    OFF

    [錯誤代碼清單]

    all

    ddl_exist_errors

    已棄用的 --replica-skip-errors 同義詞。

  • --slave-sql-verify-checksum={0|1}

    命令列格式 --slave-sql-verify-checksum[={OFF|ON}]
    類型 布林值
    預設值 ON

    已棄用的 --replica-sql-verify-checksum 同義詞

副本伺服器上使用的系統變數

以下清單說明用於控制副本伺服器的系統變數。它們可以在伺服器啟動時設定,並且其中一些可以使用 SET 在執行期間變更。本節稍早列出了與副本一起使用的伺服器選項。

  • init_replica

    命令列格式 --init-replica=name
    系統變數 init_replica
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 字串

    init_replica 類似於 init_connect,但它是一個字串,每次複製 SQL 執行緒啟動時都會由副本伺服器執行。字串的格式與 init_connect 變數的格式相同。此變數的設定會對後續的 START REPLICA 陳述式生效。

    注意

    複製 SQL 執行緒會在執行 init_replica 之前,先向客戶端傳送確認訊息。因此,無法保證在 START REPLICA 返回時,init_replica 已執行。請參閱 章節 15.4.2.4,「START REPLICA 陳述式」 以取得更多資訊。

  • init_slave

    命令列格式 --init-slave=name
    已棄用
    系統變數 init_slave
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 字串

    init_replica 的已棄用別名。

  • log_slow_replica_statements

    命令列格式 --log-slow-replica-statements[={OFF|ON}]
    系統變數 log_slow_replica_statements
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    啟用慢查詢日誌時,log_slow_replica_statements 會啟用在複本上執行時間超過 long_query_time 秒的查詢記錄。請注意,如果正在使用以列為基礎的複寫 (binlog_format=ROW),則 log_slow_replica_statements 無效。只有在二進位日誌中以陳述式格式記錄查詢時,才會將查詢新增至複本的慢查詢日誌,也就是說,當設定 binlog_format=STATEMENT 時,或是當設定 binlog_format=MIXED 且陳述式以陳述式格式記錄時。當設定 binlog_format=MIXED 時,以列格式記錄的慢查詢,或者當設定 binlog_format=ROW 時記錄的慢查詢,即使啟用 log_slow_replica_statements,也不會新增至複本的慢查詢日誌。

    設定 log_slow_replica_statements 不會立即生效。變數的狀態適用於所有後續的 START REPLICA 陳述式。另請注意,long_query_time 的全域設定適用於 SQL 執行緒的整個生命週期。如果您變更該設定,您必須停止並重新啟動複製 SQL 執行緒,才能在那裡實作變更 (例如,透過發出 STOP REPLICASTART REPLICA 陳述式,並使用 SQL_THREAD 選項)。

  • log_slow_slave_statements

    命令列格式 --log-slow-slave-statements[={OFF|ON}]
    已棄用
    系統變數 log_slow_slave_statements
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    log_slow_replica_statements 的已棄用別名。

  • max_relay_log_size

    命令列格式 --max-relay-log-size=#
    系統變數 max_relay_log_size
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 0
    最小值 0
    最大值 1073741824
    單位 位元組
    區塊大小 4096

    如果複本寫入其轉送日誌,導致目前的日誌檔案大小超過此變數的值,則複本會旋轉轉送日誌 (關閉目前的檔案並開啟下一個檔案)。如果 max_relay_log_size 為 0,伺服器會對二進位日誌和轉送日誌使用 max_binlog_size。如果 max_relay_log_size 大於 0,它會限制轉送日誌的大小,讓您可以針對兩個日誌設定不同的大小。您必須將 max_relay_log_size 設定為 4096 個位元組到 1GB (含) 之間,或設定為 0。預設值為 0。請參閱 章節 19.2.3,「複製執行緒」

  • relay_log

    命令列格式 --relay-log=file_name
    系統變數 relay_log
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 檔案名稱

    轉送日誌檔案的基底名稱。對於預設的複製通道,轉送日誌的預設基底名稱為 主機名稱-relay-bin。對於非預設的複製通道,轉送日誌的預設基底名稱為 主機名稱-relay-bin-通道,其中 通道 是記錄在此轉送日誌中的複製通道名稱。

    伺服器會在資料目錄中寫入檔案,除非基底名稱的前面加上絕對路徑名稱以指定不同的目錄。伺服器會透過在基底名稱中加上數值後綴,依序建立轉送日誌檔案。

    複製伺服器上的轉送日誌和轉送日誌索引,不能給予與二進位日誌和二進位日誌索引相同的名稱,後兩者的名稱是由 --log-bin--log-bin-index 選項所指定。如果二進位日誌和轉送日誌檔案的基底名稱相同,則伺服器會發出錯誤訊息,且不會啟動。

    由於 MySQL 剖析伺服器選項的方式,如果您在伺服器啟動時指定此變數,則必須提供值;只有在實際未指定選項時,才會使用預設的基底名稱。如果您在伺服器啟動時指定 relay_log 系統變數,但未指定值,則可能會產生非預期的行為;此行為取決於使用的其他選項、指定選項的順序,以及選項是在命令列中指定還是在選項檔案中指定。如需有關 MySQL 如何處理伺服器選項的更多資訊,請參閱 章節 6.2.2,「指定程式選項」

    如果您指定此變數,指定的值也會用作轉送日誌索引檔案的基底名稱。您可以使用 relay_log_index 系統變數,指定不同的轉送日誌索引檔案基底名稱,來覆寫此行為。

    當伺服器從索引檔案讀取項目時,它會檢查項目是否包含相對路徑。如果包含,則路徑的相對部分會取代為使用 relay_log 系統變數設定的絕對路徑。絕對路徑會保持不變;在這種情況下,必須手動編輯索引,才能啟用新的路徑或要使用的路徑。

    您可能會發現 relay_log 系統變數在執行以下工作中很有用

    • 建立名稱與主機名稱無關的轉送日誌。

    • 如果您需要將轉送日誌放在資料目錄以外的區域,因為您的轉送日誌往往非常大,而且您不想縮減 max_relay_log_size

    • 透過使用磁碟之間的負載平衡來提高速度。

    您可以從 relay_log_basename 系統變數取得轉送日誌檔案名稱 (和路徑)。

  • relay_log_basename

    系統變數 relay_log_basename
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 檔案名稱
    預設值 datadir + '/' + 主機名稱 + '-relay-bin'

    保留轉送日誌檔案的基底名稱和完整路徑。最大變數長度為 256。此變數由伺服器設定,且為唯讀。

  • relay_log_index

    命令列格式 --relay-log-index=file_name
    系統變數 relay_log_index
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 檔案名稱
    預設值 *主機名稱*-relay-bin.index

    轉送日誌索引檔案的名稱。最大變數長度為 256。如果您未指定此變數,但指定了 relay_log 系統變數,則其值會用作轉送日誌索引檔案的預設基底名稱。如果也未指定 relay_log,則對於預設的複製通道,預設名稱為 主機名稱-relay-bin.index,並使用主機的名稱。對於非預設的複製通道,預設名稱為 主機名稱-relay-bin-通道.index,其中 通道 是記錄在此轉送日誌索引中的複製通道名稱。

    轉送日誌檔案的預設位置是資料目錄,或使用 relay_log 系統變數指定的任何其他位置。您可以透過在基底名稱中加入前置的絕對路徑名稱以指定不同的目錄,來使用 relay_log_index 系統變數指定替代位置。

    複製伺服器上的轉送日誌和轉送日誌索引,不能給予與二進位日誌和二進位日誌索引相同的名稱,後兩者的名稱是由 --log-bin--log-bin-index 選項所指定。如果二進位日誌和轉送日誌檔案的基底名稱相同,則伺服器會發出錯誤訊息,且不會啟動。

    由於 MySQL 剖析伺服器選項的方式,如果您在伺服器啟動時指定此變數,則必須提供值;只有在實際未指定選項時,才會使用預設的基底名稱。如果您在伺服器啟動時指定 relay_log_index 系統變數,但未指定值,則可能會產生非預期的行為;此行為取決於使用的其他選項、指定選項的順序,以及選項是在命令列中指定還是在選項檔案中指定。如需有關 MySQL 如何處理伺服器選項的更多資訊,請參閱 章節 6.2.2,「指定程式選項」

  • relay_log_purge

    命令列格式 --relay-log-purge[={OFF|ON}]
    系統變數 relay_log_purge
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 ON

    停用或啟用轉送日誌檔案在不再需要時的自動清除。預設值為 1 (ON)。

  • relay_log_recovery

    命令列格式 --relay-log-recovery[={OFF|ON}]
    系統變數 relay_log_recovery
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    如果啟用,此變數會啟用在伺服器啟動後立即自動復原轉送日誌。復原程序會建立新的轉送日誌檔案,將 SQL (應用程式) 執行緒位置初始化為此新的轉送日誌,並將 I/O (接收器) 執行緒初始化為應用程式執行緒位置。然後繼續從來源讀取轉送日誌。如果使用 CHANGE REPLICATION SOURCE TO 陳述式,針對複製通道設定了 SOURCE_AUTO_POSITION=1,則用於啟動複寫的來源位置可能是連線中接收到的位置,而不是在此程序中指派的位置。

    當停用 relay_log_recovery 時,伺服器會在啟動時清理轉送日誌,方法是執行以下動作

    • 移除日誌結尾處任何未完成的交易

    • 移除任何僅包含未完成交易部分的轉送日誌檔案

    • 從轉送日誌索引檔案中移除任何已移除之轉送日誌檔案的參考

    • 當從轉送日誌取得有效的來源位置和來源檔案名稱時,更新接收器執行緒的位置以符合此檔案和位置;否則,更新接收器執行緒的位置以符合應用程式的位置

    這個全域變數在執行時為唯讀。其值可以在副本伺服器啟動時使用 --relay-log-recovery 選項設定。此選項應在副本發生意外停止後使用,以確保不會處理任何可能損壞的中繼日誌,並且必須使用此選項以保證副本的崩潰安全。預設值為 0 (停用)。有關副本上最能抵抗意外停止的設定組合的資訊,請參閱第 19.4.2 節, 「處理副本意外停止」

    對於多執行緒副本(其中 replica_parallel_workers 大於 0),在啟動時設定 --relay-log-recovery 會自動處理從中繼日誌執行的交易序列中的任何不一致和間隙。當使用基於檔案位置的複寫時,可能會發生這些間隙。(有關更多詳細資訊,請參閱第 19.5.1.34 節,「複寫和交易不一致」。)中繼日誌恢復過程使用與 START REPLICA UNTIL SQL_AFTER_MTS_GAPS 陳述式相同的方法處理間隙。當副本達到一致的無間隙狀態時,中繼日誌恢復過程會繼續從來源擷取後續的交易,並從 SQL (applier) 執行緒位置開始。當使用基於 GTID 的複寫時,多執行緒副本會先檢查 SOURCE_AUTO_POSITION 是否設定為 ON,如果是,則會省略計算應該跳過或不應跳過的交易的步驟,以便恢復過程不需要舊的中繼日誌。

    注意

    此變數不會影響下列群組複寫通道

    • group_replication_applier

    • group_replication_recovery

    群組上執行的任何其他通道都會受到影響,例如從外部來源或其他群組複寫的通道。

  • relay_log_space_limit

    命令列格式 --relay-log-space-limit=#
    系統變數 relay_log_space_limit
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 0
    最小值 0
    最大值 18446744073709551615
    單位 位元組

    所有中繼日誌可使用的最大空間量。

  • replica_checkpoint_group

    命令列格式 --replica-checkpoint-group=#
    系統變數 replica_checkpoint_group
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 512
    最小值 32
    最大值 524280
    區塊大小 8

    replica_checkpoint_group 設定多執行緒副本在呼叫檢查點操作以更新其狀態之前可以處理的最大交易數,如 SHOW REPLICA STATUS 所示。設定此變數對未啟用多執行緒的副本沒有影響。設定此變數沒有立即的影響。變數的狀態適用於所有後續的 START REPLICA 陳述式。

    此變數與 replica_checkpoint_period 系統變數結合使用,當超過任一限制時,將執行檢查點,並重設追蹤交易數量和自上次檢查點以來經過時間的計數器。

    除非伺服器是使用 -DWITH_DEBUG 建置的,否則此變數允許的最小值為 32,在這種情況下,最小值為 1。有效值始終是 8 的倍數;您可以將其設定為非倍數的值,但伺服器會在儲存值之前將其向下捨入到下一個較低的 8 的倍數。(例外:除錯伺服器不會執行此類捨入。)無論伺服器是如何建置的,預設值都是 512,允許的最大值為 524280。

  • replica_checkpoint_period

    命令列格式 --replica-checkpoint-period=#
    系統變數 replica_checkpoint_period
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 300
    最小值 1
    最大值 4294967295
    單位 毫秒

    replica_checkpoint_period 設定在呼叫檢查點操作以更新多執行緒副本狀態(如 SHOW REPLICA STATUS 所示)之前允許經過的最大時間(以毫秒為單位)。設定此變數對未啟用多執行緒的副本沒有影響。設定此變數會立即對所有複寫通道生效,包括正在執行的通道。

    此變數與 replica_checkpoint_group 系統變數結合使用,當超過任一限制時,將執行檢查點,並重設追蹤交易數量和自上次檢查點以來經過時間的計數器。

    除非伺服器是使用 -DWITH_DEBUG 建置的,否則此變數允許的最小值為 1,在這種情況下,最小值為 0。無論伺服器是如何建置的,預設值都是 300 毫秒,可能的最大值是 4294967295 毫秒(大約 49.7 天)。

  • replica_compressed_protocol

    命令列格式 --replica-compressed-protocol[={OFF|ON}]
    系統變數 replica_compressed_protocol
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    replica_compressed_protocol 指定如果來源和副本都支援,是否要使用來源/副本連線協定的壓縮。如果此變數已停用(預設值),則連線不會壓縮。對此變數的變更會在後續的連線嘗試時生效;這包括發出 START REPLICA 陳述式之後,以及正在執行的複寫 I/O (接收器) 執行緒所建立的重新連線。

    二進位日誌交易壓縮(由 binlog_transaction_compression 系統變數啟用)也可以用於節省頻寬。如果您將二進位日誌交易壓縮與協定壓縮結合使用,則協定壓縮對資料起作用的機會較少,但仍然可以壓縮標頭以及未壓縮的事件和交易酬載。有關二進位日誌交易壓縮的更多資訊,請參閱第 7.4.4.5 節,「二進位日誌交易壓縮」

    如果啟用 replica_compressed_protocol,則它優先於為 CHANGE REPLICATION SOURCE TO 陳述式指定的任何 SOURCE_COMPRESSION_ALGORITHMS 選項。在這種情況下,如果來源和副本都支援該演算法,則與來源的連線會使用 zlib 壓縮。如果停用 replica_compressed_protocol,則會套用 SOURCE_COMPRESSION_ALGORITHMS 的值。有關更多資訊,請參閱第 6.2.8 節,「連線壓縮控制」

  • replica_exec_mode

    命令列格式 --replica-exec-mode=mode
    系統變數 replica_exec_mode
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 列舉
    預設值

    IDEMPOTENT (NDB)

    STRICT (其他)

    有效值

    STRICT

    IDEMPOTENT

    replica_exec_mode 控制複寫執行緒如何在複寫期間解決衝突和錯誤。IDEMPOTENT 模式會抑制重複鍵和找不到鍵的錯誤;STRICT 表示不會發生此類抑制。

    IDEMPOTENT 模式旨在用於多來源複寫、循環複寫和 NDB Cluster 複寫的一些其他特殊複寫場景。(有關更多資訊,請參閱第 25.7.10 節,「NDB Cluster 複寫:雙向和循環複寫」,以及第 25.7.12 節,「NDB Cluster 複寫衝突解決」。)NDB Cluster 會忽略為 replica_exec_mode 明確設定的任何值,並始終將其視為 IDEMPOTENT

    在 MySQL Server 8.4 中,STRICT 模式是預設值。

    設定此變數會立即對所有複寫通道生效,包括正在執行的通道。

    對於 NDB 以外的儲存引擎,IDEMPOTENT 模式僅應在您絕對確定可以安全地忽略重複鍵錯誤和找不到鍵的錯誤時使用。它旨在用於 NDB Cluster 的容錯移轉場景,其中採用了多來源複寫或循環複寫,不建議在其他情況下使用。

  • replica_load_tmpdir

    命令列格式 --replica-load-tmpdir=dir_name
    系統變數 replica_load_tmpdir
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 目錄名稱
    預設值 --tmpdir 的值

    replica_load_tmpdir 指定副本建立暫存檔案的目錄名稱。設定此變數會立即對所有複寫通道生效,包括正在執行的通道。預設情況下,此變數值等於 tmpdir 系統變數的值,或在未指定該系統變數時套用的預設值。

    當複寫 SQL 執行緒複寫 LOAD DATA 陳述式時,它會將要載入的檔案從中繼日誌擷取到暫存檔案中,然後將這些暫存檔案載入到表格中。如果在來源上載入的檔案很大,則副本上的暫存檔案也會很大。因此,建議使用此選項來告知副本將暫存檔案放在具有大量可用空間的檔案系統中的目錄中。在這種情況下,中繼日誌也很大,因此您可能還想設定 relay_log 系統變數,以將中繼日誌放在該檔案系統中。

    此選項指定的目錄應位於基於磁碟的檔案系統中(而不是基於記憶體的檔案系統),以便用於複寫 LOAD DATA 陳述式的暫存檔案可以在機器重新啟動後仍然存在。該目錄也不應該是在系統啟動過程中被作業系統清除的目錄。但是,如果已移除暫存檔案,複寫現在可以在重新啟動後繼續。

  • replica_max_allowed_packet

    命令列格式 --replica-max-allowed-packet=#
    系統變數 replica_max_allowed_packet
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 1073741824
    最小值 1024
    最大值 1073741824
    單位 位元組
    區塊大小 1024

    replica_max_allowed_packet 設定複製 SQL (applier) 和 I/O (receiver) 線程可以處理的最大封包大小 (以位元組為單位)。設定此變數會立即對所有複製通道生效,包括正在執行的通道。當加入事件標頭後,來源端寫入的二進制日誌事件可能比其 max_allowed_packet 設定值還長。 replica_max_allowed_packet 的設定值必須大於來源端的 max_allowed_packet 設定值,這樣使用基於列的複製進行大型更新時才不會導致複製失敗。

    此全域變數的值始終為 1024 的正整數倍;如果您將其設定為其他值,則該值會向下捨入為最接近的 1024 的較大倍數,以便儲存或使用;將 replica_max_allowed_packet 設定為 0 會導致使用 1024。(在所有此類情況下都會發出截斷警告。)預設值和最大值為 1073741824 (1 GB);最小值為 1024。

  • replica_net_timeout

    命令列格式 --replica-net-timeout=#
    系統變數 replica_net_timeout
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 60
    最小值 1
    最大值 31536000
    單位

    replica_net_timeout 指定在副本認為連線中斷、中止讀取並嘗試重新連線之前,等待來自來源端更多資料或心跳訊號的秒數。設定此變數不會立即生效。此變數的狀態會套用至所有後續的 START REPLICA 命令。

    預設值為 60 秒(一分鐘)。第一次重試會在逾時後立即發生。重試之間的間隔由 CHANGE REPLICATION SOURCE TO 陳述式的 SOURCE_CONNECT_RETRY 選項控制,而重新連線嘗試次數受 SOURCE_RETRY_COUNT 選項限制。

    如果連線仍然良好,則心跳間隔會阻止在沒有資料的情況下發生連線逾時,心跳間隔由 CHANGE REPLICATION SOURCE TO 陳述式的 SOURCE_HEARTBEAT_PERIOD 選項控制。心跳間隔預設為 replica_net_timeout 值的一半,並記錄在副本的連線中繼資料存放區中,並顯示在 replication_connection_configuration Performance Schema 表格中。請注意,變更 replica_net_timeout 的值或預設設定不會自動變更心跳間隔,無論心跳間隔是已明確設定還是使用先前計算的預設值。如果變更連線逾時時間,您也必須發出 CHANGE REPLICATION SOURCE TO 以將心跳間隔調整為適當的值,使其在連線逾時之前發生。

  • replica_parallel_type

    命令列格式 --replica-parallel-type=值
    已棄用
    系統變數 replica_parallel_type
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 列舉
    預設值 LOGICAL_CLOCK
    有效值

    DATABASE

    LOGICAL_CLOCK

    對於多線程副本(在 replica_parallel_workers 設定為大於 0 的值的副本),replica_parallel_type 指定用於決定哪些交易允許在副本上並行執行的策略。此變數對未啟用多線程的副本沒有影響。可能的值為

    • LOGICAL_CLOCK:交易在副本上並行套用,基於複製來源寫入二進制日誌的時間戳記。交易之間的相依性會根據它們的時間戳記進行追蹤,以便在可能的情況下提供額外的平行化。

    • DATABASE:更新不同資料庫的交易會並行套用。此值僅適用於將資料分割到多個資料庫,這些資料庫在來源端獨立且同時更新的情況。不得有跨資料庫限制,因為此類限制可能會在副本上被違反。

    當啟用 replica_preserve_commit_order 時,您必須使用 LOGICAL_CLOCK。依預設會為副本伺服器啟用多線程(預設為 replica_parallel_workers=4),且 LOGICAL_CLOCK 是預設值。(replica_preserve_commit_order 依預設也會啟用。)

    當複製拓樸使用多個層級的副本時,對於距離來源端較遠的每個層級,LOGICAL_CLOCK 每個層級可能實現較少的平行化。

    當使用 binlog_transaction_compression 系統變數啟用二進制日誌交易壓縮時,如果將 replica_parallel_type 設定為 DATABASE,則在排定交易之前會先對交易影響的所有資料庫進行對應。與每個事件對應和排程的未壓縮交易相比,將二進制日誌交易壓縮與 DATABASE 策略搭配使用可能會降低平行化程度。

    replica_parallel_type 已被棄用,並且不支援使用資料庫分割來平行化交易。預計在未來的版本中將會移除對這些項目的支援,並且之後將會獨家使用 LOGICAL_CLOCK

  • replica_parallel_workers

    命令列格式 --replica-parallel-workers=#
    系統變數 replica_parallel_workers
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 4
    最小值 0
    最大值 1024

    replica_parallel_workers 啟用副本上的多線程,並設定用於並行執行複製交易的 applier 線程數。當值大於或等於 1 時,副本會使用指定數量的 worker 線程來執行交易,外加一個協調器線程,該線程從中繼日誌讀取交易並將其排程到 worker 線程。當值為 0 時,只有一個線程會循序讀取和套用交易。如果您使用多個複製通道,則此變數的值會套用到每個通道使用的線程。

    預設值為 4,這表示副本依預設為多線程。

    將此變數設定為 0 已被棄用,會發出警告,並可能會在未來的 MySQL 版本中移除。對於單一 worker,請改為將 replica_parallel_workers 設定為 1。

    replica_preserve_commit_orderON(預設值)時,副本上的交易會以與它們在副本的中繼日誌中出現的相同順序在副本上外部化。交易在 applier 線程之間的分配方式由 replica_parallel_type 決定。這些系統變數也具有適用於多線程的預設值。

    若要停用平行執行,請將 replica_parallel_workers 設定為 1,在這種情況下,副本會使用一個讀取交易的協調器線程和一個套用交易的 worker 線程,這表示交易會依序套用。當 replica_parallel_workers 等於 1 時,replica_parallel_typereplica_preserve_commit_order 系統變數沒有影響並會被忽略。如果 replica_parallel_workers 等於 0,同時啟用 CHANGE REPLICATION SOURCE TO 選項 GTID_ONLY,則副本會擁有一個協調器線程和一個 worker 線程,就像將 replica_parallel_workers 設定為 1 一樣。使用一個平行 worker 時,replica_preserve_commit_order 系統變數也沒有影響。

    設定 replica_parallel_workers 不會立即生效,而是會套用至所有後續的 START REPLICA 陳述式。

    NDB Cluster 8.4 也支援多線程副本。如需更多資訊,請參閱 Section 25.7.11, “使用多線程 Applier 的 NDB Cluster 複製”

    增加 worker 數量會提高平行化的潛力。一般來說,這會將效能提高到一定程度,超過該程度後,增加 worker 數量會由於鎖定爭用等並行效應而降低效能。理想的數量取決於硬體和工作負載;這很難預測,通常必須透過測試才能找出。沒有主索引鍵的表格(始終會損害效能)可能會對 replica_parallel_workers > 1 的副本產生更大的負面效能影響;因此,請務必在啟用此選項之前,讓所有表格都具有主索引鍵。

  • replica_pending_jobs_size_max

    命令列格式 --replica-pending-jobs-size-max=#
    系統變數 replica_pending_jobs_size_max
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 128M
    最小值 1024
    最大值 16EiB
    單位 位元組
    區塊大小 1024

    對於多線程副本,此變數設定 applier 佇列可用的最大記憶體量(以位元組為單位),這些佇列保留尚未套用的事件。設定此變數對未啟用多線程的副本沒有影響。設定此變數不會立即生效。此變數的狀態會套用至所有後續的 START REPLICA 命令。

    此變數的最小值為 1024 位元組;預設值為 128MB。最大可能值為 18446744073709551615 (16 exbibytes)。在儲存之前,不是 1024 位元組的精確倍數的值會向下捨入至下一個較低的 1024 位元組的倍數。

    此變數的值為軟限制,可以設定為與正常工作負載相符。如果異常大的事件超過此大小,則會保留該交易,直到所有 worker 線程都有空的佇列,然後才會處理。在完成大型交易之前,會保留所有後續交易。

  • replica_preserve_commit_order

    命令列格式 --replica-preserve-commit-order[={OFF|ON}]
    系統變數 replica_preserve_commit_order
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 ON

    對於多執行緒的副本(設定 replica_parallel_workers 的值大於 0 的副本),設定 replica_preserve_commit_order=ON 可確保交易在副本上的執行和提交順序,與它們在副本的中繼日誌中出現的順序相同。這可以防止已從副本中繼日誌執行的交易序列中出現間隙,並在副本上保留與來源相同的交易歷史記錄(具有以下列出的限制)。此變數對於未啟用多執行緒的副本沒有影響。

    在 MySQL 8.4 中,副本伺服器預設啟用多執行緒(預設 replica_parallel_workers=4),因此 replica_preserve_commit_order=ON 是預設值,且 replica_parallel_type=LOGICAL_CLOCK 也是預設值。此外,如果 replica_parallel_workers 設定為 1,則會忽略 replica_preserve_commit_order 的設定,因為在該情況下,交易的順序無論如何都會被保留。

    設定 replica_preserve_commit_order=ON 不需要副本上的二進制日誌記錄和副本更新日誌記錄,如果需要,可以將其停用。設定 replica_preserve_commit_order=ON 需要將 replica_parallel_type 設定為 LOGICAL_CLOCK,這是 MySQL 8.4 中的預設值。在變更 replica_preserve_commit_orderreplica_parallel_type 的值之前,必須停止複寫 SQL 執行緒(如果您使用多個複寫通道,則必須停止所有複寫通道)。

    當設定 replica_preserve_commit_order=OFF 時,多執行緒副本平行套用的交易可能會以亂序提交。因此,檢查最近執行的交易並不能保證來源的所有先前交易都已在副本上執行。從副本的中繼日誌執行的交易序列中有可能出現間隙。當使用多執行緒副本時,這會對記錄和復原產生影響。請參閱 第 19.5.1.34 節「複寫和交易不一致性」以取得更多資訊。

    當設定 replica_preserve_commit_order=ON 時,執行中的工作執行緒會等到所有先前的交易都提交之後才提交。當某個執行緒正在等待其他工作執行緒提交其交易時,它會將其狀態回報為 等待先前交易提交。使用此模式,多執行緒副本永遠不會進入來源未處於的狀態。這支援使用複寫進行讀取擴展。請參閱 第 19.4.5 節「使用複寫進行擴展」

    注意
    • replica_preserve_commit_order=ON 不會阻止來源二進制日誌位置延遲,其中 Exec_master_log_pos 落後於已執行交易的位置。請參閱 第 19.5.1.34 節「複寫和交易不一致性」

    • 如果副本在其二進制日誌上使用篩選器,例如 --binlog-do-db,則 replica_preserve_commit_order=ON 不會保留提交順序和交易歷史記錄。

    • replica_preserve_commit_order=ON 不會保留非交易性 DML 更新的順序。這些更新可能會在它們在中繼日誌中之前的交易之前提交,這可能會導致已從副本的中繼日誌執行的交易序列中出現間隙。

    • 如果使用基於語句的複寫,且交易性和非交易性儲存引擎都參與在來源上回滾的非 XA 交易中,則可能會發生在副本上保留提交順序的限制。通常,在來源上回滾的非 XA 交易不會複寫到副本,但在這種特殊情況下,交易可能會複寫到副本。如果確實發生這種情況,則沒有二進制日誌記錄的多執行緒副本不會處理交易回滾,因此在這種情況下,副本上的提交順序會與交易的中繼日誌順序不同。

  • replica_sql_verify_checksum

    命令列格式 --replica-sql-verify-checksum[={OFF|ON}]
    系統變數 replica_sql_verify_checksum
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 ON

    replica_sql_verify_checksum 會導致複寫 SQL(套用程式)執行緒使用從中繼日誌讀取的檢查總和來驗證資料。如果出現不符,副本會停止並顯示錯誤。設定此變數會立即對所有複寫通道生效,包括正在執行的通道。

    注意

    當從網路上接收事件時,如果可能,複寫 I/O(接收器)執行緒始終會讀取檢查總和。

  • replica_transaction_retries

    命令列格式 --replica-transaction-retries=#
    系統變數 replica_transaction_retries
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 10
    最小值 0
    最大值 18446744073709551615

    replica_transaction_retries 設定單執行緒或多執行緒副本上複寫 SQL 執行緒在停止前自動重試失敗交易的最大次數。設定此變數會立即對所有複寫通道生效,包括正在執行的通道。預設值為 10。將變數設定為 0 會停用交易的自動重試。

    如果複寫 SQL 執行緒因 InnoDB 死鎖或因為交易的執行時間超過 InnoDBinnodb_lock_wait_timeoutNDBTransactionDeadlockDetectionTimeoutTransactionInactiveTimeout 而無法執行交易,則它會自動重試 replica_transaction_retries 次,然後停止並顯示錯誤。不會重試具有非暫時性錯誤的交易。

    效能架構表 replication_applier_status 會在 COUNT_TRANSACTIONS_RETRIES 資料行中顯示每個複寫通道發生的重試次數。效能架構表 replication_applier_status_by_worker 會顯示有關單執行緒或多執行緒副本上各個套用程式執行緒的交易重試詳細資訊,並識別導致重試最後一次交易和目前正在進行的交易的錯誤。

  • replica_type_conversions

    命令列格式 --replica-type-conversions=set
    系統變數 replica_type_conversions
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 設定
    預設值
    有效值

    ALL_LOSSY

    ALL_NON_LOSSY

    ALL_SIGNED

    ALL_UNSIGNED

    replica_type_conversions 控制在使用基於列的複寫時,副本上生效的類型轉換模式。其值是來自清單的零個或多個元素以逗號分隔的集合:ALL_LOSSYALL_NON_LOSSYALL_SIGNEDALL_UNSIGNED。將此變數設定為空字串可禁止來源和副本之間的類型轉換。設定此變數會立即對所有複寫通道生效,包括正在執行的通道。

    有關適用於基於列的複寫中屬性升級和降級的類型轉換模式的其他資訊,請參閱 基於列的複寫:屬性升級和降級

  • replication_optimize_for_static_plugin_config

    命令列格式 --replication-optimize-for-static-plugin-config[={OFF|ON}]
    系統變數 replication_optimize_for_static_plugin_config
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    使用共用鎖定,並避免不必要的鎖定取得,以改善半同步複寫的效能。此設定和 replication_sender_observe_commit_only 隨著副本數量的增加而有所幫助,因為鎖定的競爭會降低效能。當啟用此系統變數時,無法解除安裝半同步複寫外掛程式,因此您必須先停用系統變數,然後才能完成解除安裝。

    可以在安裝半同步複寫外掛程式之前或之後啟用此系統變數,並且可以在複寫執行時啟用。半同步複寫來源伺服器也可以從啟用此系統變數中獲得效能優勢,因為它們使用與副本相同的鎖定機制。

    當伺服器上使用群組複寫時,可以啟用 replication_optimize_for_static_plugin_config。在這種情況下,當由於高工作負載而導致鎖定競爭時,它可能會提升效能。

  • replication_sender_observe_commit_only

    命令列格式 --replication-sender-observe-commit-only[={OFF|ON}]
    系統變數 replication_sender_observe_commit_only
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    限制回調以提升半同步複製的效能。這個設定和 replication_optimize_for_static_plugin_config 在副本數量增加時有所幫助,因為鎖的爭用可能會拖慢效能。

    可以在安裝半同步複寫外掛程式之前或之後啟用此系統變數,並且可以在複寫執行時啟用。半同步複寫來源伺服器也可以從啟用此系統變數中獲得效能優勢,因為它們使用與副本相同的鎖定機制。

  • report_host

    命令列格式 --report-host=主機名稱
    系統變數 report_host
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 字串

    在副本註冊期間要回報給來源的主機名稱或 IP 位址。這個值會出現在來源伺服器上 SHOW REPLICAS 的輸出中。如果您不希望副本向來源註冊,請將該值設定為未設定。

    注意

    來源伺服器僅從副本伺服器連線後的 TCP/IP socket 讀取 IP 位址是不夠的。由於 NAT 和其他路由問題,該 IP 可能對從來源或其他主機連線到副本無效。

  • report_password

    命令列格式 --report-password=名稱
    系統變數 report_password
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 字串

    在副本註冊期間要回報給來源的副本帳戶密碼。如果來源伺服器是以 --show-replica-auth-info 啟動的,則此值會出現在來源伺服器上 SHOW REPLICAS 的輸出中。

    儘管此變數的名稱可能暗示其他意思,report_password 並未與 MySQL 使用者權限系統相關聯,因此不一定(甚至不太可能)與 MySQL 複製使用者帳戶的密碼相同。

  • report_port

    命令列格式 --report-port=埠號
    系統變數 report_port
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 [slave_port]
    最小值 0
    最大值 65535

    用於連線到副本的 TCP/IP 埠號,在副本註冊期間要回報給來源。僅當副本監聽非預設埠,或您有從來源或其他用戶端到副本的特殊通道時才設定此選項。如果您不確定,請勿使用此選項。

    此選項的預設值是副本實際使用的埠號。這也是 SHOW REPLICAS 顯示的預設值。

  • report_user

    命令列格式 --report-user=名稱
    系統變數 report_user
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 字串

    在副本註冊期間要回報給來源的副本帳戶使用者名稱。如果來源伺服器是以 --show-replica-auth-info 啟動的,則此值會出現在來源伺服器上 SHOW REPLICAS 的輸出中。

    儘管此變數的名稱可能暗示其他意思,report_user 並未與 MySQL 使用者權限系統相關聯,因此不一定(甚至不太可能)與 MySQL 複製使用者帳戶的名稱相同。

  • rpl_read_size

    命令列格式 --rpl-read-size=#
    系統變數 rpl_read_size
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 8192
    最小值 8192
    最大值 4294959104
    單位 位元組
    區塊大小 8192

    rpl_read_size 系統變數控制從二進制日誌檔和中繼日誌檔讀取的最小資料量(以位元組為單位)。如果這些檔案的大量磁碟 I/O 活動阻礙了資料庫的效能,則在作業系統目前未快取檔案資料時,增加讀取大小可能會減少檔案讀取和 I/O 停頓。

    rpl_read_size 的最小值和預設值為 8192 位元組。該值必須是 4KB 的倍數。請注意,對於每個從二進制日誌和中繼日誌檔案讀取的執行緒,都會分配此值大小的緩衝區,包括來源上的轉儲執行緒和副本上的協調器執行緒。因此,設定較大的值可能會影響伺服器的記憶體消耗。

  • rpl_semi_sync_replica_enabled

    命令列格式 --rpl-semi-sync-replica-enabled[={OFF|ON}]
    系統變數 rpl_semi_sync_replica_enabled
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    rpl_semi_sync_replica_enabled 控制是否在副本伺服器上啟用半同步複製。若要啟用或停用外掛程式,請分別將此變數設定為 ONOFF(或 1 或 0)。預設值為 OFF

    只有在安裝了副本端的半同步複製外掛程式時,此變數才可用。

  • rpl_semi_sync_replica_trace_level

    命令列格式 --rpl-semi-sync-replica-trace-level=#
    系統變數 rpl_semi_sync_replica_trace_level
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 32
    最小值 0
    最大值 4294967295

    rpl_semi_sync_replica_trace_level 控制副本伺服器上的半同步複製偵錯追蹤層級。請參閱 rpl_semi_sync_master_trace_level 以了解允許的值。

    只有在安裝了副本端的半同步複製外掛程式時,此變數才可用。

  • rpl_semi_sync_slave_enabled

    命令列格式 --rpl-semi-sync-slave-enabled[={OFF|ON}]
    系統變數 rpl_semi_sync_slave_enabled
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    已棄用的 rpl_semi_sync_replica_enabled 同義詞。

  • rpl_semi_sync_slave_trace_level

    命令列格式 --rpl-semi-sync-slave-trace-level=#
    系統變數 rpl_semi_sync_slave_trace_level
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 32
    最小值 0
    最大值 4294967295

    已棄用的 rpl_semi_sync_replica_trace_level 同義詞。

  • rpl_stop_replica_timeout

    命令列格式 --rpl-stop-replica-timeout=#
    系統變數 rpl_stop_replica_timeout
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 31536000
    最小值 2
    最大值 31536000
    單位

    您可以透過設定此變數來控制 STOP REPLICA 在逾時之前等待的時間長度(以秒為單位)。這可用於避免 STOP REPLICA 與使用不同用戶端連線到副本的其他 SQL 陳述式之間的死鎖。

    rpl_stop_replica_timeout 的最大值和預設值為 31536000 秒(1 年)。最小值為 2 秒。對此變數的變更會對後續的 STOP REPLICA 陳述式生效。

    此變數僅影響發出 STOP REPLICA 陳述式的用戶端。當達到逾時時,發出請求的用戶端會傳回錯誤訊息,指出命令執行不完整。然後,用戶端會停止等待複製 I/O(接收器)和 SQL(應用程式)執行緒停止,但複製執行緒會繼續嘗試停止,並且 STOP REPLICA 陳述式仍保持有效。一旦複製執行緒不再忙碌,就會執行 STOP REPLICA 陳述式,且副本停止。

  • rpl_stop_slave_timeout

    命令列格式 --rpl-stop-slave-timeout=#
    已棄用
    系統變數 rpl_stop_slave_timeout
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 31536000
    最小值 2
    最大值 31536000
    單位

    已棄用的 rpl_stop_replica_timeout 同義詞。

  • skip_replica_start

    命令列格式 --skip-replica-start[={OFF|ON}]
    系統變數 skip_replica_start
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    skip_replica_start 告訴副本伺服器在伺服器啟動時不要啟動複製 I/O(接收器)和 SQL(應用程式)執行緒。若要稍後啟動執行緒,請使用 START REPLICA 陳述式。

    此系統變數是唯讀的,可以使用 PERSIST_ONLY 關鍵字或 SET 陳述式的 @@persist_only 限定詞來設定。 --skip-replica-start 命令列選項也會設定此系統變數。您可以使用系統變數來取代命令列選項,以便允許使用 MySQL 伺服器的權限結構來存取此功能,這樣資料庫管理員就不需要任何作業系統的特殊存取權。

  • skip_slave_start

    命令列格式 --skip-slave-start[={OFF|ON}]
    已棄用
    系統變數 skip_slave_start
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    已棄用的 --skip-replica-start 同義詞。

  • slave_checkpoint_group

    命令列格式 --slave-checkpoint-group=#
    已棄用
    系統變數 slave_checkpoint_group
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 512
    最小值 32
    最大值 524280
    區塊大小 8

    已棄用的 replica_checkpoint_group 同義詞。

  • slave_checkpoint_period

    命令列格式 --slave-checkpoint-period=#
    已棄用
    系統變數 slave_checkpoint_period
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 300
    最小值 1
    最大值 4294967295
    單位 毫秒

    已棄用的 replica_checkpoint_period 同義詞。

  • slave_compressed_protocol

    命令列格式 --slave-compressed-protocol[={OFF|ON}]
    已棄用
    系統變數 slave_compressed_protocol
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 OFF

    已棄用的 replica_compressed_protocol 別名。

  • slave_exec_mode

    命令列格式 --slave-exec-mode=模式
    系統變數 slave_exec_mode
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 列舉
    預設值

    IDEMPOTENT (NDB)

    STRICT (其他)

    有效值

    STRICT

    IDEMPOTENT

    已棄用的 replica_exec_mode 別名。

  • slave_load_tmpdir

    命令列格式 --slave-load-tmpdir=目錄名稱
    已棄用
    系統變數 slave_load_tmpdir
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 目錄名稱
    預設值 --tmpdir 的值

    已棄用的 replica_load_tmpdir 別名。

  • slave_max_allowed_packet

    命令列格式 --slave-max-allowed-packet=#
    已棄用
    系統變數 slave_max_allowed_packet
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 1073741824
    最小值 1024
    最大值 1073741824
    單位 位元組
    區塊大小 1024

    已棄用的 replica_max_allowed_packet 別名。

  • slave_net_timeout

    命令列格式 --slave-net-timeout=#
    已棄用
    系統變數 slave_net_timeout
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 60
    最小值 1
    最大值 31536000
    單位

    已棄用的 replica_net_timeout 別名。

  • slave_parallel_type

    命令列格式 --slave-parallel-type=值
    已棄用
    系統變數 slave_parallel_type
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 列舉
    預設值 LOGICAL_CLOCK
    有效值

    DATABASE

    LOGICAL_CLOCK

    已棄用的 replica_parallel_type 別名。

  • slave_parallel_workers

    命令列格式 --slave-parallel-workers=#
    已棄用
    系統變數 slave_parallel_workers
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 4
    最小值 0
    最大值 1024

    已棄用的 replica_parallel_workers 別名。

  • slave_pending_jobs_size_max

    命令列格式 --slave-pending-jobs-size-max=#
    已棄用
    系統變數 slave_pending_jobs_size_max
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 128M
    最小值 1024
    最大值 16EiB
    單位 位元組
    區塊大小 1024

    已棄用的 replica_pending_jobs_size_max 別名。

  • slave_preserve_commit_order

    命令列格式 --slave-preserve-commit-order[={OFF|ON}]
    已棄用
    系統變數 slave_preserve_commit_order
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 ON

    已棄用的 replica_preserve_commit_order 別名。

  • slave_skip_errors

    命令列格式 --slave-skip-errors=name
    已棄用
    系統變數 slave_skip_errors
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 字串
    預設值 OFF
    有效值

    OFF

    [錯誤代碼清單]

    all

    ddl_exist_errors

    已棄用的 replica_skip_errors 別名。

  • replica_skip_errors

    命令列格式 --replica-skip-errors=name
    系統變數 replica_skip_errors
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 字串
    預設值 OFF
    有效值

    OFF

    [錯誤代碼清單]

    all

    ddl_exist_errors

    通常,當副本上發生錯誤時,複製會停止,這讓您有機會手動解決資料中的不一致問題。此變數會讓複製 SQL 執行緒在語句傳回變數值中列出的任何錯誤時繼續複製。

  • slave_sql_verify_checksum

    命令列格式 --slave-sql-verify-checksum[={OFF|ON}]
    已棄用
    系統變數 slave_sql_verify_checksum
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 布林值
    預設值 ON

    已棄用的 replica_sql_verify_checksum 別名。

  • slave_transaction_retries

    命令列格式 --slave-transaction-retries=#
    已棄用
    系統變數 slave_transaction_retries
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 10
    最小值 0
    最大值 (64 位元平台) 18446744073709551615
    最大值 (32 位元平台) 4294967295

    已棄用的 replica_transaction_retries 別名。

  • slave_type_conversions

    命令列格式 --slave-type-conversions=set
    已棄用
    系統變數 slave_type_conversions
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 設定
    預設值
    有效值

    ALL_LOSSY

    ALL_NON_LOSSY

    ALL_SIGNED

    ALL_UNSIGNED

    已棄用的 replica_type_conversions 別名。

  • sql_replica_skip_counter

    系統變數 sql_replica_skip_counter
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 0
    最小值 0
    最大值 4294967295

    sql_replica_skip_counter 指定副本應略過來源的事件數。設定此選項不會立即生效。此變數適用於下一個 START REPLICA 語句;下一個 START REPLICA 語句也會將值變更回 0。當此變數設定為非零值且已設定多個複製通道時,START REPLICA 語句只能與 FOR CHANNEL channel 子句一起使用。

    此選項與基於 GTID 的複製不相容,且當設定 gtid_mode=ON 時,不得設定為非零值。如果您在使用 GTID 時需要略過交易,請改用來源中的 gtid_executed。如果您已使用 CHANGE REPLICATION SOURCE TO 語句的 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 選項,在複製通道上啟用 GTID 指派,則 sql_replica_skip_counter 可用。請參閱第 19.1.7.3 節「略過交易」

    重要事項

    如果略過設定此變數所指定的事件數會導致副本從事件群組的中間開始,則副本會繼續略過,直到找到下一個事件群組的開頭,並從該點開始。如需更多資訊,請參閱第 19.1.7.3 節「略過交易」

  • sql_slave_skip_counter

    已棄用
    系統變數 sql_slave_skip_counter
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 0
    最小值 0
    最大值 4294967295

    已棄用的 sql_replica_skip_counter 別名。

  • sync_master_info

    命令列格式 --sync-master-info=#
    已棄用
    系統變數 sync_master_info
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 10000
    最小值 0
    最大值 4294967295

    已棄用的 sync_source_info 別名。

  • sync_relay_log

    命令列格式 --sync-relay-log=#
    系統變數 sync_relay_log
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 10000
    最小值 0
    最大值 4294967295

    如果此變數的值大於 0,MySQL 伺服器會在每個 sync_relay_log 事件寫入中繼日誌後,將其中繼日誌同步至磁碟 (使用 fdatasync())。設定此變數會立即對所有複製通道生效,包括正在執行的通道。

    sync_relay_log 設定為 0 會導致不執行同步至磁碟;在這種情況下,伺服器會依賴作業系統不時地清除中繼日誌的內容,就像任何其他檔案一樣。

    值 1 是最安全的選擇,因為在發生意外停止的情況下,您最多會遺失中繼日誌中的一個事件。但是,它也是最慢的選擇 (除非磁碟具有電池備份快取,這會使同步非常快)。如需關於副本上最能抵禦意外停止的設定組合資訊,請參閱第 19.4.2 節「處理副本的意外停止」

  • sync_relay_log_info

    命令列格式 --sync-relay-log-info=#
    已棄用
    系統變數 sync_relay_log_info
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 10000
    最小值 0
    最大值 4294967295

    副本更新套用程式中繼資料存放區的交易數。當套用程式中繼資料存放區儲存為 InnoDB 資料表時 (預設值),它會在每次交易後更新,並忽略此系統變數。如果套用程式中繼資料存放區儲存為檔案 (已棄用),則副本會在這麼多交易後,將其 relay-log.info 檔案同步至磁碟 (使用 fdatasync())。0 (零) 表示檔案內容僅由作業系統清除。設定此變數會立即對所有複製通道生效,包括正在執行的通道。

    由於將套用程式中繼資料儲存為檔案已棄用,因此此變數也已棄用,且伺服器會在您設定或讀取其值時發出警告。您應該預期 sync_relay_log_info 會在未來版本的 MySQL 中移除,並立即移轉可能依賴它的應用程式。

  • sync_source_info

    命令列格式 --sync-source-info=#
    系統變數 sync_source_info
    範圍 全域
    動態
    SET_VAR 提示是否適用
    類型 整數
    預設值 10000
    最小值 0
    最大值 4294967295

    sync_source_info 指定副本更新連線中繼資料存放區後的事件數。當連線中繼資料存放區儲存為 InnoDB 資料表時 (預設值),它會在此事件數後更新。如果連線中繼資料存放區儲存為檔案 (已棄用),則副本會在這麼多事件後,將其 master.info 檔案同步至磁碟 (使用 fdatasync())。預設值為 10000,而零值表示存放區永遠不會更新。設定此變數會立即對所有複製通道生效,包括正在執行的通道。

  • terminology_use_previous

    命令列格式 --terminology-use-previous=#
    系統變數 terminology_use_previous
    範圍 全域、工作階段
    動態
    SET_VAR 提示是否適用
    類型 列舉
    預設值 NONE
    有效值

    NONE

    BEFORE_8_0_26

    BEFORE_8_2_0

    MySQL 8.0 中,對包含術語 masterslavemts (用於 多執行緒從屬裝置) 的儀器名稱進行了不相容的變更,這些術語分別變更為 sourcereplicamta (用於 多執行緒套用程式)。如果這些不相容的變更影響您的應用程式,請將 terminology_use_previous 設定為 BEFORE_8_0_26,以讓 MySQL 伺服器針對先前清單中指定的物件使用舊版本的名稱。這讓依賴舊名稱的監視工具可以繼續運作,直到它們可以更新為使用新名稱為止。

    MySQL 8.4 通常會在 SHOW CREATE EVENTSHOW EVENTS 的輸出中,以及對 Information Schema EVENTS 資料表的查詢中顯示 REPLICA_SIDE_DISABLED,而不是 SLAVESIDE_DISABLED。您可以將 terminology_use_previous 設定為 BEFORE_8_0_26BEFORE_8_2_0,以讓改為顯示 SLAVESIDE_DISABLED

    使用工作階段範圍設定 terminology_use_previous 系統變數以支援個別使用者,或使用全域範圍,使其成為所有新工作階段的預設值。使用全域範圍時,慢查詢日誌會包含舊版本的名稱。

    受影響的儀器名稱在以下清單中提供。terminology_use_previous 系統變數僅影響這些項目。它不會影響 MySQL 8.0 中也引入的系統變數、狀態變數和命令列選項的新別名,而且當啟用時仍可使用這些別名。

    • 儀器鎖定 (互斥鎖定),在 mutex_instancesevents_waits_* Performance Schema 資料表中可見,前置詞為 wait/synch/mutex/

    • 讀/寫鎖定,在 rwlock_instancesevents_waits_* Performance Schema 資料表中可見,前置詞為 wait/synch/rwlock/

    • 儀器條件變數,在 cond_instancesevents_waits_* Performance Schema 資料表中可見,前置詞為 wait/synch/cond/

    • 儀器記憶體配置,在 memory_summary_* Performance Schema 資料表中可見,前置詞為 memory/sql/

    • 執行緒名稱,在 threads Performance Schema 資料表中可見,前置詞為 thread/sql/

    • 執行緒階段,在 events_stages_* Performance Schema 資料表中可見,前置詞為 stage/sql/,且在 threadsprocesslist Performance Schema 資料表中沒有前置詞,以及 SHOW PROCESSLIST 語句的輸出、Information Schema processlist 資料表和慢查詢日誌

    • 執行緒命令,在 events_statements_history*events_statements_summary_*_by_event_name Performance Schema 資料表中可見,前置詞為 statement/com/,且在 threadsprocesslist Performance Schema 資料表中沒有前置詞,以及 SHOW PROCESSLIST 語句的輸出、Information Schema processlist 資料表和 SHOW REPLICA STATUS 語句的輸出