文件首頁
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.1.1 基於語句和基於列的複製的優點和缺點

每個二進位記錄格式都有其優點和缺點。對於大多數使用者來說,混合複製格式應該提供資料完整性和效能的最佳組合。但是,如果您想在執行某些任務時利用特定於基於語句或基於列的複製格式的功能,您可以使用本節中的資訊,其中提供了它們相對優點和缺點的摘要,以判斷哪種最適合您的需求。

基於語句的複製的優點
  • 經過驗證的技術。

  • 寫入日誌檔的資料較少。當更新或刪除影響多個列時,這會導致日誌檔所需的儲存空間少得多。這也意味著可以更快地完成備份和從備份還原。

  • 日誌檔包含所有進行變更的陳述式,因此可用於稽核資料庫。

基於語句的複製的缺點
基於列的複寫的優點
  • 可以複寫所有變更。這是最安全的複寫形式。

    注意

    更新 mysql 系統綱要中資訊的陳述式,例如 GRANTREVOKE 以及對觸發程序、預存常式(包括預存程序)和檢視的操控,都會使用基於陳述式的複寫複寫到複本。

    對於諸如 CREATE TABLE ... SELECT 之類的陳述式,會從表格定義產生 CREATE 陳述式,並使用基於陳述式的格式進行複寫,而列插入則使用基於列的格式進行複寫。

  • 在來源上需要較少的列鎖定,因此對於下列類型的陳述式可以實現更高的並行性

  • 對於任何 INSERTUPDATEDELETE 陳述式,複本上需要的列鎖定更少。

基於列的複寫的缺點
  • RBR 可能會產生更多必須記錄的資料。若要複寫 DML 陳述式 (例如 UPDATEDELETE 陳述式),基於陳述式的複寫只會將陳述式寫入二進位日誌。相反,基於列的複寫會將每個變更的列寫入二進位日誌。如果陳述式變更許多列,基於列的複寫可能會將顯著更多的資料寫入二進位日誌;即使對於回滾的陳述式也是如此。這也意味著進行和還原備份可能需要更多時間。此外,二進位日誌會被鎖定更長的時間來寫入資料,這可能會導致並行問題。使用 binlog_row_image=minimal 來大幅減少缺點。

  • 產生大型 BLOB 值的決定性可載入函式,使用基於列的複寫比使用基於陳述式的複寫需要更長的時間來複寫。這是因為會記錄 BLOB 資料行值,而不是產生資料的陳述式。

  • 您無法在複本上看到從來源接收和執行的陳述式。但是,您可以使用帶有 --base64-output=DECODE-ROWS--verbose 選項的 mysqlbinlog 查看變更的資料。

    或者,使用 binlog_rows_query_log_events 變數,如果啟用,則在使用 -vv 選項時,會將包含陳述式的 Rows_query 事件新增至 mysqlbinlog 輸出。

  • 對於使用 MyISAM 儲存引擎的表格,當將其作為基於列的事件套用至二進位日誌時,在複本上對 INSERT 陳述式需要比將它們作為陳述式套用時更強大的鎖定。這表示當使用基於列的複寫時,不支援在 MyISAM 表格上同時插入。