17.3.2.1 二进制日志加密的范围

MySQL服务器实例启用二进制日志加密时,加密覆盖范围如下:

  • 写入二进制日志文件和中继日志文件的静态数据从加密开始的时间点开始使用上述两层加密架构进行加密。开始加密时服务器上存在的现有二进制日志文件和中继日志文件未加密。您可以在不再需要这些文件时清除它们。

  • 发送到包括mysqlbinlog 在内的 MySQL 客户端的复制事件流中的动态数据在 传输时被解密,因此在传输过程中应使用连接加密进行保护(请参阅 第 6.3 节,“使用加密连接”第 17.3 节。 1,“设置复制以使用加密连接” )。

  • 在事务期间保存在二进制日志事务和语句缓存中的正在使用的数据在存储缓存的内存缓冲区中采用未加密格式。如果数据超过内存缓冲区中的可用空间,则将数据写入磁盘上的临时文件。从 MySQL 8.0.17 开始,当二进制日志加密在服务器上处于活动状态时,用于保存二进制日志缓存的临时文件使用 AES-CTR(AES 计数器模式)进行加密以进行流加密。因为临时文件是易变的并且绑定到单个进程,所以它们使用单​​层加密进行加密,使用随机生成的文件密码和初始化向量,它们只存在于内存中,从不存储在磁盘或密钥环中。在每个事务提交后,二进制日志缓存被重置:内存缓冲区被清除,用于保存二进制日志缓存的任何临时文件被截断,并且随机生成新的文件密码和初始化向量以供下一个事务使用。当服务器在正常关闭或意外停止后重新启动时,也会发生此重置。并随机生成一个新的文件密码和初始化向量,用于下一次交易。当服务器在正常关闭或意外停止后重新启动时,也会发生此重置。并随机生成一个新的文件密码和初始化向量,用于下一次交易。当服务器在正常关闭或意外停止后重新启动时,也会发生此重置。

笔记

如果您使用LOAD DATAwhen binlog_format=STATEMENT设置,这是不推荐的,因为该语句被认为对于基于语句的复制是不安全的,一个包含数据的临时文件将在应用更改的副本上创建。当服务器上的二进制日志加密处于活动状态时,这些临时文件不会被加密。请改用基于行或混合二进制日志记录格式,它们不会创建临时文件。