文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美國信紙尺寸) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  CHANGE REPLICATION SOURCE TO 陳述式

15.4.2.2 CHANGE REPLICATION SOURCE TO 陳述式

CHANGE REPLICATION SOURCE TO option [, option] ... [ channel_option ]

option: {
    SOURCE_BIND = 'interface_name'
  | SOURCE_HOST = 'host_name'
  | SOURCE_USER = 'user_name'
  | SOURCE_PASSWORD = 'password'
  | SOURCE_PORT = port_num
  | PRIVILEGE_CHECKS_USER = {NULL | 'account'}
  | REQUIRE_ROW_FORMAT = {0|1}
  | REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF | GENERATE}
  | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}
  | SOURCE_LOG_FILE = 'source_log_name'
  | SOURCE_LOG_POS = source_log_pos
  | SOURCE_AUTO_POSITION = {0|1}
  | RELAY_LOG_FILE = 'relay_log_name'
  | RELAY_LOG_POS = relay_log_pos
  | SOURCE_HEARTBEAT_PERIOD = interval
  | SOURCE_CONNECT_RETRY = interval
  | SOURCE_RETRY_COUNT = count
  | SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
  | SOURCE_DELAY = interval
  | SOURCE_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'
  | SOURCE_ZSTD_COMPRESSION_LEVEL = level
  | SOURCE_SSL = {0|1}
  | SOURCE_SSL_CA = 'ca_file_name'
  | SOURCE_SSL_CAPATH = 'ca_directory_name'
  | SOURCE_SSL_CERT = 'cert_file_name'
  | SOURCE_SSL_CRL = 'crl_file_name'
  | SOURCE_SSL_CRLPATH = 'crl_directory_name'
  | SOURCE_SSL_KEY = 'key_file_name'
  | SOURCE_SSL_CIPHER = 'cipher_list'
  | SOURCE_SSL_VERIFY_SERVER_CERT = {0|1}
  | SOURCE_TLS_VERSION = 'protocol_list'
  | SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list'
  | SOURCE_PUBLIC_KEY_PATH = 'key_file_name'
  | GET_SOURCE_PUBLIC_KEY = {0|1}
  | NETWORK_NAMESPACE = 'namespace'
  | IGNORE_SERVER_IDS = (server_id_list),
  | GTID_ONLY = {0|1}
}

channel_option:
    FOR CHANNEL channel

server_id_list:
    [server_id [, server_id] ... ]

CHANGE REPLICATION SOURCE TO 變更複本伺服器用於連線至來源並從來源讀取資料的參數。它也會更新複寫中繼資料儲存庫的內容 (請參閱第 19.2.4 節, 「中繼日誌與複寫中繼資料儲存庫」)。

CHANGE REPLICATION SOURCE TO 陳述式需要 REPLICATION_SLAVE_ADMIN 權限 (或已棄用的 SUPER 權限)。

CHANGE REPLICATION SOURCE TO 陳述式中未指定的選項會保留其值,但以下討論中指示的情況除外。因此,在大多數情況下,不需要指定未變更的選項。

用於 SOURCE_HOST 和其他 CHANGE REPLICATION SOURCE TO 選項的值會檢查換行符號 (\n0x0A) 字元。這些值中存在此類字元會導致陳述式失敗並出現錯誤。

可選的 FOR CHANNEL channel 子句可讓您命名陳述式套用的複寫通道。提供 FOR CHANNEL channel 子句會將 CHANGE REPLICATION SOURCE TO 陳述式套用至特定的複寫通道,並用於新增通道或修改現有通道。例如,要新增一個名為 channel2 的新通道

CHANGE REPLICATION SOURCE TO SOURCE_HOST=host1, SOURCE_PORT=3002 FOR CHANNEL 'channel2';

如果未命名任何子句且不存在額外的通道,則 CHANGE REPLICATION SOURCE TO 陳述式會套用至預設通道,其名稱為空字串 ("")。當您設定多個複寫通道時,每個 CHANGE REPLICATION SOURCE TO 陳述式都必須使用 FOR CHANNEL channel 子句來命名通道。請參閱 第 19.2.2 節,「複寫通道」 以取得更多資訊。

對於 CHANGE REPLICATION SOURCE TO 陳述式的某些選項,您必須在發出 CHANGE REPLICATION SOURCE TO 陳述式之前發出 STOP REPLICA 陳述式 (之後發出 START REPLICA 陳述式)。有時,您只需要停止複寫 SQL (應用程式) 執行緒或複寫 I/O (接收器) 執行緒,而不是兩者都停止。

  • 當應用程式執行緒停止時,您可以使用 RELAY_LOG_FILERELAY_LOG_POSSOURCE_DELAY 選項的任何允許組合來執行 CHANGE REPLICATION SOURCE TO,即使複寫接收器執行緒正在執行。當接收器執行緒正在執行時,此陳述式不能使用其他任何選項。

  • 當接收器執行緒停止時,您可以使用此陳述式的任何選項 (以任何允許的組合) 來執行 CHANGE REPLICATION SOURCE TO除了 RELAY_LOG_FILERELAY_LOG_POSSOURCE_DELAYSOURCE_AUTO_POSITION = 1,即使應用程式執行緒正在執行。

  • 在發出使用 SOURCE_AUTO_POSITION = 1GTID_ONLY = 1ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONSCHANGE REPLICATION SOURCE TO 陳述式之前,必須停止接收器執行緒和應用程式執行緒。

