本節說明您可以在複製來源伺服器上使用的伺服器選項和系統變數。您可以在命令列或選項檔案中指定這些選項。您可以使用 SET 指定系統變數值。
在來源和每個複本上,您必須設定 server_id 系統變數以建立唯一的複製 ID。對於每個伺服器,您應該選擇一個從 1 到 232 − 1 範圍內的唯一正整數,而且每個 ID 都必須與複製拓撲中任何其他來源或複本使用的任何其他 ID 不同。範例:server-id=3。
如需在來源上用於控制二進位日誌記錄的選項,請參閱第 19.1.6.4 節,「二進位日誌選項和變數」。
以下列表描述了用於控制複製來源伺服器的啟動選項。與複製相關的系統變數將在本節稍後討論。
-
命令列格式 --show-replica-auth-info[={OFF|ON}]類型 布林值 預設值 OFF使用
--show-replica-auth-info,此選項會在來源上顯示使用--report-user和--report-password選項啟動的複本的複製使用者名稱和密碼,這些資訊會顯示在SHOW REPLICAS的輸出中。 -
命令列格式 --show-slave-auth-info[={OFF|ON}]已棄用 是 類型 布林值 預設值 OFF已棄用的別名,與
--show-replica-auth-info相同。
以下系統變數用於或由複製來源伺服器使用
-
命令列格式 --auto-increment-increment=#系統變數 auto_increment_increment範圍 全域、連線 動態 是 SET_VAR提示適用是 類型 整數 預設值 1最小值 1最大值 65535auto_increment_increment和auto_increment_offset旨在用於循環(來源到來源)複製,可用於控制AUTO_INCREMENT資料行的操作。這兩個變數都有全域和連線值,並且每個變數都可以採用介於 1 到 65,535 之間的整數值(包括 1 和 65,535)。將這兩個變數中的任何一個的值設定為 0 會使其值改為設定為 1。嘗試將這兩個變數中的任何一個的值設定為大於 65,535 或小於 0 的整數會使其值改為設定為 65,535。嘗試將auto_increment_increment或auto_increment_offset的值設定為非整數值會產生錯誤,並且變數的實際值保持不變。注意auto_increment_increment也支援與NDB資料表一起使用。當在伺服器上啟動群組複製時,
auto_increment_increment的值會變更為group_replication_auto_increment_increment的值,其預設值為 7,而auto_increment_offset的值會變更為伺服器 ID。當停止群組複製時,這些變更會還原。只有當auto_increment_increment和auto_increment_offset各自的預設值為 1 時,才會進行和還原這些變更。如果它們的值已從預設值修改過,則群組複製不會變更它們。當群組複製處於單一主要模式時(其中只有一個伺服器寫入),也不會修改這些系統變數。auto_increment_increment和auto_increment_offset會如下影響AUTO_INCREMENT資料行的行為auto_increment_increment控制連續資料行值之間的間隔。例如mysql> SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | +--------------------------+-------+ 2 rows in set (0.00 sec) mysql> CREATE TABLE autoinc1 -> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY); Query OK, 0 rows affected (0.04 sec) mysql> SET @@auto_increment_increment=10; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 10 | | auto_increment_offset | 1 | +--------------------------+-------+ 2 rows in set (0.01 sec) mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT col FROM autoinc1; +-----+ | col | +-----+ | 1 | | 11 | | 21 | | 31 | +-----+ 4 rows in set (0.00 sec)auto_increment_offset決定AUTO_INCREMENT資料行值的起始點。請考慮以下情況,假設這些陳述式是在與auto_increment_increment的描述中所給出的範例相同的連線期間執行mysql> SET @@auto_increment_offset=5; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 10 | | auto_increment_offset | 5 | +--------------------------+-------+ 2 rows in set (0.00 sec) mysql> CREATE TABLE autoinc2 -> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY); Query OK, 0 rows affected (0.06 sec) mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT col FROM autoinc2; +-----+ | col | +-----+ | 5 | | 15 | | 25 | | 35 | +-----+ 4 rows in set (0.02 sec)當
auto_increment_offset的值大於auto_increment_increment的值時,auto_increment_offset的值會被忽略。
如果這兩個變數中的任何一個發生變更,然後將新的資料列插入包含
AUTO_INCREMENT資料表的資料表中,結果可能會看似違反直覺,因為AUTO_INCREMENT值的序列是在不考慮資料行中已有的任何值的情況下計算的,並且插入的下一個值是該序列中大於AUTO_INCREMENT資料行中最大現有值的最小值。此序列的計算方式如下auto_increment_offset+N×auto_increment_increment其中
N是序列 [1, 2, 3, ...] 中的正整數值。例如mysql> SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 10 | | auto_increment_offset | 5 | +--------------------------+-------+ 2 rows in set (0.00 sec) mysql> SELECT col FROM autoinc1; +-----+ | col | +-----+ | 1 | | 11 | | 21 | | 31 | +-----+ 4 rows in set (0.00 sec) mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT col FROM autoinc1; +-----+ | col | +-----+ | 1 | | 11 | | 21 | | 31 | | 35 | | 45 | | 55 | | 65 | +-----+ 8 rows in set (0.00 sec)為
auto_increment_increment和auto_increment_offset顯示的值會產生序列 5 +N× 10,也就是 [5, 15, 25, 35, 45, ...]。在INSERT之前col資料行中存在的最大值是 31,而AUTO_INCREMENT序列中的下一個可用值是 35,因此col的插入值從該點開始,而SELECT查詢的結果如所示。無法將這兩個變數的效果限制在單一資料表;這些變數會控制 MySQL 伺服器上所有資料表中所有
AUTO_INCREMENT資料行的行為。如果設定了任何一個變數的全域值,則其效果會持續存在,直到全域值變更或被設定連線值覆寫,或直到重新啟動 mysqld。如果設定了本機值,則新值會影響目前使用者在連線期間插入新資料列的所有資料表的AUTO_INCREMENT資料行,除非在該連線期間變更這些值。auto_increment_increment的預設值為 1。請參閱 第 19.5.1.1 節:「複製和 AUTO_INCREMENT」。 -
命令列格式 --auto-increment-offset=#系統變數 auto_increment_offset範圍 全域、連線 動態 是 SET_VAR提示適用是 類型 整數 預設值 1最小值 1最大值 65535此變數的預設值為 1。如果保留其預設值,並且在多重主要模式下於伺服器上啟動群組複製,則其會變更為伺服器 ID。如需詳細資訊,請參閱
auto_increment_increment的描述。注意auto_increment_offset也支援與NDB資料表一起使用。 -
系統變數 immediate_server_version範圍 連線 動態 是 SET_VAR提示適用否 類型 整數 預設值 999999最小值 0最大值 999999供複製內部使用。此連線系統變數會保留複製拓撲中直接來源伺服器的 MySQL 伺服器版本號碼(例如,MySQL 8.4.0 伺服器執行個體的
80400)。如果此直接伺服器位於不支援連線系統變數的版本,則變數的值會設定為 0 (UNKNOWN_SERVER_VERSION)。變數的值會從來源複製到複本。有了這些資訊,複本可以正確處理來自較舊版本來源的資料,方法是識別所涉及版本之間發生的語法變更或語義變更,並適當地處理這些變更。此資訊也可用於群組複製環境中,其中複製群組的一個或多個成員的版本比其他成員新。可以在每個交易的二進位記錄中檢視變數的值(作為
Gtid_log_event或Anonymous_gtid_log_event的一部分,如果伺服器上未使用 GTID),並且可能在偵錯跨版本複製問題時有所幫助。設定此系統變數的連線值是受限制的操作。連線使用者必須具有
REPLICATION_APPLIER權限(請參閱第 19.3.3 節:「複製權限檢查」),或具有足夠的權限來設定受限制的連線變數(請參閱 第 7.1.9.1 節:「系統變數權限」)。但是,請注意,此變數不適合使用者設定;它是由複製基礎結構自動設定的。 -
系統變數 original_server_version範圍 連線 動態 是 SET_VAR提示適用否 類型 整數 預設值 999999最小值 0最大值 999999供複製內部使用。此連線系統變數會保留最初提交交易的伺服器的 MySQL 伺服器版本號碼(例如,MySQL 8.4.0 伺服器執行個體的
80400)。如果此原始伺服器位於不支援連線系統變數的版本,則變數的值會設定為 0 (UNKNOWN_SERVER_VERSION)。請注意,當原始伺服器設定版本號碼時,如果直接伺服器或複製拓撲中任何其他介入伺服器不支援連線系統變數,因此不會複製其值,則變數的值會重設為 0。此變數的值設定和使用方式與
immediate_server_version系統變數相同。如果此變數的值與immediate_server_version系統變數的值相同,則只會在二進制日誌中記錄後者,並標示原始伺服器版本相同。在群組複製環境中,當新成員加入群組時,每個群組成員會將檢視變更日誌事件(特殊交易)排入佇列,這些事件會標記排入交易佇列的群組成員的伺服器版本。這可確保加入的成員知道原始捐贈者的伺服器版本。由於針對特定檢視變更而排入佇列的檢視變更日誌事件在所有成員上都有相同的 GTID,因此僅在此情況下,相同 GTID 的實例可能具有不同的原始伺服器版本。
設定此系統變數的連線值是受限制的操作。連線使用者必須具有
REPLICATION_APPLIER權限(請參閱第 19.3.3 節:「複製權限檢查」),或具有足夠的權限來設定受限制的連線變數(請參閱 第 7.1.9.1 節:「系統變數權限」)。但是,請注意,此變數不適合使用者設定;它是由複製基礎結構自動設定的。 -
命令列格式 --rpl-semi-sync-master-enabled[={OFF|ON}]系統變數 rpl_semi_sync_master_enabled範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 OFF已棄用的
rpl_semi_sync_source_enabled同義詞。 -
命令列格式 --rpl-semi-sync-master-timeout=#系統變數 rpl_semi_sync_master_timeout範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 10000最小值 0最大值 4294967295單位 毫秒 已棄用的
rpl_semi_sync_source_timeout同義詞。 rpl_semi_sync_master_trace_level命令列格式 --rpl-semi-sync-master-trace-level=#系統變數 rpl_semi_sync_master_trace_level範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 32最小值 0最大值 4294967295已棄用的
rpl_semi_sync_source_trace_level同義詞。rpl_semi_sync_master_wait_for_slave_count命令列格式 --rpl-semi-sync-master-wait-for-slave-count=#系統變數 rpl_semi_sync_master_wait_for_slave_count範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 1最小值 1最大值 65535rpl_semi_sync_master_wait_no_slave命令列格式 --rpl-semi-sync-master-wait-no-slave[={OFF|ON}]系統變數 rpl_semi_sync_master_wait_no_slave範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 開啟已棄用的
rpl_semi_sync_source_wait_no_replica同義詞。rpl_semi_sync_master_wait_point命令列格式 --rpl-semi-sync-master-wait-point=value系統變數 rpl_semi_sync_master_wait_point範圍 全域 動態 是 SET_VAR提示適用否 類型 列舉 預設值 AFTER_SYNC有效值 AFTER_SYNCAFTER_COMMIT已棄用的
rpl_semi_sync_source_wait_point同義詞。-
命令列格式 --rpl-semi-sync-source-enabled[={OFF|ON}]系統變數 rpl_semi_sync_source_enabled範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 OFF當在副本上安裝
rpl_semi_sync_source(semisync_source.so程式庫) 外掛程式以設定半同步複製時,rpl_semi_sync_source_enabled可用。rpl_semi_sync_source_enabled控制是否在來源伺服器上啟用半同步複製。若要啟用或停用外掛程式,請將此變數分別設定為ON或OFF(或 1 或 0)。預設值為OFF。 -
命令列格式 --rpl-semi-sync-source-timeout=#系統變數 rpl_semi_sync_source_timeout範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 10000最小值 0最大值 4294967295單位 毫秒 當在副本上安裝
rpl_semi_sync_source(semisync_source.so程式庫) 外掛程式時,rpl_semi_sync_source_timeout可用。rpl_semi_sync_source_timeout控制來源在逾時並恢復為非同步複製之前,在認可時等待副本確認的時間長度。此值以毫秒為單位指定,預設值為 10000 (10 秒)。 rpl_semi_sync_source_trace_level命令列格式 --rpl-semi-sync-source-trace-level=#系統變數 rpl_semi_sync_source_trace_level範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 32最小值 0最大值 4294967295當在副本上安裝
rpl_semi_sync_source(semisync_source.so程式庫) 外掛程式時,rpl_semi_sync_source_trace_level可用。rpl_semi_sync_source_trace_level指定來源伺服器上的半同步複製偵錯追蹤層級。定義了四個層級1 = 一般層級 (例如,時間函式失敗)
16 = 詳細層級 (更詳細的資訊)
32 = 網路等待層級 (有關網路等待的詳細資訊)
64 = 函式層級 (有關函式進入和退出的資訊)
rpl_semi_sync_source_wait_for_replica_count命令列格式 --rpl-semi-sync-source-wait-for-replica-count=#系統變數 rpl_semi_sync_source_wait_for_replica_count範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 1最小值 1最大值 65535當在副本上安裝
rpl_semi_sync_source(semisync_source.so程式庫) 外掛程式以設定半同步複製時,rpl_semi_sync_source_wait_for_replica_count可用。rpl_semi_sync_source_wait_for_replica_count指定來源在繼續之前必須接收的每個交易的副本確認數。預設情況下,rpl_semi_sync_source_wait_for_replica_count為1,這表示半同步複製會在收到單一副本確認後繼續。對於此變數的較小值,效能最佳。例如,如果
rpl_semi_sync_source_wait_for_replica_count為2,則在半同步複製繼續進行之前,2 個副本必須確認收到交易,時間不得超過rpl_semi_sync_source_timeout所設定的逾時期間。如果在逾時期間內確認收到交易的副本較少,則來源會恢復為正常複製。注意此行為也取決於
rpl_semi_sync_source_wait_no_replica。rpl_semi_sync_source_wait_no_replica命令列格式 --rpl-semi-sync-source-wait-no-replica[={OFF|ON}]系統變數 rpl_semi_sync_source_wait_no_replica範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 開啟當在副本上安裝
rpl_semi_sync_source(semisync_source.so程式庫) 外掛程式時,rpl_semi_sync_source_wait_no_replica可用。rpl_semi_sync_source_wait_no_replica控制來源是否等待由rpl_semi_sync_source_timeout設定的逾時期間到期,即使在逾時期間,副本計數降至低於rpl_semi_sync_source_wait_for_replica_count設定的副本數。當
rpl_semi_sync_source_wait_no_replica的值為ON(預設值) 時,允許在逾時期間內將副本計數降至低於rpl_semi_sync_source_wait_for_replica_count。只要有足夠的副本在逾時期間到期之前確認交易,半同步複製就會繼續。當
rpl_semi_sync_source_wait_no_replica的值為OFF時,如果在rpl_semi_sync_source_timeout設定的逾時期間內,副本計數在任何時間降至低於rpl_semi_sync_source_wait_for_replica_count中設定的數字,則來源會恢復為正常複製。rpl_semi_sync_source_wait_point命令列格式 --rpl-semi-sync-source-wait-point=value系統變數 rpl_semi_sync_source_wait_point範圍 全域 動態 是 SET_VAR提示適用否 類型 列舉 預設值 AFTER_SYNC有效值 AFTER_SYNCAFTER_COMMIT當在副本上安裝
rpl_semi_sync_source(semisync_source.so程式庫) 外掛程式時,rpl_semi_sync_source_wait_point可用。rpl_semi_sync_source_wait_point控制半同步複製來源伺服器等待副本確認收到交易的時間點,然後再將狀態傳回給認可交易的用戶端。允許的值為AFTER_SYNC(預設值):來源將每個交易寫入其二進制日誌和副本,並將二進制日誌同步到磁碟。來源會在同步後等待副本確認收到交易。收到確認後,來源會將交易認可到儲存引擎,並將結果傳回給用戶端,然後用戶端才能繼續。AFTER_COMMIT:來源將每個交易寫入其二進制日誌和副本,同步二進制日誌,並將交易認可到儲存引擎。來源會在認可後等待副本確認收到交易。收到確認後,來源會將結果傳回給用戶端,然後用戶端才能繼續。
這些設定的複製特性有所不同,如下所示
使用
AFTER_SYNC,所有客戶端會在同一時間看到已提交的交易:在副本確認且交易已提交至來源端的儲存引擎之後。因此,所有客戶端在來源端都會看到相同的資料。在來源端發生故障時,所有在來源端提交的交易都已複製到副本(已儲存至其中繼日誌)。來源伺服器意外終止並故障轉移至副本是無損的,因為副本是最新的。但是請注意,在這種情況下,無法重新啟動來源端,必須將其捨棄,因為其二進位日誌可能包含未提交的交易,在二進位日誌恢復後外部化時,會與副本產生衝突。
使用
AFTER_COMMIT,發出交易的客戶端只會在伺服器提交至儲存引擎並收到副本確認後才會收到返回狀態。在提交之後和收到副本確認之前,其他客戶端可以在提交客戶端之前看到已提交的交易。如果發生錯誤導致副本未處理該交易,那麼在來源伺服器意外終止並故障轉移至副本時,這些客戶端可能會看到相對於他們在來源端所看到資料的資料遺失。