Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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。

如果二进制日志主密钥轮换过程中的任何四个步骤无法正确完成,将发出错误消息,解释情况和对二进制日志文件和中继日志文件加密状态的影响。以前加密的文件将始终保持加密状态,但它们的文件密码可能仍然使用旧的二进制日志主密钥。如果您看到这些错误,首先重试该过程,发出 ALTER INSTANCE ROTATE BINLOG MASTER KEY 再次。然后,调查单个文件的状态,以了解阻止过程的原因,特别是如果您怀疑当前或之前的二进制日志主密钥可能已被泄露。

如果二进制日志主密钥轮换过程的最后一步无法正确完成,将发出警告消息,解释情况。警告消息将标识是否无法清理密钥环中的辅助密钥以旋转二进制日志主密钥,或者无法清理不再使用的二进制日志加密密钥。您可以选择忽略该消息,因为这些密钥是辅助密钥或不再使用,或者您可以发出 ALTER INSTANCE ROTATE BINLOG MASTER KEY 再次以重试该过程。

如果服务器停止并重新启动,二进制日志加密仍然设置为 ON,那么在二进制日志主密钥轮换过程中,新的二进制日志文件和中继日志文件将使用新的二进制日志主密钥加密。然而,现有文件的重新加密将不会继续,因此在服务器停止之前没有重新加密的文件将保留使用之前的二进制日志主密钥。要完成重新加密和清理不再使用的二进制日志加密密钥,请在重新启动后再次发出 ALTER INSTANCE ROTATE BINLOG MASTER KEY

ALTER INSTANCE ROTATE BINLOG MASTER KEY 操作不会写入二进制日志,也不会在副本上执行。因此,在包括混合 MySQL 版本的复制环境中,可以进行二进制日志主密钥轮换。要在所有适用的源服务器和副本服务器上计划定期轮换二进制日志主密钥,可以在每个服务器上启用 MySQL 事件计划程序,并使用 ALTER INSTANCE ROTATE BINLOG MASTER KEY 语句和 CREATE EVENT 语句。如果您怀疑当前或之前的二进制日志主密钥可能已经泄露,需要在每个适用的源服务器和副本服务器上发出语句。在单个服务器上发出语句可以确保即时遵守,即使副本服务器滞后、属于多个复制拓扑结构或当前不活动在复制拓扑结构中,但具有二进制日志和中继日志文件。

系统变量 binlog_rotate_encryption_master_key_at_startup 控制服务器重新启动时是否自动轮换二进制日志主密钥。如果该系统变量设置为 ON,则在服务器重新启动时生成新的二进制日志加密密钥,并将其用作新的二进制日志主密钥。如果设置为 OFF,默认情况下,将使用现有的二进制日志主密钥。在服务器重新启动时轮换二进制日志主密钥时,新的二进制日志和中继日志文件的文件密码将使用新的密钥加密。现有的加密二进制日志文件和中继日志文件的文件密码不会被重新加密,因此它们将继续使用旧密钥,该密钥仍然可用在密钥环上。