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


MySQL 8.4 參考手冊  /  ...  /  複寫中繼資料儲存庫

19.2.4.2 複寫中繼資料儲存庫

複本伺服器會建立兩個複寫中繼資料儲存庫,即連線中繼資料儲存庫和套用程式中繼資料儲存庫。複寫中繼資料儲存庫會在複本伺服器關閉後仍然存在。如果正在使用基於二進位日誌檔位置的複寫,則當複本重新啟動時,它會讀取這兩個儲存庫,以判斷先前在從來源讀取二進位日誌以及處理自己的中繼日誌時的進度。如果正在使用基於 GTID 的複寫,則複本不會將複寫中繼資料儲存庫用於該目的,但確實需要它們來儲存其中包含的其他中繼資料。

  • 複本的連線中繼資料儲存庫包含複寫 I/O (接收器) 執行緒需要連線到複寫來源伺服器並從來源的二進位日誌擷取交易的資訊。此儲存庫中的中繼資料包括連線組態、複寫使用者帳戶詳細資料、連線的 SSL 設定,以及複寫接收器執行緒目前正在從來源的二進位日誌讀取的檔案名稱和位置。

  • 複本的套用程式中繼資料儲存庫包含複寫 SQL (套用程式) 執行緒需要從複本的中繼日誌讀取和套用交易的資訊。此儲存庫中的中繼資料包括複寫套用程式執行緒已在中繼日誌中執行交易的檔案名稱和位置,以及來源的二進位日誌中的等效位置。它還包括套用交易過程的中繼資料,例如工作執行緒的數量以及通道的 PRIVILEGE_CHECKS_USER 帳戶。

連線中繼資料儲存庫會寫入 mysql 系統結構描述中的 slave_master_info 表格,而套用程式中繼資料儲存庫會寫入 mysql 系統結構描述中的 slave_relay_log_info 表格。如果 mysqld 無法初始化複寫中繼資料儲存庫的表格,則會發出警告訊息,但允許複本繼續啟動。這種情況最有可能發生在從不支援使用表格作為儲存庫的 MySQL 版本升級到支援使用表格的版本時。

重要
  1. 請勿嘗試手動更新或插入 mysql.slave_master_infomysql.slave_relay_log_info 表格中的資料列。這樣做可能會導致未定義的行為,且不受支援。在複製程序進行中時,不允許執行任何需要在 slave_master_infoslave_relay_log_info 表格上取得寫入鎖定的陳述式(雖然任何時候都允許執行僅讀取的陳述式)。

  2. 連線中繼資料儲存庫表格 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_infomysql.slave_relay_log_info 表格是使用 InnoDB 交易式儲存引擎建立的。對套用程式中繼資料儲存庫表格的更新會與交易一起提交,這表示記錄在該儲存庫中的副本進度資訊,即使在伺服器意外停止的情況下,也始終與已套用至資料庫的資訊保持一致。有關副本上最能抵禦意外停止的設定組合資訊,請參閱 第 19.4.2 節「處理副本的意外停止」

當您備份副本的資料或傳輸其資料快照以建立新的副本時,請確保您包含包含複製中繼資料儲存庫的 mysql.slave_master_infomysql.slave_relay_log_info 表格。對於複製作業,請注意,當複製中繼資料儲存庫建立為表格時,它們會在複製作業期間複製到接收者,但當它們建立為檔案時,則不會複製。當使用二進位記錄檔位置複製時,重新啟動還原、複製或複製的副本後,需要複製中繼資料儲存庫才能恢復複製。如果您沒有中繼記錄檔,但仍然有套用程式中繼資料儲存庫,您可以檢查它以確定複製 SQL 執行緒在來源的二進位記錄檔中已執行多遠。然後,您可以使用帶有 SOURCE_LOG_FILESOURCE_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 TABLEALTER 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