Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


19.3.2.3 二进制日志主密钥轮换

当启用二进制日志加密时,可以在服务器运行时随时旋转二进制日志主密钥,通过执行ALTER INSTANCE ROTATE BINLOG MASTER KEY语句。旋转二进制日志主密钥时,新的和后续文件的密码将使用新的二进制日志主密钥加密,并且对现有加密的二进制日志文件和中继日志文件的文件密码也将使用新的二进制日志主密钥重新加密,以便完全更新加密。

当您手动旋转二进制日志主密钥时,MySQL Server 将按照以下顺序执行操作:

  1. 生成一个新的二进制日志加密密钥,并将其存储在密钥环上,并将其用作新的二进制日志主密钥。

  2. 在所有渠道上对二进制日志和中继日志文件进行轮换。

  3. 使用新的二进制日志主密钥加密新的二进制日志和中继日志文件的文件密码,以及后续文件直到密钥再次更改。

  4. 对服务器上的现有加密的二进制日志文件和中继日志文件逐个重新加密,开始于最新的文件。未加密的文件将被跳过。

  5. 在重新加密过程中,已经不再用于任何文件的二进制日志加密密钥将从密钥环上删除。

需要BINLOG_ENCRYPTION_ADMIN特权来执行ALTER INSTANCE ROTATE BINLOG MASTER KEY语句,并且在binlog_encryption系统变量设置为OFF时不能使用该语句。

二进制日志主密钥轮换过程的最后一步是清洁所有不再适用于保留的二进制日志文件或中继日志文件的二进制日志加密密钥。如果保留的二进制日志文件或中继日志文件无法初始化以便重新加密,相关的二进制日志加密密钥将不会被删除,以便将来恢复文件。例如,这可能是因为二进制日志索引文件中列出的文件当前不可读,或者渠道失败初始化。服务器 UUID 更改,例如使用 MySQL Enterprise Backup 创建的备份在设置新副本时,执行ALTER INSTANCE ROTATE BINLOG MASTER KEY语句在新服务器上不会删除任何早期二进制日志加密密钥,该密钥包括原始服务器 UUID。

如果在二进制日志主密钥旋转过程的前四个步骤中无法正确完成任何一个步骤,MySQL将发出错误信息,解释情况和加密状态的后果。之前加密的文件总是留在加密状态,但是文件密码可能仍然使用旧的二进制日志主密钥加密。如果您看到这些错误,首先重新尝试过程,重新执行ALTER INSTANCE ROTATE BINLOG MASTER KEY语句。然后,调查每个文件的状态,以了解阻止过程的原因,特别是如果您怀疑当前或任何前一个二进制日志主密钥可能已经被 compromized。

如果二进制日志主密钥旋转过程的最后一步无法正确完成,MySQL将发出警告信息,解释情况。警告信息将确定无法清理密钥环中的辅助密钥以旋转二进制日志主密钥,或者无法清理未使用的二进制日志加密密钥。您可以选择忽略信息,因为这些密钥是辅助密钥或不再使用,或者重新执行ALTER INSTANCE ROTATE BINLOG MASTER KEY语句以重新尝试过程。

如果服务器在二进制日志主密钥旋转过程中停止并在重启时将二进制日志加密设置为ON,那么在重启后创建的新二进制日志文件和relay日志文件将使用新的二进制日志主密钥加密。然而,之前的文件的重新加密将不继续进行,因此在服务器停止前未重新加密的文件将留在使用前一个二进制日志主密钥加密的状态。要完成重新加密和清理未使用的二进制日志加密密钥,请重新执行ALTER INSTANCE ROTATE BINLOG MASTER KEY语句。

ALTER INSTANCE ROTATE BINLOG MASTER KEY操作将不会写入二进制日志,并且不会在复制服务器上执行。因此,可以在复制环境中,包括MySQL版本的混合,进行二进制日志主密钥旋转。要在所有适用源服务器和复制服务器上定期旋转二进制日志主密钥,可以在每个服务器上启用MySQL Event Scheduler,并使用ALTER INSTANCE ROTATE BINLOG MASTER KEY语句创建一个CREATE EVENT语句。如果您旋转二进制日志主密钥,因为您怀疑当前或任何前一个二进制日志主密钥可能已经被 compromized,需要在每个适用服务器上执行语句。执行语句在每个服务器上确保可以验证即时符合,即使在延迟的复制服务器、多个复制拓扑结构中的服务器或当前不活动的复制拓扑结构中的服务器。

\系统变量binlog_rotate_encryption_master_key_at_startup控制在服务器重启时是否自动旋转二进制日志主密钥。如果该系统变量设置为ON,在服务器重启时将生成新的二进制日志加密密钥,并使用该密钥作为新的二进制日志主密钥。如果设置为OFF,该默认值,服务器重启后将继续使用现有二进制日志主密钥。每当在服务器重启时旋转二进制日志主密钥时,新的二进制日志和中继日志文件的文件密码将使用新的密钥加密。现有加密的二进制日志文件和中继日志文件的文件密码将不再加密,仍将使用旧密钥加密,该密钥将继续可用于密钥环上。