用于加密日志文件的文件密码的二进制日志加密密钥是 256 位密钥,它们是使用 MySQL 服务器的密钥环服务专门为每个 MySQL 服务器实例生成的(请参阅第 6.4.4 节,“MySQL 密钥环”)。密钥环服务处理二进制日志加密密钥的创建、检索和删除。服务器实例只创建和删除为自己生成的密钥,但如果其他实例存储在密钥环中,它可以读取为其他实例生成的密钥,就像通过文件复制克隆的服务器实例的情况一样。
MySQL 服务器实例的二进制日志加密密钥必须包含在您的备份和恢复过程中,因为如果解密当前和保留的二进制日志文件或中继日志文件的文件密码所需的密钥丢失,则可能无法恢复启动服务器。
密钥环中二进制日志加密密钥的格式如下:
MySQLReplicationKey_{UUID}_{SEQ_NO}
例如:
MySQLReplicationKey_00508583-b5ce-11e8-a6a5-0010e0734796_1
{UUID}
是MySQL服务器生成的真实UUID(
server_uuid
系统变量的值)。
{SEQ_NO}
是二进制日志加密密钥的序列号,服务器上生成的每个新密钥都会将其递增 1。
当前在服务器上使用的二进制日志加密密钥称为二进制日志主密钥。当前二进制日志主密钥的序列号存储在密钥环中。二进制日志主密钥用于加密每个新日志文件的文件密码,该密码是随机生成的特定于日志文件的 32 字节文件密码,用于加密文件数据。文件密码使用带有 256 位二进制日志加密密钥和随机初始化向量 (IV) 的 AES-CBC(AES 密码块链接模式)加密,并存储在日志文件的文件头中。文件数据使用 AES-CTR(AES 计数器模式)加密,其中包含从文件密码生成的 256 位密钥和从文件密码生成的随机数。如果用于加密文件密码的二进制日志加密密钥已知,通过使用 OpenSSL 加密工具包中提供的工具,在技术上可以离线解密加密文件。
如果您使用文件复制来克隆一个启用了加密的 MySQL 服务器实例,因此它的二进制日志文件和中继日志文件被加密,请确保密钥环也被复制,以便克隆服务器可以从源读取二进制日志加密密钥服务器。在克隆服务器上激活加密时(启动时或随后),克隆服务器会识别用于复制文件的二进制日志加密密钥包括源服务器生成的 UUID。它使用自己生成的 UUID 自动生成一个新的二进制日志加密密钥,并使用它来加密后续二进制日志文件和中继日志文件的文件密码。使用源服务器继续读取复制的文件'