MySQL 8.0 参考手册  / 第十七章复制  / 17.3 复制安全  /  17.3.2 加密二进制日志文件和中继日志文件

17.3.2 加密二进制日志文件和中继日志文件

从 MySQL 8.0.14 开始,二进制日志文件和中继日志文件可以被加密,有助于保护这些文件和其中包含的潜在敏感数据不被外部攻击者滥用,也不会被操作系统用户未经授权查看被存储。用于文件的加密算法,即 AES(高级加密标准)密码算法,内置于 MySQL 服务器中,无法配置。

binlog_encryption您可以通过将系统变量设置为 来 在 MySQL 服务器上启用此加密 ONOFF是默认值。系统变量为二进制日志文件和中继日志文件设置加密。不需要在服务器上启用二进制日志记录来启用加密,因此您可以在没有二进制日志的副本上加密中继日志文件。要使用加密,必须安装和配置密钥环组件或插件以提供 MySQL 服务器的密钥环服务。有关执行此操作的说明,请参阅第 6.4.4 节,“MySQL 密钥环”。任何受支持的密钥环组件或插件都可用于存储二进制日志加密密钥。

当您首次启动启用加密的服务器时,会在初始化二进制日志和中继日志之前生成一个新的二进制日志加密密钥。此密钥用于为每个二进制日志文件(如果服务器启用了二进制日志记录)和中继日志文件(如果服务器具有复制通道)加密文件密码,并且从文件密码生成的进一步密钥用于加密数据在文件中。当前在服务器上使用的二进制日志加密密钥称为二进制日志主密钥。双层加密密钥架构意味着二进制日志主密钥可以根据需要轮换(用新的主密钥替换),只需要用新的主密钥重新加密每个文件的文件密码,而不是整个文件。所有通道的中继日志文件都经过加密,包括激活加密后创建的新通道。二进制日志索引文件和中继日志索引文件从不加密。

如果您在服务器运行时激活加密,则会在那时生成一个新的二进制日志加密密钥。例外情况是,如果加密先前在服务器上处于活动状态,然后被禁用,在这种情况下,将再次使用之前使用的二进制日志加密密钥。二进制日志文件和中继日志文件立即轮换,新文件和所有后续二进制日志文件和中继日志文件的文件密码使用此二进制日志加密密钥加密。仍然存在于服务器上的现有二进制日志文件和中继日志文件未加密,但如果不再需要它们,您可以清除它们。

如果通过将 binlog_encryption系统变量更改为 来停用加密OFF,则二进制日志文件和中继日志文件会立即轮换,并且所有后续日志记录都是未加密的。以前加密的文件不会自动解密,但服务器仍然可以读取它们。在 BINLOG_ENCRYPTION_ADMIN服务器运行时激活或停用加密需要特权。

加密和未加密的二进制日志文件可以使用加密日志文件 ( ) 文件头开头的幻数来区分0xFD62696E,这与用于未加密日志文件 ( 0xFE62696E) 的幻数不同。该SHOW BINARY LOGS语句显示每个二进制日志文件是加密的还是未加密的。

二进制日志文件加密后, mysqlbinlog不能直接读取,但可以使用 --read-from-remote-server 选项从服务器读取。从 MySQL 8.0.14 开始,如果您尝试直接读取加密的二进制日志文件 , mysqlbinlog会返回一个合适的错误,但旧版本的mysqlbinlog根本不会将该文件识别为二进制日志文件。如果您使用mysqlbinlog备份加密的二进制日志文件,请注意使用 mysqlbinlog 生成的文件副本未加密格式存储。

二进制日志加密可以与二进制日志事务压缩结合使用(从 MySQL 8.0.20 开始可用)。有关二进制日志事务压缩的更多信息,请参阅 第 5.4.4.5 节,“二进制日志事务压缩”