19.3.2 加密二进制日志文件和中继日志文件
MySQL 二进制日志文件和中继日志文件可以加密,以保护这些文件和其中可能包含的敏感数据免受外部攻击者或操作系统用户的未经授权的查看。用于加密文件的算法是AES(Advanced Encryption Standard)加密算法,该算法是MySQL Server的内置组件,不能被配置。
您可以在MySQL服务器上启用加密通过将binlog_encryption
系统变量设置为ON
。OFF
是默认值。该系统变量将加密启用于二进制日志文件和中继日志文件。二进制日志不需要在服务器上启用,以便启用加密,您可以在副本上加密中继日志文件,即使副本没有二进制日志。要使用加密,您需要安装和配置密钥环组件或插件,以供MySQL Server的密钥环服务使用。有关详细信息,请参阅Section 8.4.4,“MySQL密钥环”。任何支持的密钥环组件或插件都可以用来存储二进制日志加密密钥。
当您首次启动服务器时,启用加密时,会生成一个新的二进制日志加密密钥,然后初始化二进制日志和中继日志。该密钥将用于加密每个二进制日志文件(如果服务器启用了二进制日志)的文件密码,以及中继日志文件(如果服务器启用了复制通道)的文件密码。然后,使用文件密码生成的密钥将用于加密文件中的数据。当前使用的二进制日志主密钥称为二进制日志主密钥。二进制日志主密钥可以轮换(将主密钥替换为新主密钥),只需要将每个文件的文件密码重新加密,不需要重新加密整个文件。中继日志文件将加密所有通道,包括在加密激活后创建的新通道。二进制日志索引文件和中继日志索引文件从不加密。
如果在服务器运行时激活加密,新的二进制日志加密密钥将在该时间生成。唯一的例外是,如果之前在服务器上启用了加密,然后禁用了加密,那么将再次使用之前使用的二进制日志加密密钥。二进制日志文件和中继日志文件将立即旋转,并使用该二进制日志加密密钥对新文件和所有后续二进制日志文件和中继日志文件进行文件密码加密。服务器上仍然存在的二进制日志文件和中继日志文件不加密,但可以删除它们如果它们不再需要。
如果通过将binlog_encryption
系统变量设置为OFF
来停用加密,二进制日志文件和中继日志文件将立即旋转,并且所有后续日志记录将不加密。之前加密的文件不自动解密,但服务器仍然可以读取它们。需要激活或停用加密的服务器运行时的BINLOG_ENCRYPTION_ADMIN
特权。
加密和未加密的二进制日志文件可以使用文件头的魔术数字来区分(加密日志文件的魔术数字为0xFD62696E
,未加密日志文件的魔术数字为0xFE62696E
)。SHOW BINARY LOGS
语句显示每个二进制日志文件是否加密或未加密。
当二进制日志文件加密时,mysqlbinlog不能直接读取它们,但可以从服务器读取它们使用--read-from-remote-server
选项。如果使用mysqlbinlog备份加密的二进制日志文件,注意生成的文件副本使用mysqlbinlog的副本将存储在未加密格式中。
二进制日志加密可以与二进制日志事务压缩组合。有关二进制日志事务压缩的更多信息,请见第7.4.4.5节,“二进制日志事务压缩”。