文件首頁
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.2 複製來源選項和變數

本節說明您可以在複製來源伺服器上使用的伺服器選項和系統變數。您可以在命令列選項檔案中指定這些選項。您可以使用 SET 指定系統變數值。

在來源和每個複本上,您必須設定 server_id 系統變數以建立唯一的複製 ID。對於每個伺服器,您應該選擇一個從 1 到 232 − 1 範圍內的唯一正整數,而且每個 ID 都必須與複製拓撲中任何其他來源或複本使用的任何其他 ID 不同。範例:server-id=3

如需在來源上用於控制二進位日誌記錄的選項,請參閱第 19.1.6.4 節,「二進位日誌選項和變數」

複製來源伺服器的啟動選項

以下列表描述了用於控制複製來源伺服器的啟動選項。與複製相關的系統變數將在本節稍後討論。

用於複製來源伺服器的系統變數

以下系統變數用於或由複製來源伺服器使用

  • auto_increment_increment

    命令列格式 --auto-increment-increment=#
    系統變數 auto_increment_increment
    範圍 全域、連線
    動態
    SET_VAR 提示適用
    類型 整數
    預設值 1
    最小值 1
    最大值 65535

    auto_increment_incrementauto_increment_offset 旨在用於循環(來源到來源)複製,可用於控制 AUTO_INCREMENT 資料行的操作。這兩個變數都有全域和連線值,並且每個變數都可以採用介於 1 到 65,535 之間的整數值(包括 1 和 65,535)。將這兩個變數中的任何一個的值設定為 0 會使其值改為設定為 1。嘗試將這兩個變數中的任何一個的值設定為大於 65,535 或小於 0 的整數會使其值改為設定為 65,535。嘗試將 auto_increment_incrementauto_increment_offset 的值設定為非整數值會產生錯誤,並且變數的實際值保持不變。

    注意

    auto_increment_increment 也支援與 NDB 資料表一起使用。

    當在伺服器上啟動群組複製時,auto_increment_increment 的值會變更為 group_replication_auto_increment_increment 的值,其預設值為 7,而 auto_increment_offset 的值會變更為伺服器 ID。當停止群組複製時,這些變更會還原。只有當 auto_increment_incrementauto_increment_offset 各自的預設值為 1 時,才會進行和還原這些變更。如果它們的值已從預設值修改過,則群組複製不會變更它們。當群組複製處於單一主要模式時(其中只有一個伺服器寫入),也不會修改這些系統變數。

    auto_increment_incrementauto_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_incrementauto_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=#
    系統變數 auto_increment_offset
    範圍 全域、連線
    動態
    SET_VAR 提示適用
    類型 整數
    預設值 1
    最小值 1
    最大值 65535

    此變數的預設值為 1。如果保留其預設值,並且在多重主要模式下於伺服器上啟動群組複製,則其會變更為伺服器 ID。如需詳細資訊,請參閱 auto_increment_increment 的描述。

    注意

    auto_increment_offset 也支援與 NDB 資料表一起使用。

  • immediate_server_version

    系統變數 immediate_server_version
    範圍 連線
    動態
    SET_VAR 提示適用
    類型 整數
    預設值 999999
    最小值 0
    最大值 999999

    供複製內部使用。此連線系統變數會保留複製拓撲中直接來源伺服器的 MySQL 伺服器版本號碼(例如,MySQL 8.4.0 伺服器執行個體的 80400)。如果此直接伺服器位於不支援連線系統變數的版本,則變數的值會設定為 0 (UNKNOWN_SERVER_VERSION)。

    變數的值會從來源複製到複本。有了這些資訊,複本可以正確處理來自較舊版本來源的資料,方法是識別所涉及版本之間發生的語法變更或語義變更,並適當地處理這些變更。此資訊也可用於群組複製環境中,其中複製群組的一個或多個成員的版本比其他成員新。可以在每個交易的二進位記錄中檢視變數的值(作為 Gtid_log_eventAnonymous_gtid_log_event 的一部分,如果伺服器上未使用 GTID),並且可能在偵錯跨版本複製問題時有所幫助。

    設定此系統變數的連線值是受限制的操作。連線使用者必須具有 REPLICATION_APPLIER 權限(請參閱第 19.3.3 節:「複製權限檢查」),或具有足夠的權限來設定受限制的連線變數(請參閱 第 7.1.9.1 節:「系統變數權限」)。但是,請注意,此變數不適合使用者設定;它是由複製基礎結構自動設定的。

  • original_server_version

    系統變數 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

    命令列格式 --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=#
    系統變數 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_source_wait_for_replica_count 同義詞。

  • 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

    命令列格式 --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 控制是否在來源伺服器上啟用半同步複製。若要啟用或停用外掛程式,請將此變數分別設定為 ONOFF (或 1 或 0)。預設值為 OFF

  • rpl_semi_sync_source_timeout

    命令列格式 --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_count1,這表示半同步複製會在收到單一副本確認後繼續。對於此變數的較小值,效能最佳。

    例如,如果 rpl_semi_sync_source_wait_for_replica_count2,則在半同步複製繼續進行之前,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,發出交易的客戶端只會在伺服器提交至儲存引擎並收到副本確認後才會收到返回狀態。在提交之後和收到副本確認之前,其他客戶端可以在提交客戶端之前看到已提交的交易。

      如果發生錯誤導致副本未處理該交易,那麼在來源伺服器意外終止並故障轉移至副本時,這些客戶端可能會看到相對於他們在來源端所看到資料的資料遺失。