文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  複製中繼資料儲存庫

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 密碼(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