使用 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.20 節「複寫和 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
) 以篩選出複本上的此資料庫。