Documentation Home

6.4.4.7 在密钥环密钥库之间迁移密钥

密钥环迁移将密钥从一个密钥库复制到另一个密钥库,使 DBA 能够将 MySQL 安装切换到另一个密钥库。给另一个。成功的迁移操作会产生以下结果:

  • 目标密钥库包含它在迁移之前拥有的密钥,以及来自源密钥库的密钥。

  • 源密钥库在迁移前后保持不变(因为密钥是复制的,而不是移动的)。

如果要复制的密钥已经存在于目标密钥库中,则会发生错误,并且目标密钥库将恢复到其迁移前的状态。

以下部分讨论离线和在线迁移的特征,并描述如何执行迁移。

离线和在线关键迁移

密钥迁移是离线或在线的:

  • 离线迁移:当您确定本地主机上没有正在运行的服务器正在使用源或目标密钥库时使用。在这种情况下,迁移操作可以将密钥从源密钥库复制到目标,而运行中的服务器不可能在操作期间修改密钥库内容。

  • 在线迁移:当本地主机上正在运行的服务器正在使用源或目标密钥库时使用。在这种情况下,必须注意防止该服务器在迁移期间更新密钥库。这涉及连接到正在运行的服务器并指示它暂停密钥环操作,以便可以将密钥从源密钥库安全地复制到目的地。密钥复制完成后,允许正在运行的服务器恢复密钥环操作。

计划密钥迁移时,请使用这些要点来决定它应该离线还是在线:

  • 不要执行涉及正在运行的服务器正在使用的密钥库的脱机迁移。

  • 在在线迁移期间暂停密钥环操作是通过连接到正在运行的服务器并将其全局 keyring_operations系统变量设置为OFF密钥复制之前和密钥复制 ON之后来实现的。这有几个含义:

    • keyring_operations 在 MySQL 5.7.21 中引入,因此只有当运行服务器来自 MySQL 5.7.21 或更高版本时,才可以进行在线迁移。如果正在运行的服务器较旧,您必须停止它,执行离线迁移,然后重新启动它。其他地方提及的所有迁移说明 keyring_operations 均受此条件约束。

    • 用于连接到正在运行的服务器的帐户必须具有SUPER 修改所需的权限 keyring_operations

    • 对于联机迁移,迁移操作负责 keyring_operations在运行的服务器上启用和禁用。如果迁移操作异常退出(例如,如果它被强制终止),则有可能 keyring_operations在正在运行的服务器上保持禁用状态,使其无法执行密钥环操作。在这种情况下,可能需要连接到正在运行的服务器并 keyring_operations 使用以下语句手动启用:

      SET GLOBAL keyring_operations = ON;
  • 在线密钥迁移提供了在单个正在运行的服务器上暂停密钥环操作。如果多个正在运行的服务器正在使用所涉及的密钥库,要执行迁移,请使用涉及多个正在运行的服务器的 密钥迁移中描述的过程。

使用迁移服务器进行密钥迁移

从 MySQL 5.7.21 开始,如果在支持密钥迁移的特殊操作模式下调用,则 MySQL 服务器将成为迁移服务器。迁移服务器不接受客户端连接。相反,它只运行足够长的时间来迁移密钥,然后退出。迁移服务器向控制台报告错误(标准错误输出)。

要使用迁移服务器执行密钥迁移操作,请确定指定涉及哪些密钥环插件或组件所需的密钥迁移选项,以及迁移是离线还是在线:

  • 要指示源和目标密钥环插件,请指定以下选项:

    这些选项告诉服务器以密钥迁移模式运行。对于密钥迁移操作,这两个选项都是必需的。源插件和目标插件必须不同,并且迁移服务器必须支持这两个插件。

  • 对于离线迁移,不需要额外的密钥迁移选项。

  • 对于在线迁移,某些正在运行的服务器当前正在使用源或目标密钥库。要调用迁移服务器,请指定指示如何连接到正在运行的服务器的其他关键迁移选项。这是必要的,以便迁移服务器可以连接到正在运行的服务器并告诉它在迁移操作期间暂停密钥环使用。

    使用以下任何选项都表示在线迁移:

有关密钥迁移选项的更多详细信息,请参阅 第 6.4.4.11 节,“密钥环命令选项”

