複本伺服器會建立兩個複寫中繼資料儲存庫,即連線中繼資料儲存庫和套用程式中繼資料儲存庫。複寫中繼資料儲存庫會在複本伺服器關閉後仍然存在。如果正在使用基於二進位日誌檔位置的複寫,則當複本重新啟動時,它會讀取這兩個儲存庫,以判斷先前在從來源讀取二進位日誌以及處理自己的中繼日誌時的進度。如果正在使用基於 GTID 的複寫,則複本不會將複寫中繼資料儲存庫用於該目的,但確實需要它們來儲存其中包含的其他中繼資料。
複本的連線中繼資料儲存庫包含複寫 I/O (接收器) 執行緒需要連線到複寫來源伺服器並從來源的二進位日誌擷取交易的資訊。此儲存庫中的中繼資料包括連線組態、複寫使用者帳戶詳細資料、連線的 SSL 設定,以及複寫接收器執行緒目前正在從來源的二進位日誌讀取的檔案名稱和位置。
複本的套用程式中繼資料儲存庫包含複寫 SQL (套用程式) 執行緒需要從複本的中繼日誌讀取和套用交易的資訊。此儲存庫中的中繼資料包括複寫套用程式執行緒已在中繼日誌中執行交易的檔案名稱和位置,以及來源的二進位日誌中的等效位置。它還包括套用交易過程的中繼資料,例如工作執行緒的數量以及通道的
PRIVILEGE_CHECKS_USER
帳戶。
連線中繼資料儲存庫會寫入 mysql
系統結構描述中的 slave_master_info
表格,而套用程式中繼資料儲存庫會寫入 mysql
系統結構描述中的 slave_relay_log_info
表格。如果 mysqld 無法初始化複寫中繼資料儲存庫的表格,則會發出警告訊息,但允許複本繼續啟動。這種情況最有可能發生在從不支援使用表格作為儲存庫的 MySQL 版本升級到支援使用表格的版本時。
請勿嘗試手動更新或插入
mysql.slave_master_info
或mysql.slave_relay_log_info
表格中的資料列。這樣做可能會導致未定義的行為,且不受支援。在複製程序進行中時,不允許執行任何需要在slave_master_info
和slave_relay_log_info
表格上取得寫入鎖定的陳述式(雖然任何時候都允許執行僅讀取的陳述式)。連線中繼資料儲存庫表格
mysql.slave_master_info
的存取權限應限制為資料庫管理員,因為它包含用於連線至來源的複製使用者帳戶名稱和密碼。請使用受限的存取模式來保護包含此表格的資料庫備份。您可以從連線中繼資料儲存庫中清除複製使用者帳戶憑證,並改為在啟動複製通道時,一律使用START REPLICA
陳述式來提供。這種方法意味著複製通道總是需要操作員干預才能重新啟動,但帳戶名稱和密碼不會記錄在複製中繼資料儲存庫中。
RESET REPLICA
會清除複製中繼資料儲存庫中的資料,但複製連線參數除外(視 MySQL 伺服器版本而定)。詳細資訊,請參閱 RESET REPLICA
的描述。
您可以設定 CHANGE REPLICATION SOURCE TO
陳述式的 GTID_ONLY
選項,以停止複製通道將檔案名稱和檔案位置儲存在複製中繼資料儲存庫中。這可以避免在基於 GTID 的複製實際上不需要讀寫表格的情況下進行讀寫。使用 GTID_ONLY
設定時,當副本在交易中排隊和套用事件,或當複製執行緒停止和啟動時,不會更新連線中繼資料儲存庫和套用程式中繼資料儲存庫。檔案位置會追蹤在記憶體中,如果需要,可以使用 SHOW REPLICA STATUS
來檢視。複製中繼資料儲存庫僅在以下情況下同步:
發出
CHANGE REPLICATION SOURCE TO
陳述式時。發出
RESET REPLICA
陳述式時。RESET REPLICA ALL
會刪除而非更新儲存庫,因此它們會隱式同步。初始化複製通道時。
如果複製中繼資料儲存庫從檔案移動到表格時。
將複製中繼資料儲存庫建立為表格是預設值;不建議使用檔案。
mysql.slave_master_info
和 mysql.slave_relay_log_info
表格是使用 InnoDB
交易式儲存引擎建立的。對套用程式中繼資料儲存庫表格的更新會與交易一起提交,這表示記錄在該儲存庫中的副本進度資訊,即使在伺服器意外停止的情況下,也始終與已套用至資料庫的資訊保持一致。有關副本上最能抵禦意外停止的設定組合資訊,請參閱 第 19.4.2 節「處理副本的意外停止」。
當您備份副本的資料或傳輸其資料快照以建立新的副本時,請確保您包含包含複製中繼資料儲存庫的 mysql.slave_master_info
和 mysql.slave_relay_log_info
表格。對於複製作業,請注意,當複製中繼資料儲存庫建立為表格時,它們會在複製作業期間複製到接收者,但當它們建立為檔案時,則不會複製。當使用二進位記錄檔位置複製時,重新啟動還原、複製或複製的副本後,需要複製中繼資料儲存庫才能恢復複製。如果您沒有中繼記錄檔,但仍然有套用程式中繼資料儲存庫,您可以檢查它以確定複製 SQL 執行緒在來源的二進位記錄檔中已執行多遠。然後,您可以使用帶有 SOURCE_LOG_FILE
和 SOURCE_LOG_POS
選項的 CHANGE REPLICATION SOURCE TO
陳述式,告知副本從該點重新讀取來源的二進位記錄檔(前提是來源上仍然存在所需的二進位記錄檔)。
另一個額外的儲存庫,即套用程式工作者中繼資料儲存庫,主要用於內部使用,並保留多執行緒副本上工作者執行緒的狀態資訊。套用程式工作者中繼資料儲存庫包含每個工作者執行緒的中繼記錄檔和來源二進位記錄檔的名稱和位置。如果將套用程式中繼資料儲存庫建立為表格(這是預設值),則會將套用程式工作者中繼資料儲存庫寫入 mysql.slave_worker_info
表格。如果將套用程式中繼資料儲存庫寫入檔案,則會將套用程式工作者中繼資料儲存庫寫入 worker-relay-log.info
檔案。對於外部使用,工作者執行緒的狀態資訊會顯示在效能綱要 replication_applier_status_by_worker
表格中。
複製中繼資料儲存庫最初包含類似於 SHOW REPLICA STATUS
陳述式輸出中顯示的資訊,這會在第 15.4.2 節「用於控制副本伺服器的 SQL 陳述式」中討論。此後,複製中繼資料儲存庫中新增了更多資訊,這些資訊不會由 SHOW REPLICA STATUS
陳述式顯示。
對於連線中繼資料儲存庫,下表顯示 mysql.slave_master_info
表格中的欄位、SHOW REPLICA STATUS
顯示的欄位,以及已棄用的 master.info
檔案中的行的對應關係。
slave_master_info 表格欄位 |
SHOW REPLICA STATUS 欄位 |
master.info 檔案行 |
描述 |
---|---|---|---|
Number_of_lines |
[無] | 1 | 表格中的欄位數 (或檔案中的行數) |
Master_log_name |
Source_Log_File |
2 | 目前從來源讀取的二進位記錄檔名稱 |
Master_log_pos |
Read_Source_Log_Pos |
3 | 已從來源讀取的二進位記錄檔中的目前位置 |
Host |
Source_Host |
4 | 複製來源伺服器的主機名稱 |
User_name |
Source_User |
5 | 用於連線至來源的複製使用者帳戶名稱 |
User_password |
Password (不顯示在 SHOW REPLICA STATUS 中) |
6 | 用於連線至來源的複製使用者帳戶密碼 |
Port |
Source_Port |
7 | 用於連線至複製來源伺服器的網路連接埠 |
Connect_retry |
Connect_Retry |
8 | 副本在嘗試重新連線至來源之前等待的時間 (以秒為單位) |
Enabled_ssl |
Source_SSL_Allowed |
9 | 副本是否支援 SSL 連線 |
Ssl_ca |
Source_SSL_CA_File |
10 | 用於憑證授權單位 (CA) 憑證的檔案 |
Ssl_capath |
Source_SSL_CA_Path |
11 | 憑證授權單位 (CA) 憑證的路徑 |
Ssl_cert |
Source_SSL_Cert |
12 | SSL 憑證檔案的名稱 |
Ssl_cipher |
Source_SSL_Cipher |
13 | 用於 SSL 連線交握的可能密碼清單 |
Ssl_key |
Source_SSL_Key |
14 | SSL 金鑰檔案的名稱 |
Ssl_verify_server_cert |
Source_SSL_Verify_Server_Cert |
15 | 是否驗證伺服器憑證 |
Heartbeat |
[無] | 16 | 複製心跳間隔,以秒為單位 |
Bind |
Source_Bind |
17 | 應該使用副本的哪個網路介面來連線至來源 |
Ignored_server_ids |
Replicate_Ignore_Server_Ids |
18 | 要忽略的伺服器 ID 清單。請注意,對於 Ignored_server_ids ,伺服器 ID 清單前面會加上要忽略的伺服器 ID 總數。 |
Uuid |
Source_UUID |
19 | 來源的唯一 ID |
Retry_count |
Source_Retry_Count |
20 | 允許的最大重新連線嘗試次數 |
Ssl_crl |
[無] | 21 | SSL 憑證撤銷清單檔案的路徑 |
Ssl_crlpath |
[無] | 22 | 包含 SSL 憑證撤銷清單檔案的目錄路徑 |
Enabled_auto_position |
Auto_position |
23 | 是否使用 GTID 自動定位 |
Channel_name |
Channel_name |
24 | 複製通道的名稱 |
Tls_version |
Source_TLS_Version |
25 | 來源上的 TLS 版本 |
Public_key_path |
Source_public_key_path |
26 | RSA 公開金鑰檔案的名稱 |
Get_public_key |
Get_source_public_key |
27 | 是否從來源請求 RSA 公開金鑰 |
Network_namespace |
Network_namespace |
28 | 網路命名空間 |
Master_compression_algorithm |
[無] | 29 | 連線至來源時允許的壓縮演算法 |
Master_zstd_compression_level |
[無] | 30 | zstd 壓縮層級 |
Tls_ciphersuites |
[無] | 31 | 適用於 TLSv1.3 的允許密碼套件 |
Source_connection_auto_failover |
[無] | 32 | 是否啟動非同步連線容錯移轉機制 |
Gtid_only |
[無] | 33 | 通道是否僅使用 GTID,而不保存位置 |
對於套用程式中繼資料儲存庫,下表顯示 mysql.slave_relay_log_info
表格中的欄位、SHOW REPLICA STATUS
顯示的欄位,以及已棄用的 relay-log.info
檔案中的行的對應關係。
slave_relay_log_info 表格欄位 |
SHOW REPLICA STATUS 欄位 |
relay-log.info 檔案中的行 |
描述 |
---|---|---|---|
Number_of_lines |
[無] | 1 | 表格中的欄位數或檔案中的行數 |
Relay_log_name |
Relay_Log_File |
2 | 目前的中繼記錄檔名稱 |
Relay_log_pos |
Relay_Log_Pos |
3 | 中繼記錄檔中的目前位置;已在副本資料庫上執行至此位置的事件 |
Master_log_name |
Relay_Source_Log_File |
4 | 從中讀取中繼記錄檔中事件的來源二進位記錄檔名稱 |
Master_log_pos |
Exec_Source_Log_Pos |
5 | 在副本上執行的事件在來源二進位記錄檔中的等效位置 |
Sql_delay |
SQL_Delay |
6 | 複本必須落後來源的秒數 |
Number_of_workers |
[無] | 7 | 用於平行套用複寫交易的工作執行緒數量 |
Id |
[無] | 8 | 用於內部用途的 ID;目前這個值總是 1 |
Channel_name |
Channel_name |
9 | 複製通道的名稱 |
Privilege_checks_username |
[無] | 10 | 通道的 PRIVILEGE_CHECKS_USER 帳戶的使用者名稱 |
Privilege_checks_hostname |
[無] | 11 | 通道的 PRIVILEGE_CHECKS_USER 帳戶的主機名稱 |
Require_row_format |
[無] | 12 | 通道是否只接受基於列的事件 |
Require_table_primary_key_check |
[無] | 13 | 通道關於表格在 CREATE TABLE 和 ALTER TABLE 操作中是否必須具有主鍵的政策 |
Assign_gtids_to_anonymous_transactions_type |
[無] | 14 | 如果通道使用複本的本機 UUID,為尚未擁有 GTID 的複寫交易指派 GTID,則此值為 LOCAL ;如果通道使用手動設定的 UUID 執行此操作,則此值為 UUID 。如果通道在這種情況下不指派 GTID,則此值為 OFF 。 |
Assign_gtids_to_anonymous_transactions_value |
[無] | 15 | 指派給匿名交易的 GTID 中使用的 UUID |