本節說明您可以在複寫來源伺服器上使用的伺服器選項和系統變數。您可以在命令列或選項檔案中指定選項。您可以使用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
,它會在來源伺服器上執行SHOW REPLICAS
時,顯示使用--report-user
和--report-password
選項啟動之複本的複製使用者名稱和密碼。 -
命令列格式 --show-slave-auth-info[={OFF|ON}]
已棄用 是 類型 布林值 預設值 OFF
已棄用的
--show-replica-auth-info
別名。
下列系統變數用於或由複製來源伺服器使用
-
命令列格式 --auto-increment-increment=#
系統變數 auto_increment_increment
範圍 全域、連線階段 動態 是 SET_VAR
提示套用是 類型 整數 預設值 1
最小值 1
最大值 65535
auto_increment_increment
和auto_increment_offset
旨在用於循環(來源對來源)複製,並且可用於控制AUTO_INCREMENT
資料行的運作。兩個變數都具有全域和連線階段值,每個變數都可以假設介於 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 9.1.0 伺服器執行個體的
90000
)。如果此直接伺服器位於不支援連線階段系統變數的版本,則變數的值會設定為 0 (UNKNOWN_SERVER_VERSION
)。變數的值會從來源複製到複本。透過此資訊,複本可以正確處理來自較舊版本的來源的資料,方法是識別所涉及版本之間語法變更或語意變更發生的位置,並適當地處理這些變更。此資訊也可以用於群組複製環境,其中複製群組的一個或多個成員的版本比其他成員更新。變數的值可以在每個交易的二進位記錄中檢視(作為
Gtid_log_event
的一部分,如果伺服器上未使用 GTID,則為Anonymous_gtid_log_event
),並且有助於偵錯跨版本複製問題。設定此系統變數的連線階段值是受限制的操作。連線階段使用者必須具有
REPLICATION_APPLIER
權限(請參閱 第 19.3.3 節「複製權限檢查」),或具有足夠的權限可設定受限制的連線階段變數(請參閱 第 7.1.9.1 節「系統變數權限」)。但是,請注意,該變數並非供使用者設定;它是由複製基礎架構自動設定。 -
系統變數 original_server_version
範圍 連線階段 動態 是 SET_VAR
提示套用否 類型 整數 預設值 999999
最小值 0
最大值 999999
供複製內部使用。此連線階段系統變數會保存最初提交交易之伺服器的 MySQL 伺服器版本號碼(例如,MySQL 9.0.0 伺服器執行個體的
90000
)。如果此原始伺服器位於不支援連線階段系統變數的版本,則變數的值會設定為 0 (UNKNOWN_SERVER_VERSION
)。請注意,當原始伺服器設定版本號碼時,如果複製拓撲中的直接伺服器或任何其他介入伺服器不支援連線階段系統變數,因此不複製其值,則變數的值會重設為 0。變數的值會以與
immediate_server_version
系統變數相同的方式設定和使用。如果變數的值與immediate_server_version
系統變數的值相同,則只會在二進位記錄中記錄後者,並顯示原始伺服器版本相同。在 Group Replication 環境中,檢視變更日誌事件 (view change log event) 是由每個群組成員在有新成員加入群組時所佇列的特殊交易。這些事件會被標記為佇列該交易的群組成員的伺服器版本。這確保了加入的成員知道原始捐贈者的伺服器版本。由於為特定檢視變更而佇列的檢視變更日誌事件在所有成員上都具有相同的 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
最大值 65535
rpl_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_SYNC
AFTER_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_SYNC
AFTER_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
,只有在伺服器認可到儲存引擎並收到副本確認之後,發出交易的用戶端才會取得傳回狀態。在認可之後和副本確認之前,其他用戶端可以在認可的用戶端之前看到認可的交易。如果發生錯誤導致複本無法處理交易,那麼在發生來源伺服器意外退出並故障轉移至複本的情況下,這些用戶端可能會看到相較於在來源伺服器上看到的資料遺失。