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