使用指示源和目标密钥库以及迁移是离线还是在线的密钥迁移选项启动迁移服务器,可能还有其他选项。请牢记以下注意事项:

  • 可能需要其他服务器选项,例如两个密钥环插件的配置参数。例如,如果keyring_file是源或目标, keyring_file_data如果密钥环数据文件位置不是默认位置,则必须设置系统变量。可能还需要其他非密钥环选项。指定这些选项的一种方法是使用--defaults-file命名包含所需选项的选项文件。

  • 迁移服务器期望路径名选项值是完整路径。相对路径名可能无法按预期解析。

  • 在密钥迁移模式下调用服务器的用户不能是root操作系统用户,除非--user使用非root用户名指定选项以该用户身份运行服务器。

  • 以密钥迁移模式运行服务器的用户必须具有读取和写入任何本地密钥环文件的权限,例如基于文件的插件的数据文件。

    如果您从不同于通常用于运行 MySQL 的系统帐户调用迁移服务器,它可能会创建服务器在正常操作期间无法访问的密钥环目录或文件。假设 mysqld通常以 mysql操作系统用户身份运行,但您以 isabel. 迁移服务器创建的任何新目录或文件都归 isabel. 当服务器作为mysql操作系统用户尝试访问 拥有的文件系统对象时,后续启动失败isabel

    为避免此问题,请以 root操作系统用户身份启动迁移服务器并提供一个 选项,通常用于运行 MySQL 的系统帐户在哪里。或者,在迁移之后,检查与密钥环相关的文件系统对象,并在必要时使用chownchmod或类似命令更改它们的所有权和权限,以便运行的服务器可以访问这些对象。 --user=user_nameuser_name

离线迁移命令行示例(单行输入命令):

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-source=keyring_file.so
  --keyring-migration-destination=keyring_encrypted_file.so
  --keyring_encrypted_file_password=password

在线迁移命令行示例:

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-source=keyring_file.so
  --keyring-migration-destination=keyring_encrypted_file.so
  --keyring_encrypted_file_password=password
  --keyring-migration-host=127.0.0.1
  --keyring-migration-user=root
  --keyring-migration-password=root_password

密钥迁移服务器执行如下迁移操作:

  1. (仅限联机迁移)使用连接选项连接到正在运行的服务器。

  2. (仅限联机迁移) keyring_operations在正在运行的服务器上禁用。

  3. 加载源和目标密钥环插件。

  4. 将密钥从源密钥库复制到目标。

  5. 卸载密钥环插件。

  6. (仅限联机迁移) keyring_operations在运行的服务器上启用。

  7. (仅限联机迁移)断开与正在运行的服务器的连接。

如果在密钥迁移期间发生错误,目标密钥库将恢复到其迁移前的状态。

重要的

对于联机迁移操作,迁移服务器负责 keyring_operations在运行的服务器上启用和禁用。如果迁移服务器异常退出(例如,如果它被强制终止),则有可能keyring_operations在正在运行的服务器上保持禁用状态,使其无法执行密钥环操作。在这种情况下,可能需要连接到正在运行的服务器并 keyring_operations使用以下语句手动启用:

SET GLOBAL keyring_operations = ON;

在线密钥迁移操作成功后,可能需要重新启动正在运行的服务器:

  • 如果正在运行的服务器在迁移之前正在使用源密钥库,并且应该在迁移之后继续使用它,则不需要在迁移之后重新启动它。

  • 如果正在运行的服务器在迁移之前正在使用目标密钥库并且应该在迁移后继续使用它,则应该在迁移后重新启动它以加载所有迁移到目标密钥库的密钥。

  • If the running server was using the source keystore before the migration but should use the destination keystore after the migration, it must be reconfigured to use the destination keystore and restarted. In this case, be aware that although the running server is paused from modifying the source keystore during the migration itself, it is not paused during the interval between the migration and the subsequent restart. Care should be taken that the server does not modify the source keystore during this interval because any such changes will not be reflected in the destination keystore.

Key Migration Involving Multiple Running Servers

Online key migration provides for pausing keyring operations on a single running server. To perform a migration if multiple running servers are using the keystores involved, use this procedure:

  1. Connect to each running server manually and set keyring_operations=OFF. This ensures that no running server is using the source or destination keystore and satisfies the required condition for offline migration.

  2. Use a migration server to perform an offline key migration for each paused server.

  3. Connect to each running server manually and set keyring_operations=ON.

所有运行的服务器都必须支持 keyring_operations系统变量。任何不需要的服务器都必须在迁移前停止并在迁移后重新启动。