文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  複寫來源選項和變數

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(含)之間的整數值。將這兩個變數的任一個的值設定為 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 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

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

    命令列格式 --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,只有在伺服器認可到儲存引擎並收到副本確認之後,發出交易的用戶端才會取得傳回狀態。在認可之後和副本確認之前,其他用戶端可以在認可的用戶端之前看到認可的交易。

      如果發生錯誤導致複本無法處理交易,那麼在發生來源伺服器意外退出並故障轉移至複本的情況下,這些用戶端可能會看到相較於在來源伺服器上看到的資料遺失。