您可以使用 SHOW REPLICA STATUS 來檢查複寫應用程式執行緒和複寫接收器執行緒的目前狀態。請注意,群組複寫應用程式通道 (group_replication_applier) 沒有接收器執行緒,只有應用程式執行緒。

CHANGE REPLICATION SOURCE TO 陳述式有一些副作用和互動,您應該事先了解這些副作用和互動。

以下選項可用於 CHANGE REPLICATION SOURCE TO 陳述式

  • ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}

    使複寫通道將 GTID 指派給沒有 GTID 的複寫交易,從而啟用從不使用基於 GTID 的複寫的來源到複本的複寫。對於多來源複本,您可以混合使用使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的通道和不使用此選項的通道。預設值為 OFF,表示不使用此功能。

    LOCAL 指派包含複本自身 UUID ( server_uuid 設定) 的 GTID。uuid 指派包含指定的 UUID 的 GTID,例如複寫來源伺服器的 server_uuid 設定。使用非本地 UUID 可讓您區分源自複本的交易和源自來源的交易,以及對於多來源複本,區分源自不同來源的交易。您選擇的 UUID 僅對複本自身使用具有意義。如果來源傳送的任何交易已具有 GTID,則會保留該 GTID。

    特定於群組複寫的通道無法使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS,但是群組複寫群組成員的伺服器執行個體上另一個來源的非同步複寫通道可以使用。在這種情況下,請勿指定群組複寫群組名稱作為建立 GTID 的 UUID。

    要將 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 設定為 LOCALuuid,複本必須設定 gtid_mode=ON,且之後無法變更此設定。此選項用於具有基於二進位記錄檔位置的複寫的來源,因此無法為通道設定 SOURCE_AUTO_POSITION=1。在設定此選項之前,必須停止複寫 SQL 執行緒和複寫 I/O (接收器) 執行緒。

    重要

    如果任何通道設定了 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS,則無法在需要容錯移轉時將複本升級以取代複寫來源伺服器,而且無法使用從複本取得的備份來還原複寫來源伺服器。相同的限制適用於取代或還原任何通道上使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的其他複本。

    如需更多限制和資訊,請參閱 第 19.1.3.6 節,「從沒有 GTID 的來源複寫到有 GTID 的複本」

  • GET_SOURCE_PUBLIC_KEY = {0|1}

    透過從來源請求公開金鑰,啟用基於 RSA 金鑰對的密碼交換。此選項預設為停用。

    這個選項適用於使用 caching_sha2_password 驗證外掛程式進行驗證的副本。對於使用此外掛程式進行驗證的帳戶連線,來源端除非被要求,否則不會傳送公開金鑰,因此必須在用戶端要求或指定。如果給定了 SOURCE_PUBLIC_KEY_PATH 並指定了一個有效的公開金鑰檔案,則它會優先於 GET_SOURCE_PUBLIC_KEY。如果您使用使用 caching_sha2_password 外掛程式(預設)進行驗證的複製使用者帳戶,並且您未使用安全連線,則必須指定此選項或 SOURCE_PUBLIC_KEY_PATH 選項,以向副本提供 RSA 公開金鑰。

  • GTID_ONLY = {0|1}

    停止複製通道在複製元數據儲存庫中持久化檔案名稱和檔案位置。GTID_ONLY 預設為關閉非同步複製通道,但對於群組複製通道則預設為啟用,且無法關閉。

    對於具有此設定的複製通道,仍然會追蹤記憶體中的檔案位置,並且為了除錯目的,可以在錯誤訊息和諸如 SHOW REPLICA STATUS 陳述式等介面中觀察到檔案位置(如果它們過期,則會顯示為無效)。但是,在基於 GTID 的複製實際上不需要它們的情況下,包括交易排隊和應用程式處理,可以避免持久化和檢查檔案位置所需的寫入和讀取。

    僅當複製 SQL (applier) 執行緒和複製 I/O (receiver) 執行緒都停止時,才能使用此選項。若要為複製通道設定 GTID_ONLY = 1,則必須在伺服器上使用 GTID (gtid_mode = ON),並且必須在來源端使用基於列的二進位日誌(不支援基於陳述式的複製)。必須為複製通道設定選項 REQUIRE_ROW_FORMAT = 1SOURCE_AUTO_POSITION = 1

    當設定 GTID_ONLY = 1 時,如果系統變數針對伺服器設定為零,則副本會使用 replica_parallel_workers=1,因此在技術上它始終是多執行緒的應用程式。這是因為多執行緒的應用程式使用已儲存的位置,而不是複製元數據儲存庫來定位它需要重新應用之交易的開始位置。

    如果在設定 GTID_ONLY 之後將其停用,則會刪除現有的中繼日誌,並且會持久化現有的已知二進位日誌檔案位置,即使它們已過時。複製元數據儲存庫中二進位日誌和中繼日誌的檔案位置可能無效,如果發生這種情況,則會傳回警告。只要 SOURCE_AUTO_POSITION 仍然啟用,GTID 自動定位就會用於提供正確的定位。

    如果您也停用了 SOURCE_AUTO_POSITION,則如果複製元數據儲存庫中二進位日誌和中繼日誌的檔案位置有效,則會將其用於定位。如果它們被標記為無效,則必須提供有效的二進位日誌檔案名稱和位置 (SOURCE_LOG_FILESOURCE_LOG_POS)。如果您也提供了中繼日誌檔案名稱和位置 (RELAY_LOG_FILERELAY_LOG_POS),則會保留中繼日誌,並且應用程式位置會設定為指定的位置。GTID 自動略過確保即使最終的應用程式位置不正確,也會略過任何已套用的交易。

  • IGNORE_SERVER_IDS = (server_id_list)

    使副本忽略來自指定伺服器的事件。此選項採用以逗號分隔的 0 個或多個伺服器 ID 清單。來自伺服器的日誌輪換和刪除事件不會被忽略,並會記錄在中繼日誌中。

    在循環複製中,來源伺服器通常會作為其自身事件的終結者,以便不會多次套用它們。因此,當圓圈中的其中一個伺服器被移除時,此選項在循環複製中非常有用。假設您有一個包含 4 個伺服器的循環複製設定,其伺服器 ID 為 1、2、3 和 4,而伺服器 3 發生故障。當透過從伺服器 2 開始到伺服器 4 的複製來彌合差距時,您可以在您在伺服器 4 上發出的 CHANGE REPLICATION SOURCE TO 陳述式中包含 IGNORE_SERVER_IDS = (3),以告知它使用伺服器 2 作為其來源,而不是伺服器 3。這樣做會導致它忽略並不傳播任何源自不再使用的伺服器的陳述式。

    如果 IGNORE_SERVER_IDS 包含伺服器本身的 ID,並且伺服器啟動時啟用了 --replicate-same-server-id 選項,則會產生錯誤。

    來源元數據儲存庫和 SHOW REPLICA STATUS 的輸出提供了目前被忽略的伺服器清單。有關詳細資訊,請參閱 第 19.2.4.2 節「複製元數據儲存庫」第 15.7.7.34 節「SHOW REPLICA STATUS 陳述式」

    如果發出 CHANGE REPLICATION SOURCE TO 陳述式時沒有 IGNORE_SERVER_IDS,則會保留任何現有的清單。若要清除被忽略的伺服器清單,則必須使用空清單的選項,如下所示

    CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();

    RESET REPLICA ALL 也會清除 IGNORE_SERVER_IDS

    當全域交易識別碼 (GTID) 用於複製時,會自動忽略已套用的交易。因此,IGNORE_SERVER_IDSgtid_mode=ON 不相容。如果 gtid_modeON,則具有非空 IGNORE_SERVER_IDS 清單的 CHANGE REPLICATION SOURCE TO 會被拒絕並出現錯誤。同樣地,如果任何現有的複製通道是使用要忽略的伺服器 ID 清單建立的,則 SET gtid_mode=ON 也會被拒絕。在開始基於 GTID 的複製之前,請檢查並清除所涉及伺服器上的任何被忽略的伺服器 ID 清單;您可以透過檢查 SHOW REPLICA STATUS 的輸出執行此操作。在這種情況下,您可以透過發出具有空伺服器 ID 清單的 CHANGE REPLICATION SOURCE TO 來清除清單,如先前所示。

  • NETWORK_NAMESPACE = 'namespace'

    用於與複製來源伺服器的 TCP/IP 連線的網路命名空間,或者,如果正在使用 MySQL 通訊堆疊,則用於群組複製的群組通訊連線。字串值的最大長度為 64 個字元。如果省略此選項,則來自副本的連線會使用預設(全域)命名空間。在未實作網路命名空間支援的平台上,當副本嘗試連線到來源時會發生失敗。有關網路命名空間的資訊,請參閱 第 7.1.14 節「網路命名空間支援」

  • PRIVILEGE_CHECKS_USER = {NULL | 'account'}

    命名一個使用者帳戶,該帳戶為指定的通道提供安全性內容。NULL(預設值)表示不使用安全性內容。

    使用者帳戶的使用者名稱和主機名稱必須遵循 第 8.2.4 節「指定帳戶名稱」中描述的語法,並且使用者不得是匿名使用者(具有空白使用者名稱)或 CURRENT_USER。該帳戶必須具有 REPLICATION_APPLIER 權限,以及執行通道上複製的交易所需的權限。有關帳戶所需權限的詳細資訊,請參閱 第 19.3.3 節「複製權限檢查」。當您重新啟動複製通道時,將從該時間點開始套用權限檢查。如果您沒有指定通道且不存在其他通道,則此陳述式會套用至預設通道。

    強烈建議在設定 PRIVILEGE_CHECKS_USER 時使用基於列的二進位日誌,並且您可以設定 REQUIRE_ROW_FORMAT 以強制執行此操作。例如,若要在執行中的副本上的通道 channel_1 上啟動權限檢查,請發出以下陳述式

    STOP REPLICA FOR CHANNEL 'channel_1';
    
    CHANGE REPLICATION SOURCE TO
        PRIVILEGE_CHECKS_USER = 'user'@'host',
        REQUIRE_ROW_FORMAT = 1,
        FOR CHANNEL 'channel_1';
    
    START REPLICA FOR CHANNEL 'channel_1';
  • RELAY_LOG_FILE = 'relay_log_file' , RELAY_LOG_POS = 'relay_log_pos'

    中繼日誌檔案名稱,以及該檔案中的位置,複製 SQL 執行緒下次啟動時將從副本的中繼日誌開始讀取的位置。RELAY_LOG_FILE 可以使用絕對路徑或相對路徑,並使用與 SOURCE_LOG_FILE 相同的基本名稱。字串值的最大長度為 511 個字元。

    當複製 SQL (執行) 執行緒停止時,可以使用 RELAY_LOG_FILERELAY_LOG_POS 或同時使用這兩個選項,在運行的副本上執行 CHANGE REPLICATION SOURCE TO 陳述式。如果至少有一個複製執行緒和複製 I/O (接收器) 執行緒正在運行,則會保留中繼日誌。如果兩個執行緒都停止,除非至少指定 RELAY_LOG_FILERELAY_LOG_POS 其中一個,否則所有中繼日誌檔案都會被刪除。對於群組複製執行緒 (group_replication_applier),它只有一個執行緒而沒有接收器執行緒,如果執行緒停止,就會發生這種情況,但您無法在該通道使用 RELAY_LOG_FILERELAY_LOG_POS 選項。

  • REQUIRE_ROW_FORMAT = {0|1}

    僅允許複製通道處理基於列的複製事件。此選項可防止複製執行緒執行建立臨時表格和執行 LOAD DATA INFILE 要求等操作,從而提高通道的安全性。REQUIRE_ROW_FORMAT 選項對於非同步複製通道預設為停用,但對於群組複製通道預設為啟用,且無法為其停用。如需更多資訊,請參閱第 19.3.3 節,「複製權限檢查」

  • REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF | GENERATE}

    此選項可讓副本設定自己的主要索引鍵檢查策略,如下所示

    • ON:副本設定 sql_require_primary_key = ON;任何複製的 CREATE TABLEALTER TABLE 陳述式都必須產生一個包含主要索引鍵的表格。

    • OFF:副本設定 sql_require_primary_key = OFF;不會檢查任何複製的 CREATE TABLEALTER TABLE 陳述式是否具有主要索引鍵。

    • STREAM:副本使用從來源複製的每個交易 sql_require_primary_key 的任何值。這是預設值和預設行為。

    • GENERATE:導致副本為任何在複製時缺少主要索引鍵的 InnoDB 表格產生一個不可見的主要索引鍵。如需更多資訊,請參閱第 15.1.20.11 節,「產生的不可見主要索引鍵」

      GENERATE 與群組複製不相容;您可以使用 ONOFFSTREAM

    只要來源支援 GIPK 且副本使用 MySQL 8.0.32 或更新版本,MySQL 複製就支援僅在來源或副本表格上基於產生的不可見主要索引鍵的存在而產生的差異。如果您在副本上使用 GIPK,而來源使用較早版本的 MySQL,則不支援架構中的此類差異 (除了副本上額外的 GIPK),並且可能會導致複製錯誤。

    對於多來源複製,將 REQUIRE_TABLE_PRIMARY_KEY_CHECK 設定為 ONOFF 可讓副本在不同來源的複製通道之間標準化行為,並保持 sql_require_primary_key 的一致設定。使用 ON 可防止多個來源更新相同的一組表格時意外遺失主要索引鍵。使用 OFF 可讓可以操作主要索引鍵的來源與無法操作的來源一起運作。

    在多個副本的情況下,當 REQUIRE_TABLE_PRIMARY_KEY_CHECK 設定為 GENERATE 時,給定副本新增的產生的不可見主要索引鍵與任何其他副本上新增的任何此類索引鍵無關。這表示如果使用產生的不可見主要索引鍵,則不保證不同副本上產生的主要索引鍵欄中的值相同。當故障轉移到此類副本時,這可能會是一個問題。

    PRIVILEGE_CHECKS_USERNULL (預設值) 時,使用者帳戶不需要管理員層級權限來設定受限制的工作階段變數。將此選項設定為 NULL 以外的值表示,當 REQUIRE_TABLE_PRIMARY_KEY_CHECKONOFFGENERATE 時,使用者帳戶不需要工作階段管理員層級權限來設定受限制的工作階段變數,例如 sql_require_primary_key,從而避免需要授予帳戶此類權限。如需更多資訊,請參閱第 19.3.3 節,「複製權限檢查」

  • SOURCE_AUTO_POSITION = {0|1}

    使副本嘗試使用基於 GTID 的複製的自動定位功能連接到來源,而不是基於二進位日誌檔案的位置。此選項用於使用基於 GTID 的複製來啟動副本。預設值為 0,表示不使用 GTID 自動定位和基於 GTID 的複製。只有當複製 SQL (執行) 執行緒和複製 I/O (接收器) 執行緒都停止時,此選項才能與 CHANGE REPLICATION SOURCE TO 一起使用。

    副本和來源都必須啟用 GTID (GTID_MODE=ON、副本上的 ON_PERMISSIVEOFF_PERMISSIVE,以及來源上的 GTID_MODE=ON)。SOURCE_LOG_FILESOURCE_LOG_POSRELAY_LOG_FILERELAY_LOG_POS 不能與 SOURCE_AUTO_POSITION = 1 一起指定。如果在副本上啟用多來源複製,則需要為每個適用的複製通道設定 SOURCE_AUTO_POSITION = 1 選項。

    設定 SOURCE_AUTO_POSITION = 1 後,在初始連線交握期間,副本會傳送一個 GTID 集,其中包含它已接收、提交或兩者的交易。來源會透過傳送其二進位日誌中記錄的所有交易來回應,這些交易的 GTID 不包含在副本傳送的 GTID 集中。此交換可確保來源只會傳送具有副本尚未記錄或提交的 GTID 的交易。如果副本從多個來源接收交易,如菱形拓撲的情況,則自動略過功能可確保交易不會被套用兩次。如需副本傳送的 GTID 集如何計算的詳細資訊,請參閱第 19.1.3.3 節,「GTID 自動定位」

    如果來源應傳送的任何交易已從來源的二進位日誌中清除,或透過另一種方法新增至 gtid_purged 系統變數中的 GTID 集中,則來源會將錯誤 ER_SOURCE_HAS_PURGED_REQUIRED_GTIDS 傳送至副本,且複製不會啟動。遺失的已清除交易的 GTID 會被識別,並在來源的錯誤日誌中以警告訊息 ER_FOUND_MISSING_GTIDS 列出。此外,如果在交易交換期間發現副本已在 GTID 中記錄或提交具有來源 UUID 的交易,但來源本身並未提交這些交易,則來源會將錯誤 ER_REPLICA_HAS_MORE_GTIDS_THAN_SOURCE 傳送至副本,且複製不會啟動。如需如何處理這些情況的資訊,請參閱第 19.1.3.3 節,「GTID 自動定位」

    您可以透過檢查 Performance Schema replication_connection_status 表格或 SHOW REPLICA STATUS 的輸出來查看複製是否以啟用 GTID 自動定位的方式執行。再次停用 SOURCE_AUTO_POSITION 選項會使副本還原為基於檔案的複製。

  • SOURCE_BIND = 'interface_name'

    決定副本的多個網路介面中,選擇哪個網路介面連接到來源,以用於具有多個網路介面的副本。指定網路介面的 IP 位址。字串值的最大長度為 255 個字元。

    使用此選項設定的 IP 位址 (如果有的話) 可在 SHOW REPLICA STATUS 輸出的 Source_Bind 欄中看到。在來源中繼資料儲存庫表格 mysql.slave_master_info 中,該值可作為 Source_bind 欄看到。NDB 叢集也支援將副本繫結到特定網路介面的功能。

  • SOURCE_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'

    指定連接到複製來源伺服器的允許壓縮演算法中的一、二或三個,以逗號分隔。字串值的最大長度為 99 個字元。預設值為 uncompressed

    可用的演算法有 zlibzstduncompressed,與 protocol_compression_algorithms 系統變數相同。這些演算法可以依任何順序指定,但這並非偏好順序 - 演算法協商程序會嘗試使用 zlib,然後是 zstd,接著是 uncompressed,如果它們有被指定的話。

    SOURCE_COMPRESSION_ALGORITHMS 的值僅在 replica_compressed_protocol 系統變數停用時適用。如果啟用 replica_compressed_protocol,則會優先於 SOURCE_COMPRESSION_ALGORITHMS,並且如果來源和副本都支援該演算法,則與來源的連線會使用 zlib 壓縮。如需更多資訊,請參閱 第 6.2.8 節,「連線壓縮控制」

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

  • SOURCE_CONNECT_RETRY = 間隔

    指定在與來源連線逾時後,副本嘗試重新連線的間隔秒數。預設間隔為 60。

    嘗試次數受限於 SOURCE_RETRY_COUNT 選項。如果同時使用預設設定,則副本在嘗試重新連線之間會等待 60 秒(SOURCE_CONNECT_RETRY=60),並以這個速率持續嘗試重新連線 10 分鐘(SOURCE_RETRY_COUNT=10)。這些值會記錄在來源的中繼資料儲存庫中,並顯示在 replication_connection_configuration Performance Schema 表格中。

  • SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}

    如果有一個或多個可用的替代複寫來源伺服器(因此,當有多個 MySQL 伺服器或伺服器群組共用複寫資料時),則會為複寫通道啟用非同步連線容錯移轉機制。預設值為 0,表示該機制未啟用。如需完整資訊和設定此功能的說明,請參閱 第 19.4.9.2 節,「副本的非同步連線容錯移轉」

    非同步連線容錯移轉機制會在由 SOURCE_CONNECT_RETRYSOURCE_RETRY_COUNT 控制的重新連線嘗試次數耗盡後接管。它會將副本重新連線到從指定的來源清單中選出的替代來源,您可以使用函式 asynchronous_connection_failover_add_source()asynchronous_connection_failover_delete_source() 來管理該來源清單。若要新增和移除受管理的伺服器群組,請改用 asynchronous_connection_failover_add_managed()asynchronous_connection_failover_delete_managed()。如需更多資訊,請參閱 第 19.4.9 節,「使用非同步連線容錯移轉切換來源和副本」

    重要
    1. 只有在使用 GTID 自動定位時(SOURCE_AUTO_POSITION = 1),您才能設定 SOURCE_CONNECTION_AUTO_FAILOVER = 1

    2. 當您設定 SOURCE_CONNECTION_AUTO_FAILOVER = 1 時,請將 SOURCE_RETRY_COUNTSOURCE_CONNECT_RETRY 設定為最小值,以允許對同一來源進行少量重試嘗試,以防連線失敗是由於暫時性網路中斷所導致。否則,非同步連線容錯移轉機制將無法立即啟用。合適的值為 SOURCE_RETRY_COUNT=3SOURCE_CONNECT_RETRY=10,這會使副本以 10 秒的間隔重試連線 3 次。

    3. 當您設定 SOURCE_CONNECTION_AUTO_FAILOVER = 1 時,複寫中繼資料儲存庫必須包含複寫使用者帳戶的認證,該帳戶可用於連線到複寫通道來源清單中的所有伺服器。該帳戶還必須具有 Performance Schema 表格的 SELECT 權限。可以使用 CHANGE REPLICATION SOURCE TO 陳述式和 SOURCE_USERSOURCE_PASSWORD 選項來設定這些認證。如需更多資訊,請參閱 第 19.4.9 節,「使用非同步連線容錯移轉切換來源和副本」

    4. 當您設定 SOURCE_CONNECTION_AUTO_FAILOVER = 1 時,如果此複寫通道位於單一主要模式的群組複寫主要伺服器上,則會自動啟用副本的非同步連線容錯移轉。在此功能啟用後,如果正在複寫的主要伺服器離線或進入錯誤狀態,則新的主要伺服器會在選出時在同一通道上開始複寫。如果您想要使用此功能,則此複寫通道也必須在複寫群組中的所有次要伺服器以及任何新加入的成員上設定。(如果使用 MySQL 的複製功能佈建伺服器,則所有這些都會自動發生。)如果您不想使用此功能,請使用 group_replication_disable_member_action() 函式停用預設啟用的群組複寫成員動作 mysql_start_failover_channels_if_primary,來停用此功能。如需更多資訊,請參閱 第 19.4.9.2 節,「副本的非同步連線容錯移轉」

  • SOURCE_DELAY = 間隔

    指定副本必須落後來源多少秒。從來源接收的事件只有在比來源上的執行時間晚至少 間隔 秒後才會執行。間隔 必須是 0 到 231−1 範圍內的非負整數。預設值為 0。如需更多資訊,請參閱 第 19.4.11 節,「延遲複寫」

    使用 SOURCE_DELAY 選項的 CHANGE REPLICATION SOURCE TO 陳述式可以在複寫 SQL 執行緒停止時於正在執行的副本上執行。

  • SOURCE_HEARTBEAT_PERIOD = 間隔

    控制心跳間隔,如果連線仍然良好,則在沒有資料的情況下會停止連線逾時。在該秒數後會將心跳訊號傳送到副本,並且每當來源的二進位日誌以事件更新時,等待時間就會重置。因此,只有在二進位日誌檔案中沒有未傳送的事件超過此時間段時,來源才會傳送心跳。

    心跳間隔 間隔 是一個十進位值,範圍為 0 到 4294967 秒,解析度為毫秒;最小非零值為 0.001。將 間隔 設定為 0 會完全停用心跳。心跳間隔預設為 replica_net_timeout 系統變數值的一半。它會記錄在來源的中繼資料儲存庫中,並顯示在 replication_connection_configuration Performance Schema 表格中。

    replica_net_timeout 系統變數指定副本在考慮連線中斷、中止讀取並嘗試重新連線之前,等待來自來源的更多資料或心跳訊號的秒數。預設值為 60 秒(一分鐘)。請注意,變更 replica_net_timeout 的值或預設設定不會自動變更心跳間隔,無論該間隔是已明確設定還是使用先前計算的預設值。如果您將 replica_net_timeout 的全域值設定為小於目前心跳間隔的值,則會發出警告。如果變更 replica_net_timeout,您還必須發出 CHANGE REPLICATION SOURCE TO 以將心跳間隔調整為適當的值,以便在連線逾時之前發生心跳訊號。如果您不這樣做,則心跳訊號不會有任何作用,並且如果沒有從來源接收到資料,則副本可能會重複嘗試重新連線,進而建立殭屍傾印執行緒。

  • SOURCE_HOST = '主機名稱'

    複寫來源伺服器的主機名稱或 IP 位址。副本會使用此位址來連線到來源。字串值的最大長度為 255 個字元。

    如果您指定 SOURCE_HOSTSOURCE_PORT,副本會假設來源伺服器與之前不同(即使選項值與其目前的值相同)。在這種情況下,舊的來源二進位日誌檔案名稱和位置值會被認為不再適用,因此,如果您未在陳述式中指定 SOURCE_LOG_FILESOURCE_LOG_POS,則會以靜默方式將 SOURCE_LOG_FILE=''SOURCE_LOG_POS=4 附加到其中。

    SOURCE_HOST='' 設定為(也就是將其值明確設定為空字串)與根本不設定 SOURCE_HOST 不同。嘗試將 SOURCE_HOST 設定為空字串會失敗並出現錯誤。

  • SOURCE_LOG_FILE = '來源日誌名稱'SOURCE_LOG_POS = 來源日誌位置

    二進位日誌檔案名稱,以及該檔案中的位置,複寫 I/O(接收器)執行緒下次啟動執行緒時會從該位置開始讀取來源的二進位日誌。如果您使用基於二進位日誌檔案位置的複寫,請指定這些選項。

    SOURCE_LOG_FILE 必須包含來源伺服器上可用的特定二進位日誌檔案的數字後綴,例如,SOURCE_LOG_FILE='binlog.000145'。字串值的最大長度為 511 個字元。

    SOURCE_LOG_POS 是副本在此檔案中開始讀取的數值位置。SOURCE_LOG_POS=4 代表二進制日誌檔中事件的起始位置。

    如果您指定 SOURCE_LOG_FILESOURCE_LOG_POS 其中之一,則不能指定 SOURCE_AUTO_POSITION = 1,這用於基於 GTID 的複製。

    如果未指定 SOURCE_LOG_FILESOURCE_LOG_POS,則副本會使用在發出 CHANGE REPLICATION SOURCE TO 之前,複製 SQL 線程的最後座標。這樣可確保複製不會中斷,即使複製 SQL (applier) 線程比複製 I/O (receiver) 線程慢也是如此。

  • SOURCE_PASSWORD = 'password'

    用於連接到複製來源伺服器的複製使用者帳戶密碼。字串值的最大長度為 32 個字元。如果您指定 SOURCE_PASSWORD,則還必須指定 SOURCE_USER

    CHANGE REPLICATION SOURCE TO 陳述式中用於複製使用者帳戶的密碼長度限制為 32 個字元。嘗試使用超過 32 個字元的密碼會導致 CHANGE REPLICATION SOURCE TO 失敗。

    密碼在 MySQL Server 的日誌、Performance Schema 資料表和 SHOW PROCESSLIST 陳述式中會被遮罩。

  • SOURCE_PORT = port_num

    副本用於連接到複製來源伺服器的 TCP/IP 連接埠號碼。

    注意

    複製無法使用 Unix Socket 檔案。您必須能夠使用 TCP/IP 連接到複製來源伺服器。

    如果您指定 SOURCE_HOSTSOURCE_PORT,副本會假設來源伺服器與之前不同(即使選項值與其目前的值相同)。在這種情況下,舊的來源二進位日誌檔案名稱和位置值會被認為不再適用,因此,如果您未在陳述式中指定 SOURCE_LOG_FILESOURCE_LOG_POS,則會以靜默方式將 SOURCE_LOG_FILE=''SOURCE_LOG_POS=4 附加到其中。

  • SOURCE_PUBLIC_KEY_PATH = 'key_file_name'

    透過提供包含來源所需的公鑰之副本端副本的檔案路徑名稱,啟用基於 RSA 金鑰對的密碼交換。檔案必須為 PEM 格式。字串值的最大長度為 511 個字元。

    此選項適用於使用 sha256_password (已棄用) 或 caching_sha2_password 身份驗證外掛程式進行驗證的副本。(對於 sha256_password,只有在使用 OpenSSL 建置 MySQL 時才能使用 SOURCE_PUBLIC_KEY_PATH。)如果您使用的是使用 caching_sha2_password 外掛程式 (預設) 進行驗證的複製使用者帳戶,且您未使用安全連線,則必須指定此選項或 GET_SOURCE_PUBLIC_KEY=1 選項,以將 RSA 公鑰提供給副本。

  • SOURCE_RETRY_COUNT = count

    設定在連線到來源逾時後,副本進行的最大重新連線嘗試次數,這由 replica_net_timeout 系統變數決定。如果副本需要重新連線,則第一次重試會在逾時後立即發生。預設為 10 次嘗試。

    嘗試之間的間隔由 SOURCE_CONNECT_RETRY 選項指定。如果同時使用預設設定,則副本會在每次重新連線嘗試之間等待 60 秒 (SOURCE_CONNECT_RETRY=60),並以這個速度嘗試重新連線 10 分鐘 (SOURCE_RETRY_COUNT=10)。將 SOURCE_RETRY_COUNT 設定為 0 表示重新連線嘗試次數沒有限制,因此副本會無限期地嘗試重新連線。

    SOURCE_CONNECT_RETRYSOURCE_RETRY_COUNT 的值會記錄在來源中繼資料儲存庫中,並顯示在 replication_connection_configuration Performance Schema 資料表中。SOURCE_RETRY_COUNT 取代 --master-retry-count 伺服器啟動選項。

  • SOURCE_SSL = {0|1}

    指定副本是否加密複製連線。預設值為 0,表示副本不會加密複製連線。如果您設定 SOURCE_SSL=1,則可以使用 SOURCE_SSL_xxxSOURCE_TLS_xxx 選項設定加密。

    針對複製連線設定 SOURCE_SSL=1,然後不設定任何其他 SOURCE_SSL_xxx 選項,相當於為用戶端設定 --ssl-mode=REQUIRED,如 加密連線的命令選項中所述。使用 SOURCE_SSL=1 時,只有在可以建立加密連線時,連線嘗試才會成功。複製連線不會回退到未加密的連線,因此沒有對應於複製的 --ssl-mode=PREFERRED 設定。如果設定了 SOURCE_SSL=0,則相當於 --ssl-mode=DISABLED

    重要

    為了協助防止複雜的中間人攻擊,副本驗證伺服器的身分非常重要。您可以指定其他 SOURCE_SSL_xxx 選項,以對應於 --ssl-mode=VERIFY_CA--ssl-mode=VERIFY_IDENTITY 的設定,這比預設設定更能協助防止這種類型的攻擊。使用這些設定,副本會檢查伺服器的憑證是否有效,並檢查副本使用的主機名稱是否符合伺服器憑證中的身分。若要實作其中一個驗證層級,您必須先確保伺服器的 CA 憑證能可靠地提供給副本,否則會導致可用性問題。因此,這些並非預設設定。

  • SOURCE_SSL_xxx, SOURCE_TLS_xxx

    指定副本如何使用加密和密碼來保護複製連線。即使在未編譯 SSL 支援的副本上,也可以變更這些選項。它們會儲存到來源中繼資料儲存庫,但如果副本未啟用 SSL 支援,則會忽略它們。字串值 SOURCE_SSL_xxxSOURCE_TLS_xxx 選項的值最大長度為 511 個字元,但 SOURCE_TLS_CIPHERSUITES 除外,其最大長度為 4000 個字元。

    SOURCE_SSL_xxxSOURCE_TLS_xxx 選項的功能與 加密連線的命令選項中描述的 --ssl-xxx--tls-xxx 用戶端選項相同。這兩組選項之間的對應關係,以及如何使用 SOURCE_SSL_xxxSOURCE_TLS_xxx 選項來設定安全連線,會在 第 19.3.1 節「設定複製以使用加密連線」中說明。

  • SOURCE_USER = 'user_name'

    用於連接到複製來源伺服器的複製使用者帳戶的使用者名稱。字串值的最大長度為 96 個字元。

    對於群組複製,此帳戶必須存在於複製群組的每個成員上。如果 XCom 通訊堆疊用於群組,則此帳戶用於分散式復原,如果 MySQL 通訊堆疊用於群組,則此帳戶也用於群組通訊連線。使用 MySQL 通訊堆疊時,帳戶必須具有 GROUP_REPLICATION_STREAM 權限。

    可以透過指定 SOURCE_USER='' 來設定空的使用者名稱,但無法使用空的使用者名稱啟動複製通道。如果您始終使用啟動複製通道的 START REPLICA 陳述式或 START GROUP_REPLICATION 陳述式來提供使用者認證,則設定空的 SOURCE_USER 使用者名稱並在之後使用該通道是有效的。這種方法表示複製通道始終需要操作員介入才能重新啟動,但使用者認證不會記錄在複製中繼資料儲存庫中。

    重要

    若要使用以 caching_sha2_password 外掛程式驗證的複寫使用者帳戶連線到來源,您必須設定如第 19.3.1 節「設定複寫以使用加密連線」所述的安全連線,或啟用未加密的連線以支援使用 RSA 金鑰配對的密碼交換。caching_sha2_password 驗證外掛程式是新使用者的預設外掛程式 (請參閱第 8.4.1.2 節「快取 SHA-2 可插入式驗證」)。如果您建立或用於複寫的使用者帳戶使用此驗證外掛程式,且您未使用安全連線,則您必須啟用基於 RSA 金鑰配對的密碼交換,才能成功連線。您可以使用此語句的 SOURCE_PUBLIC_KEY_PATH 選項或 GET_SOURCE_PUBLIC_KEY=1 選項來執行此操作。

  • SOURCE_ZSTD_COMPRESSION_LEVEL = level

    使用 zstd 壓縮演算法連線到複寫來源伺服器時要使用的壓縮層級。允許的層級為 1 到 22,較大的值表示較高的壓縮層級。預設層級為 3。

    壓縮層級設定對未使用 zstd 壓縮的連線沒有影響。如需詳細資訊,請參閱第 6.2.8 節「連線壓縮控制」

