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
陳述式的某些選項,您必須在發出 CHANGE REPLICATION SOURCE TO
陳述式之前發出 STOP REPLICA
陳述式 (之後發出 START REPLICA
陳述式)。有時,您只需要停止複寫 SQL (應用程式) 執行緒或複寫 I/O (接收器) 執行緒,而不是兩者都停止。
當應用程式執行緒停止時,您可以使用
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
,即使應用程式執行緒正在執行。在發出使用
SOURCE_AUTO_POSITION = 1
、GTID_ONLY = 1
或ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
的CHANGE REPLICATION SOURCE TO
陳述式之前,必須停止接收器執行緒和應用程式執行緒。
您可以使用 SHOW REPLICA STATUS
來檢查複寫應用程式執行緒和複寫接收器執行緒的目前狀態。請注意,群組複寫應用程式通道 (group_replication_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
)。您可以在此類情況下避免這種情況,方法是確保在執行此類CHANGE REPLICATION SOURCE TO
陳述式之前,Replica_open_temp_tables
系統狀態變數的值等於 0。當使用多執行緒複本 (
replica_parallel_workers
> 0) 時,停止複本可能會導致從中繼記錄檔執行的交易序列中出現間隙,無論複本是有意停止還是以其他方式停止。在 MySQL 8.4 中,可以使用 GTID 自動定位來解決這些問題。
以下選項可用於 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 的 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
預設為關閉非同步複製通道,但對於群組複製通道則預設為啟用,且無法關閉。對於具有此設定的複製通道,仍然會追蹤記憶體中的檔案位置,並且為了除錯目的,可以在錯誤訊息和諸如
SHOW REPLICA STATUS
陳述式等介面中觀察到檔案位置(如果它們過期,則會顯示為無效)。但是,在基於 GTID 的複製實際上不需要它們的情況下,包括交易排隊和應用程式處理,可以避免持久化和檢查檔案位置所需的寫入和讀取。僅當複製 SQL (applier) 執行緒和複製 I/O (receiver) 執行緒都停止時,才能使用此選項。若要為複製通道設定
GTID_ONLY = 1
,則必須在伺服器上使用 GTID (gtid_mode = ON
),並且必須在來源端使用基於列的二進位日誌(不支援基於陳述式的複製)。必須為複製通道設定選項REQUIRE_ROW_FORMAT = 1
和SOURCE_AUTO_POSITION = 1
。當設定
GTID_ONLY = 1
時,如果系統變數針對伺服器設定為零,則副本會使用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 (執行) 執行緒和複製 I/O (接收器) 執行緒都停止時,此選項才能與
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 自動定位」。您可以透過檢查 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
。可用的演算法有
zlib
、zstd
和uncompressed
,與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 節,「二進位日誌交易壓縮」。指定在與來源連線逾時後,副本嘗試重新連線的間隔秒數。預設間隔為 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_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
權限。可以使用CHANGE REPLICATION SOURCE TO
陳述式和SOURCE_USER
和SOURCE_PASSWORD
選項來設定這些認證。如需更多資訊,請參閱 第 19.4.9 節,「使用非同步連線容錯移轉切換來源和副本」。當您設定
SOURCE_CONNECTION_AUTO_FAILOVER = 1
時,如果此複寫通道位於單一主要模式的群組複寫主要伺服器上,則會自動啟用副本的非同步連線容錯移轉。在此功能啟用後,如果正在複寫的主要伺服器離線或進入錯誤狀態,則新的主要伺服器會在選出時在同一通道上開始複寫。如果您想要使用此功能,則此複寫通道也必須在複寫群組中的所有次要伺服器以及任何新加入的成員上設定。(如果使用 MySQL 的複製功能佈建伺服器,則所有這些都會自動發生。)如果您不想使用此功能,請使用group_replication_disable_member_action()
函式停用預設啟用的群組複寫成員動作mysql_start_failover_channels_if_primary
,來停用此功能。如需更多資訊,請參閱 第 19.4.9.2 節,「副本的非同步連線容錯移轉」。
指定副本必須落後來源多少秒。從來源接收的事件只有在比來源上的執行時間晚至少
間隔
秒後才會執行。間隔
必須是 0 到 231−1 範圍內的非負整數。預設值為 0。如需更多資訊,請參閱 第 19.4.11 節,「延遲複寫」。使用
SOURCE_DELAY
選項的CHANGE REPLICATION SOURCE TO
陳述式可以在複寫 SQL 執行緒停止時於正在執行的副本上執行。控制心跳間隔,如果連線仍然良好,則在沒有資料的情況下會停止連線逾時。在該秒數後會將心跳訊號傳送到副本,並且每當來源的二進位日誌以事件更新時,等待時間就會重置。因此,只有在二進位日誌檔案中沒有未傳送的事件超過此時間段時,來源才會傳送心跳。
心跳間隔
間隔
是一個十進位值,範圍為 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
以將心跳間隔調整為適當的值,以便在連線逾時之前發生心跳訊號。如果您不這樣做,則心跳訊號不會有任何作用,並且如果沒有從來源接收到資料,則副本可能會重複嘗試重新連線,進而建立殭屍傾印執行緒。複寫來源伺服器的主機名稱或 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_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
其中之一,則不能指定SOURCE_AUTO_POSITION = 1
,這用於基於 GTID 的複製。如果未指定
SOURCE_LOG_FILE
或SOURCE_LOG_POS
,則副本會使用在發出CHANGE REPLICATION SOURCE TO
之前,複製 SQL 線程的最後座標。這樣可確保複製不會中斷,即使複製 SQL (applier) 線程比複製 I/O (receiver) 線程慢也是如此。用於連接到複製來源伺服器的複製使用者帳戶密碼。字串值的最大長度為 32 個字元。如果您指定
SOURCE_PASSWORD
,則還必須指定SOURCE_USER
。CHANGE REPLICATION SOURCE TO
陳述式中用於複製使用者帳戶的密碼長度限制為 32 個字元。嘗試使用超過 32 個字元的密碼會導致CHANGE REPLICATION SOURCE TO
失敗。密碼在 MySQL Server 的日誌、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.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 節「跳過交易」。