LOAD DATA
被認為對於基於陳述式的日誌記錄是不安全的 (請參閱 第 19.2.1.3 節,「在二進制日誌中判斷安全和不安全的陳述式」)。當設定 binlog_format=MIXED
時,該陳述式會以基於列的格式記錄。當設定 binlog_format=STATEMENT
時,請注意,與其他不安全的陳述式不同,LOAD DATA
不會產生警告。
如果您使用 LOAD DATA
搭配 binlog_format=STATEMENT
,則將套用變更的每個副本都會建立一個包含資料的暫存檔。然後,副本會使用 LOAD DATA
陳述式來套用變更。即使來源上啟用了二進制日誌加密,此暫存檔也不會加密。如果需要加密,請改用基於列或混合的二進制日誌格式,這樣副本就不會建立暫存檔。
如果使用 PRIVILEGE_CHECKS_USER
帳戶來協助保護複寫通道(請參閱第 19.3.3 節「複寫權限檢查」),強烈建議您使用基於列的二進制日誌 (binlog_format=ROW
) 記錄 LOAD DATA
操作。如果為通道設定了 REQUIRE_ROW_FORMAT
,則必須使用基於列的二進制日誌。使用此記錄格式,執行事件不需要 FILE
權限,因此請勿授予 PRIVILEGE_CHECKS_USER
帳戶此權限。如果您需要從涉及以陳述式格式記錄的 LOAD DATA INFILE
操作的複寫錯誤中恢復,並且複製的事件是受信任的,您可以暫時授予 PRIVILEGE_CHECKS_USER
帳戶 FILE
權限,並在複製的事件套用後將其移除。
當 mysqlbinlog 讀取以陳述式為基礎格式記錄的 LOAD DATA
陳述式的日誌事件時,會在臨時目錄中建立一個產生的本地檔案。這些臨時檔案不會由 mysqlbinlog 或任何其他 MySQL 程式自動移除。如果您使用帶有以陳述式為基礎的二進制日誌記錄的 LOAD DATA
陳述式,則在您不再需要陳述式日誌後,應自行刪除臨時檔案。如需更多資訊,請參閱第 6.6.9 節「mysqlbinlog — 二進制日誌檔案處理工具」。