範例

當您擁有來源的快照,並且已記錄對應於快照時間的來源二進位日誌座標時,CHANGE REPLICATION SOURCE TO 非常適合用來設定複本。將快照載入複本以使其與來源同步之後,您可以在複本上執行 CHANGE REPLICATION SOURCE TO SOURCE_LOG_FILE='log_name', SOURCE_LOG_POS=log_pos,以指定複本應該開始讀取來源二進位日誌的座標。以下範例變更複本使用的來源伺服器,並建立複本開始讀取來源二進位日誌的座標

CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='source2.example.com',
  SOURCE_USER='replication',
  SOURCE_PASSWORD='password',
  SOURCE_PORT=3306,
  SOURCE_LOG_FILE='source2-bin.001',
  SOURCE_LOG_POS=4,
  SOURCE_CONNECT_RETRY=10;

如需在容錯移轉期間將現有複本切換到新來源的程序,請參閱第 19.4.8 節「在容錯移轉期間切換來源」

當 GTID 在來源和複本上使用時,請指定 GTID 自動定位,而不是提供二進位日誌檔案位置,如下列範例所示。如需在新或已停止的伺服器、線上伺服器或其他複本上設定和啟動基於 GTID 的複寫的完整指示,請參閱第 19.1.3 節「使用全域交易識別碼進行複寫」

CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='source3.example.com',
  SOURCE_USER='replication',
  SOURCE_PASSWORD='password',
  SOURCE_PORT=3306,
  SOURCE_AUTO_POSITION = 1,
  FOR CHANNEL "source_3";

在此範例中,正在使用多來源複寫,且 CHANGE REPLICATION SOURCE TO 陳述式會套用到將複本連接到指定主機的複寫通道 "source_3"。如需設定多來源複寫的指導,請參閱第 19.1.5 節「MySQL 多來源複寫」

下一個範例說明如何讓複本從您想要重複的 relay 日誌檔案套用交易。若要執行此操作,來源不需要可連線。您可以使用 CHANGE REPLICATION SOURCE TO 來找到您想要讓複本開始重新套用交易的 relay 日誌位置,然後啟動 SQL 執行緒

CHANGE REPLICATION SOURCE TO
  RELAY_LOG_FILE='replica-relay-bin.006',
  RELAY_LOG_POS=4025;
START REPLICA SQL_THREAD;

CHANGE REPLICATION SOURCE TO 也可用來跳過二進位日誌中導致複寫停止的交易。執行此操作的適當方法取決於是否正在使用 GTID。如需使用 CHANGE REPLICATION SOURCE TO 或其他方法跳過交易的指示,請參閱第 19.1.7.3 節「跳過交易」