使用 CHANGE REPLICATION SOURCE TO
陳述式指定為複製通道的 PRIVILEGE_CHECKS_USER
帳號的使用者帳號,必須具有 REPLICATION_APPLIER
權限,否則複製套用程式執行緒不會啟動。如第 19.3.3 節「複製權限檢查」中所述,該帳號需要進一步的權限,足以套用複製通道上預期的所有交易。這些權限僅在執行相關交易時才會檢查。
強烈建議針對使用 PRIVILEGE_CHECKS_USER
帳號保護的複製通道使用列基礎二進位日誌 (binlog_format=ROW
)。對於陳述式基礎二進位日誌,PRIVILEGE_CHECKS_USER
帳號可能需要一些管理員層級的權限才能成功執行交易。REQUIRE_ROW_FORMAT
設定可以套用至受保護的通道,這會限制通道執行需要這些權限的事件。
REPLICATION_APPLIER
權限明確或隱含地允許 PRIVILEGE_CHECKS_USER
帳號執行複製執行緒需要執行的下列操作:
設定系統變數
gtid_next
、original_commit_timestamp
、original_server_version
、immediate_server_version
和pseudo_replica_mode
的值,以便在執行交易時套用適當的中繼資料和行為。執行內部使用的
BINLOG
陳述式以套用 mysqlbinlog 的輸出,前提是該帳戶也具有這些陳述式中表格和操作的權限。更新系統表格
mysql.gtid_executed
、mysql.slave_relay_log_info
、mysql.slave_worker_info
和mysql.slave_master_info
,以更新複寫中繼資料。(如果事件為了其他目的明確存取這些表格,您必須授予這些表格適當的權限。)套用二進制日誌
Table_map_log_event
,它提供表格中繼資料,但不會對資料庫進行任何變更。
如果 CHANGE REPLICATION SOURCE TO
陳述式的 REQUIRE_TABLE_PRIMARY_KEY_CHECK
選項設定為預設值 STREAM
,則 PRIVILEGE_CHECKS_USER
帳戶需要足夠的權限來設定受限制的工作階段變數,以便它可以變更 sql_require_primary_key
系統變數的值,在工作階段期間與來源複寫的設定相符。SESSION_VARIABLES_ADMIN
權限賦予該帳戶此功能。此權限也允許該帳戶套用使用 --disable-log-bin
選項建立的 mysqlbinlog 輸出。如果您將 REQUIRE_TABLE_PRIMARY_KEY_CHECK
設定為 ON
或 OFF
,則複本在複寫操作中始終使用該值作為 sql_require_primary_key
系統變數,因此不需要這些工作階段管理層級的權限。
如果正在使用表格加密,則 table_encryption_privilege_check
系統變數設定為 ON
,且任何事件中涉及的表格空間的加密設定與套用伺服器的預設加密設定(由 default_table_encryption
系統變數指定)不同,則 PRIVILEGE_CHECKS_USER
帳戶需要 TABLE_ENCRYPTION_ADMIN
權限才能覆寫預設加密設定。強烈建議您不要授予此權限。相反地,請確保複本上的預設加密設定與其複寫的表格空間的加密狀態相符,且複寫群組成員具有相同的預設加密設定,如此就不需要此權限。
為了從中繼日誌執行特定的複寫交易,或根據需要從 mysqlbinlog 輸出執行交易,PRIVILEGE_CHECKS_USER
帳戶必須具有以下權限
如果正在使用基於陳述式的二進制日誌記錄(不建議與 PRIVILEGE_CHECKS_USER
帳戶一起使用),對於諸如 BEGIN
或 COMMIT
之類的交易控制陳述式或以陳述式格式記錄的 DML(記錄為 Query_log_event
),PRIVILEGE_CHECKS_USER
帳戶需要執行事件中包含的陳述式的權限。
如果需要在複寫通道上執行 LOAD DATA
操作,請使用基於列的二進制日誌記錄 (binlog_format=ROW
)。使用此日誌記錄格式,執行事件不需要 FILE
權限,因此不要授予 PRIVILEGE_CHECKS_USER
帳戶此權限。強烈建議在使用 PRIVILEGE_CHECKS_USER
帳戶保護的複寫通道中使用基於列的二進制日誌記錄。如果為通道設定 REQUIRE_ROW_FORMAT
,則必須使用基於列的二進制日誌記錄。Format_description_log_event
會刪除由 LOAD DATA
事件建立的任何暫存檔,而不會進行權限檢查。如需更多資訊,請參閱 第 19.5.1.19 節, 「複寫和 LOAD DATA」。
如果 init_replica
系統變數設定為指定在複寫 SQL 線程啟動時要執行的一個或多個 SQL 陳述式,則 PRIVILEGE_CHECKS_USER
帳戶必須具有執行這些陳述式所需的權限。
建議您永遠不要將任何 ACL 權限授予 PRIVILEGE_CHECKS_USER
帳戶,包括 CREATE USER
、CREATE ROLE
、DROP ROLE
和 GRANT OPTION
,並且不允許該帳戶更新 mysql.user
表格。有了這些權限,該帳戶可用於在伺服器上建立或修改使用者帳戶。為了避免在來源伺服器上發出的 ACL 陳述式被複寫到受保護的通道以執行(在沒有這些權限的情況下會失敗),您可以在所有 ACL 陳述式之前發出 SET sql_log_bin = 0
,並在之後發出 SET sql_log_bin = 1
,以從來源的二進制日誌中省略這些陳述式。或者,您可以在執行所有 ACL 陳述式之前設定專用的目前資料庫,並使用複寫篩選器 (--binlog-ignore-db
) 在複本上篩選掉此資料庫。