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
選項的值會檢查換行符號 (\n
或 0x0A
) 字元。如果這些值中存在此類字元,則陳述式會失敗並出現錯誤。
可選的 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
子句命名通道。如需詳細資訊,請參閱第 19.2.2 節「複製通道」。channel
對於 CHANGE REPLICATION SOURCE TO
陳述式的某些選項,您必須先發出 STOP REPLICA
陳述式,然後才能發出 CHANGE REPLICATION SOURCE TO
陳述式(以及之後的 START REPLICA
陳述式)。有時,您只需要停止複製 SQL (applier) 執行緒或複製 I/O (receiver) 執行緒,而不是兩者。
當 applier 執行緒停止時,您可以使用
RELAY_LOG_FILE
、RELAY_LOG_POS
和SOURCE_DELAY
選項的任何允許組合來執行CHANGE REPLICATION SOURCE TO
,即使複製接收器執行緒正在執行也是如此。當接收器執行緒正在執行時,此陳述式不得使用其他選項。當接收器執行緒停止時,您可以執行
CHANGE REPLICATION SOURCE TO
,使用此陳述式的任何選項(以任何允許的組合)除了RELAY_LOG_FILE
、RELAY_LOG_POS
、SOURCE_DELAY
或SOURCE_AUTO_POSITION = 1
,即使 applier 執行緒正在執行也是如此。在發出使用
SOURCE_AUTO_POSITION = 1
、GTID_ONLY = 1
或ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的CHANGE REPLICATION SOURCE TO
陳述式之前,必須停止接收器執行緒和 applier 執行緒。
您可以使用 SHOW REPLICA STATUS
來檢查複製 applier 執行緒和複製接收器執行緒的目前狀態。請注意,群組複製 applier 通道 (group_replication_applier
) 沒有接收器執行緒,只有 applier 執行緒。
CHANGE REPLICATION SOURCE TO
陳述式具有一些副作用和互動,您應事先了解。
CHANGE REPLICATION SOURCE TO
會導致隱含地提交進行中的交易。請參閱第 15.3.3 節「導致隱含提交的陳述式」。CHANGE REPLICATION SOURCE TO
會導致將先前的SOURCE_HOST
、SOURCE_PORT
、SOURCE_LOG_FILE
和SOURCE_LOG_POS
值,連同執行前關於從屬狀態的其他資訊,寫入錯誤日誌。如果您使用以陳述式為基礎的複製和暫存資料表,則在
STOP REPLICA
陳述式之後的CHANGE REPLICATION SOURCE TO
陳述式可能會在從屬上留下暫存資料表。每當發生這種情況時,都會發出警告 (ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO
)。在這種情況下,您可以確保Replica_open_temp_tables
系統狀態變數的值等於 0,然後再執行此類CHANGE REPLICATION SOURCE TO
陳述式,即可避免這種情況。當使用多執行緒從屬 (
replica_parallel_workers
> 0) 時,停止從屬可能會導致從中繼日誌執行的交易順序中出現間隙,無論是否是有意停止從屬。在 MySQL 9.0 中,可以使用 GTID 自動定位來解決這些問題。
下列選項可用於 CHANGE REPLICATION SOURCE TO
陳述式
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL |
uuid
}使複製通道將 GTID 指派給沒有 GTID 的複製交易,以便從未使用以 GTID 為基礎的複製的來源複製到具有 GTID 的從屬。對於多來源從屬,您可以混合使用使用
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的通道,以及不使用ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的通道。預設值為OFF
,表示未使用此功能。LOCAL
指派包含從屬自身 UUID 的 GTID(server_uuid
設定)。
指派包含指定 UUID 的 GTID,例如複製來源伺服器的uuid
server_uuid
設定。使用非本機 UUID 可讓您區分從屬上開始的交易與來源上開始的交易,以及對於多來源從屬,區分從不同來源開始的交易。您選擇的 UUID 僅對從屬自己的使用具有意義。如果來源傳送的任何交易已經有 GTID,則會保留該 GTID。群組複製專用的通道無法使用
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
,但是群組複製群組成員的伺服器執行個體上另一個來源的非同步複製通道可以使用。在這種情況下,請勿將群組複製群組名稱指定為建立 GTID 的 UUID。若要將
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
設定為LOCAL
或
,從屬必須設定uuid
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 的從屬」。
透過從來源要求公鑰來啟用以 RSA 金鑰組為基礎的密碼交換。預設會停用此選項。
此選項適用於使用
caching_sha2_password
驗證外掛程式進行驗證的從屬。對於使用此外掛程式驗證的帳戶的連線,除非要求,否則來源不會傳送公鑰,因此必須在用戶端中要求或指定。如果指定了SOURCE_PUBLIC_KEY_PATH
並且指定有效的公鑰檔案,則它會優先於GET_SOURCE_PUBLIC_KEY
。如果您使用使用caching_sha2_password
外掛程式 (預設值) 驗證的複製使用者帳戶,而且您未使用安全連線,則必須指定此選項或SOURCE_PUBLIC_KEY_PATH
選項,才能將 RSA 公鑰提供給從屬。停止複製通道在複製中繼資料儲存庫中保存檔案名稱和檔案位置。對於非同步複製通道,預設會停用
GTID_ONLY
,但對於群組複製通道,預設會啟用GTID_ONLY
,且無法停用。對於具有此設定的複製通道,仍會追蹤記憶體中的檔案位置,並且仍然可以在錯誤訊息和透過介面(例如
SHOW REPLICA STATUS
陳述式)中觀察檔案位置以進行除錯(如果檔案位置過期,則會顯示為無效)。但是,在以 GTID 為基礎的複製實際上不需要這些檔案位置的情況下,會避免保存和檢查檔案位置所需的寫入和讀取,包括交易佇列和應用程式處理。只有在複製 SQL (執行緒) 和複製 I/O (接收) 執行緒都停止時,才能使用此選項。若要為複製通道設定
GTID_ONLY = 1
,伺服器必須啟用 GTID (gtid_mode = ON
),且來源必須使用基於列的二進制記錄 (不支援基於語句的複製)。複製通道必須設定選項REQUIRE_ROW_FORMAT = 1
和SOURCE_AUTO_POSITION = 1
。當設定
GTID_ONLY = 1
時,如果伺服器的系統變數replica_parallel_workers
設定為零,則副本會使用replica_parallel_workers=1
,因此技術上始終是多執行緒執行器。這是因為多執行緒執行器使用已儲存的位置,而不是複製元數據儲存庫,來尋找需要重新套用的交易起點。如果在設定
GTID_ONLY
後將其停用,則現有的中繼日誌會被刪除,且現有的已知二進制日誌檔案位置會被持久保存,即使它們已過時。複製元數據儲存庫中二進制日誌和中繼日誌的檔案位置可能無效,如果發生這種情況,則會傳回警告。如果仍然啟用SOURCE_AUTO_POSITION
,則會使用 GTID 自動定位來提供正確的定位。如果您也停用
SOURCE_AUTO_POSITION
,則如果有效,則複製元數據儲存庫中二進制日誌和中繼日誌的檔案位置會用於定位。如果它們被標記為無效,您必須提供有效的二進制日誌檔案名稱和位置 (SOURCE_LOG_FILE
和SOURCE_LOG_POS
)。如果您也提供中繼日誌檔案名稱和位置 (RELAY_LOG_FILE
和RELAY_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_IDS
與gtid_mode=ON
不相容。如果gtid_mode
為ON
,則帶有非空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_FILE
、RELAY_LOG_POS
或同時使用這兩個選項的CHANGE REPLICATION SOURCE TO
語句。如果複製執行緒和複製 I/O (接收) 執行緒中至少有一個正在執行,則中繼日誌會被保留。如果這兩個執行緒都已停止,則會刪除所有中繼日誌檔案,除非至少指定了RELAY_LOG_FILE
或RELAY_LOG_POS
中的一個。對於僅具有執行緒而沒有接收執行緒的群組複製執行緒通道 (group_replication_applier
),如果執行緒已停止,則會發生這種情況,但您無法在該通道中使用RELAY_LOG_FILE
和RELAY_LOG_POS
選項。僅允許複製通道處理基於列的複製事件。此選項可防止複製執行緒執行建立暫存表格和執行
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 TABLE
或ALTER TABLE
語句都必須產生包含主鍵的表格。OFF
:副本設定sql_require_primary_key = OFF
;不會檢查任何複製的CREATE TABLE
或ALTER TABLE
語句是否存在主鍵。STREAM
:副本為每個交易使用從來源複製的sql_require_primary_key
的值。這是預設值和預設行為。GENERATE
:使副本為任何複製時缺少主鍵的InnoDB
表格產生不可見的主鍵。如需更多資訊,請參閱 第 15.1.20.11 節「產生的不可見主鍵」。GENERATE
與群組複製不相容;您可以使用ON
、OFF
或STREAM
。
只要來源支援 GIPK 且副本使用 MySQL 8.0.32 或更新版本,MySQL 複製就支援僅在來源或副本表格上產生不可見主鍵的差異。如果您在副本上使用 GIPK,且來源使用較早版本的 MySQL,則不支援除了副本上額外的 GIPK 之外的這種結構描述差異,並且可能會導致複製錯誤。
對於多來源複製,將
REQUIRE_TABLE_PRIMARY_KEY_CHECK
設定為ON
或OFF
,可讓副本針對不同來源的複製通道標準化行為,並為sql_require_primary_key
維持一致的設定。使用ON
可防止在多個來源更新相同的表格時意外遺失主鍵。使用OFF
則允許可以操作主鍵的來源與無法操作主鍵的來源一起運作。在有多個副本的情況下,當
REQUIRE_TABLE_PRIMARY_KEY_CHECK
設定為GENERATE
時,特定副本新增的已產生隱形主鍵與其他任何副本上新增的此類主鍵無關。這表示,如果正在使用產生的隱形主鍵,則無法保證不同副本上產生的主鍵欄位中的值相同。在故障轉移到此類副本時,這可能會造成問題。當
PRIVILEGE_CHECKS_USER
為NULL
(預設值) 時,使用者帳戶不需要管理員層級權限即可設定受限制的工作階段變數。將此選項設定為NULL
以外的值表示,當REQUIRE_TABLE_PRIMARY_KEY_CHECK
為ON
、OFF
或GENERATE
時,使用者帳戶不需要工作階段管理員層級權限即可設定受限制的工作階段變數 (例如sql_require_primary_key
),避免需要授予該帳戶此類權限。如需更多資訊,請參閱 第 19.3.3 節「複製權限檢查」。讓副本嘗試使用基於 GTID 的複製的自動定位功能連線到來源,而不是基於二進位日誌檔的位置。此選項用於使用基於 GTID 的複製來啟動副本。預設值為 0,表示不使用 GTID 自動定位和基於 GTID 的複製。只有在複製 SQL (applier) 執行緒和複製 I/O (receiver) 執行緒都已停止時,才能將此選項與
CHANGE REPLICATION SOURCE TO
一起使用。副本和來源都必須啟用 GTID (
GTID_MODE=ON
、ON_PERMISSIVE,
或副本上的OFF_PERMISSIVE
,以及來源上的GTID_MODE=ON
)。SOURCE_LOG_FILE
、SOURCE_LOG_POS
、RELAY_LOG_FILE
和RELAY_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 自動定位」。您可以透過檢查效能結構描述
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
。可用的演算法為
zlib
、zstd
和uncompressed
,與protocol_compression_algorithms
系統變數相同。演算法可以依任何順序指定,但這不是偏好順序 - 演算法協商過程會嘗試使用zlib
,然後是zstd
,最後是uncompressed
(如果它們被指定)。只有在停用
replica_compressed_protocol
系統變數時,SOURCE_COMPRESSION_ALGORITHMS
的值才適用。如果啟用replica_compressed_protocol
,它會優先於SOURCE_COMPRESSION_ALGORITHMS
,並且如果來源和副本都支援該演算法,則與來源的連線會使用zlib
壓縮。如需更多資訊,請參閱 第 6.2.8 節「連線壓縮控制」。二進位日誌交易壓縮是由
binlog_transaction_compression
系統變數啟動,也可以用於節省頻寬。如果將此功能與連線壓縮結合使用,連線壓縮作用於資料的機會較少,但仍可以壓縮標頭以及未壓縮的事件和交易酬載。如需關於二進位日誌交易壓縮的詳細資訊,請參閱 第 7.4.4.5 節「二進位日誌交易壓縮」。SOURCE_CONNECT_RETRY =
interval
指定在連線到來源逾時後,副本嘗試重新連線之間的時間間隔 (以秒為單位)。預設間隔為 60。
嘗試的次數受限於
SOURCE_RETRY_COUNT
選項。如果使用兩個預設設定,副本會在重新連線嘗試之間等待 60 秒 (SOURCE_CONNECT_RETRY=60
),並以這個速率持續嘗試重新連線 10 分鐘 (SOURCE_RETRY_COUNT=10
)。這些值記錄在來源中繼資料存放庫中,並顯示在replication_connection_configuration
效能結構描述表格中。SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
如果有一個或多個可用的替代複製來源伺服器 (因此,當有多個共用複製資料的 MySQL 伺服器或伺服器群組時),則啟用複製通道的非同步連線容錯移轉機制。預設值為 0,表示機制未啟用。如需設定此功能的完整資訊和說明,請參閱 第 19.4.9.2 節「副本的非同步連線容錯移轉」。
當由
SOURCE_CONNECT_RETRY
和SOURCE_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 節,「使用非同步連線容錯移轉切換來源和複本」。重要只有在使用 GTID 自動定位時 (
SOURCE_AUTO_POSITION = 1
),才能設定SOURCE_CONNECTION_AUTO_FAILOVER = 1
。當您設定
SOURCE_CONNECTION_AUTO_FAILOVER = 1
時,請將SOURCE_RETRY_COUNT
和SOURCE_CONNECT_RETRY
設定為最小值,僅允許對相同來源進行幾次重試,以防連線失敗是由於暫時的網路中斷所致。否則,非同步連線容錯移轉機制無法立即啟用。合適的值為SOURCE_RETRY_COUNT=3
和SOURCE_CONNECT_RETRY=10
,這會使複本以 10 秒間隔重試連線 3 次。當您設定
SOURCE_CONNECTION_AUTO_FAILOVER = 1
時,複寫中繼資料儲存庫必須包含複寫使用者帳戶的認證,該帳戶可用於連線到複寫通道來源清單上的所有伺服器。該帳戶還必須擁有 Performance Schema 表格的SELECT
權限。這些認證可以使用帶有SOURCE_USER
和SOURCE_PASSWORD
選項的CHANGE REPLICATION SOURCE TO
陳述式來設定。如需更多資訊,請參閱 第 19.4.9 節,「使用非同步連線容錯移轉切換來源和複本」。當您設定
SOURCE_CONNECTION_AUTO_FAILOVER = 1
時,如果此複寫通道位於單一主要模式群組中的 Group Replication 主要伺服器上,則會自動啟用複本的非同步連線容錯移轉。在此功能啟用後,如果正在複寫的主要伺服器離線或進入錯誤狀態,則新的主要伺服器在選出後會在同一通道上開始複寫。如果要使用此功能,則必須在複寫群組中的所有次要伺服器以及任何新加入的成員上設定此複寫通道。(如果伺服器是使用 MySQL 的複製功能佈建的,則所有這些都會自動發生。)如果您不想使用此功能,請使用group_replication_disable_member_action()
函式停用預設啟用的 Group Replication 成員動作mysql_start_failover_channels_if_primary
。如需更多資訊,請參閱 第 19.4.9.2 節,「複本的非同步連線容錯移轉」。
指定複本必須落後於來源的秒數。從來源接收到的事件直到比其在來源上的執行時間至少晚
interval
秒後才會執行。interval
必須是介於 0 到 231−1 的非負整數。預設值為 0。如需更多資訊,請參閱 第 19.4.11 節,「延遲複寫」。當複寫 SQL 執行緒停止時,可以在執行中的複本上執行使用
SOURCE_DELAY
選項的CHANGE REPLICATION SOURCE TO
陳述式。SOURCE_HEARTBEAT_PERIOD =
interval
控制心跳間隔,這會在連線仍然良好且沒有資料的情況下,防止發生連線逾時。心跳訊號會在經過該秒數後傳送到複本,並且每當來源的二進位記錄檔以事件更新時,等待時間就會重置。因此,只有當二進位記錄檔中沒有未傳送的事件的時間長於此時間段時,來源才會傳送心跳訊號。
心跳間隔
interval
是十進位值,範圍為 0 到 4294967 秒,解析度為毫秒;最小的非零值為 0.001。將interval
設定為 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
以將心跳間隔調整為適當的值,以便心跳訊號在連線逾時之前發生。如果您不這樣做,心跳訊號將不會生效,並且如果沒有從來源接收到資料,則複本可能會重複嘗試重新連線,從而產生殭屍傾印執行緒。複寫來源伺服器的主機名稱或 IP 位址。複本使用此位址連線到來源。字串值的最大長度為 255 個字元。
如果您指定
SOURCE_HOST
或SOURCE_PORT
,複本會假設來源伺服器與之前不同(即使選項值與其目前值相同)。在這種情況下,來源二進位記錄檔名和位置的舊值被認為不再適用,因此如果您在陳述式中未指定SOURCE_LOG_FILE
和SOURCE_LOG_POS
,則會將SOURCE_LOG_FILE=''
和SOURCE_LOG_POS=4
無聲地附加到其中。將
SOURCE_HOST=''
設定為 (也就是將其值明確設定為空字串) 與完全不設定SOURCE_HOST
不同。嘗試將SOURCE_HOST
設定為空字串會失敗並出現錯誤。SOURCE_LOG_FILE = '
,source_log_name
'SOURCE_LOG_POS =
source_log_pos
二進位記錄檔名,以及該檔案中的位置,複寫 I/O(接收器)執行緒下次啟動時從該位置開始從來源的二進位記錄檔中讀取。如果您使用的是基於二進位記錄檔位置的複寫,請指定這些選項。
SOURCE_LOG_FILE
必須包含來源伺服器上可用的特定二進位記錄檔的數字後綴,例如,SOURCE_LOG_FILE='binlog.000145'
。字串值的最大長度為 511 個字元。SOURCE_LOG_POS
是複本開始在該檔案中讀取的數字位置。SOURCE_LOG_POS=4
表示二進位記錄檔中事件的開始。如果您指定
SOURCE_LOG_FILE
或SOURCE_LOG_POS
中的任何一個,則不能指定用於 GTID 型複寫的SOURCE_AUTO_POSITION = 1
。如果未指定
SOURCE_LOG_FILE
或SOURCE_LOG_POS
中的任何一個,則複本會使用在發出CHANGE REPLICATION SOURCE TO
之前的複寫 SQL 執行緒的最後座標。這可確保複寫中沒有不連續性,即使複寫 SQL (應用程式) 執行緒相對於複寫 I/O (接收器) 執行緒較晚也是如此。用於連線到複寫來源伺服器的複寫使用者帳戶的密碼。字串值的最大長度為 32 個字元。如果您指定
SOURCE_PASSWORD
,則還需要SOURCE_USER
。CHANGE REPLICATION SOURCE TO
陳述式中複寫使用者帳戶使用的密碼長度限制為 32 個字元。嘗試使用超過 32 個字元的密碼會導致CHANGE REPLICATION SOURCE TO
失敗。密碼會在 MySQL 伺服器的記錄檔、Performance Schema 表格和
SHOW PROCESSLIST
陳述式中遮罩。複本用於連線到複寫來源伺服器的 TCP/IP 連接埠號碼。
注意複寫無法使用 Unix socket 檔案。您必須能夠使用 TCP/IP 連線到複寫來源伺服器。
如果您指定
SOURCE_HOST
或SOURCE_PORT
,複本會假設來源伺服器與之前不同(即使選項值與其目前值相同)。在這種情況下,來源二進位記錄檔名和位置的舊值被認為不再適用,因此如果您在陳述式中未指定SOURCE_LOG_FILE
和SOURCE_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 公鑰提供給複本。設定在連線到來源逾時後,複本嘗試重新連線的最大次數,該逾時由
replica_net_timeout
系統變數決定。如果複本確實需要重新連線,第一次重試會在逾時後立即發生。預設值為 10 次嘗試。嘗試連線的間隔時間由
SOURCE_CONNECT_RETRY
選項指定。如果使用預設設定,複本會在每次嘗試重新連線之間等待 60 秒 (SOURCE_CONNECT_RETRY=60
),並以這個速率持續嘗試重新連線 10 分鐘 (SOURCE_RETRY_COUNT=10
)。將SOURCE_RETRY_COUNT
設定為 0 表示重新連線嘗試次數沒有限制,因此複本會無限期地持續嘗試重新連線。SOURCE_CONNECT_RETRY
和SOURCE_RETRY_COUNT
的值會記錄在來源中繼資料儲存庫中,並顯示在replication_connection_configuration
Performance Schema 表格中。SOURCE_RETRY_COUNT
會取代--master-retry-count
伺服器啟動選項。指定複本是否加密複寫連線。預設值為 0,表示複本不會加密複寫連線。如果設定
SOURCE_SSL=1
,您可以使用SOURCE_SSL_
和xxx
SOURCE_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_
和xxx
SOURCE_TLS_
選項的值最大長度為 511 個字元,但xxx
SOURCE_TLS_CIPHERSUITES
除外,其最大長度為 4000 個字元。SOURCE_SSL_
和xxx
SOURCE_TLS_
選項的功能與 加密連線的命令選項中描述的xxx
--ssl-
和xxx
--tls-
用戶端選項相同。這兩組選項之間的對應關係,以及使用xxx
SOURCE_SSL_
和xxx
SOURCE_TLS_
選項設定安全連線的方式,請參閱第 19.3.1 節「設定複寫以使用加密連線」。xxx
用於連線至複寫來源伺服器的複寫使用者帳戶的使用者名稱。字串值的最大長度為 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.1 節「快取 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 多來源複寫」。
下一個範例說明如何讓複本套用您想要重複的轉送日誌檔案中的交易。若要執行此操作,來源不需要可連線。您可以使用 CHANGE REPLICATION SOURCE TO
來找出您希望複本開始重新套用交易的轉送日誌位置,然後啟動 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 節「跳過交易」。