文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 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.3.3.3 從複寫權限檢查失敗中恢復

如果對 PRIVILEGE_CHECKS_USER 帳戶的權限檢查失敗,則不會執行交易,並且該通道的複寫會停止。錯誤的詳細資訊和最後套用的交易會記錄在效能結構描述 replication_applier_status_by_worker 資料表中。請按照以下步驟從錯誤中恢復

  1. 識別導致錯誤的複寫事件,並驗證該事件是否如預期且來自受信任的來源。您可以使用 mysqlbinlog 來擷取和顯示錯誤時間前後記錄的事件。如需執行此操作的說明,請參閱 第 9.5 節「時間點(增量)恢復」

  2. 如果複寫的事件不是預期的,或不是來自已知且受信任的來源,請調查原因。如果您可以識別事件發生的原因,並且沒有安全性考量,請依照以下說明修正錯誤。

  3. 如果 PRIVILEGE_CHECKS_USER 帳戶應該被允許執行交易,但設定錯誤,請將缺少的權限授與該帳戶,使用 FLUSH PRIVILEGES 語句,或執行 mysqladmin flush-privilegesmysqladmin reload 命令來重新載入授與資料表,然後重新啟動通道的複寫。

  4. 如果需要執行交易,並且您已驗證該交易是受信任的,但 PRIVILEGE_CHECKS_USER 帳戶通常不應該擁有此權限,您可以暫時將所需的權限授與 PRIVILEGE_CHECKS_USER 帳戶。在套用複寫的事件後,從帳戶移除該權限,並採取任何必要的步驟,以確保在可避免的情況下,不會再次發生該事件。

  5. 如果該交易是僅應在來源伺服器上執行,而不應在複本上執行,或者僅應在單一複寫群組成員上執行的管理動作,請在停止複寫的伺服器上略過該交易,然後發出 START REPLICA 以重新啟動通道上的複寫。為避免未來發生這種情況,您可以在這些管理陳述式之前發出 SET sql_log_bin = 0,並在其之後發出 SET sql_log_bin = 1,使其不會記錄在來源伺服器上。

  6. 如果該交易是 DDL 或 DML 陳述式,不應在來源伺服器或複本上執行,請在停止複寫的伺服器上略過該交易,在最初執行該交易的伺服器上手動還原該交易,然後發出 START REPLICA 以重新啟動複寫。

若要略過交易,如果正在使用 GTID,請提交一個具有失敗交易 GTID 的空交易,例如

SET GTID_NEXT='aaa-bbb-ccc-ddd:N';
BEGIN;
COMMIT;
SET GTID_NEXT='AUTOMATIC';

如果未使用 GTID,請發出 SET GLOBAL sql_replica_skip_counter 陳述式以略過事件。如需使用此替代方法以及更多關於略過交易的詳細資訊,請參閱 章節 19.1.7.3,「略過交易」