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
操作的复制错误中恢复,并且复制的事件是可信的,您可以在临时授予 FILE
权限给 PRIVILEGE_CHECKS_USER
帐户,并在复制事件应用后将其删除。
当 mysqlbinlog 读取基于语句的格式记录的 LOAD DATA
语句的日志事件时,将在临时目录中创建生成的本地文件。这些临时文件不会被 mysqlbinlog 或任何其他 MySQL 程序自动删除。如果您确实使用 LOAD DATA
语句和基于语句的二进制日志记录,您应该在不再需要语句日志后自己删除临时文件。有关更多信息,请参见 第 6.6.9 节,“mysqlbinlog — 处理二进制日志文件的实用程序”。