MySQL服务器支持一种操作模式,该模式允许在基础密钥环密钥库之间迁移密钥。这使DBA可以将MySQL安装从一个密钥环插件切换到另一个。迁移服务器(即,以密钥迁移模式启动的服务器)不接受客户端连接。相反,它仅运行足够长的时间来迁移密钥,然后退出。迁移服务器将错误报告给控制台(标准错误输出)。
可以执行离线或在线密钥迁移:
如果您确定本地主机上没有正在运行的服务器在使用源或目标密钥库,则可以进行脱机迁移。在这种情况下,迁移服务器可以修改密钥库,而没有运行中的服务器在迁移期间修改密钥库内容的可能性。
如果本地主机上正在运行的服务器正在使用源或目标密钥库,则必须执行在线迁移。在这种情况下,迁移服务器将连接到运行中的服务器,并指示其在进行密钥迁移时暂停密钥环操作。
密钥迁移操作的结果是,目标密钥库包含迁移之前已拥有的密钥,以及源密钥库中的密钥。源密钥库在迁移前后是相同的,因为密钥是复制而不是移动的。如果目标密钥库中已经存在要复制的密钥,则会发生错误,并且目标密钥库将还原到其预迁移状态。
以密钥迁移方式调用服务器的用户必须不是root操作系统用户,并且必须具有读写密钥环文件的权限。
要执行密钥迁移操作,请确定需要哪些密钥迁移选项。迁移选项表明涉及哪些密钥环插件,以及执行离线还是在线迁移:
要指示源和目标密钥环插件,请指定以下选项:
--keyring-migration-source:用于管理要迁移的密钥的源密钥环插件。
--keyring-migration-destination:要将迁移的密钥复制到的目标密钥环插件。
这些选项告诉服务器以密钥迁移模式运行。这两个选项对于所有关键迁移操作都是必需的。源插件和目标插件必须不同,并且迁移服务器必须同时支持这两个插件。
对于脱机迁移,不需要其他关键迁移选项。
警告
不要执行涉及正在运行的服务器正在使用的密钥库的脱机迁移。
对于联机迁移,某些正在运行的服务器当前正在使用源或目标密钥库。指定指示如何连接到正在运行的服务器的密钥迁移选项。这是必需的,以便迁移服务器可以连接到正在运行的服务器,并告诉它在迁移操作期间暂停使用密钥环。
使用以下任何选项均表示在线迁移:
--keyring-migration-host:正在运行的服务器所在的主机。这始终是本地主机。
--keyring-migration-user, --keyring-migration-password:用于连接到正在运行的服务器的帐户的用户名和密码。
--keyring-migration-port:对于TCP / IP连接,是要在运行的服务器上连接的端口号。
--keyring-migration-socket:对于Unix套接字文件或Windows命名管道连接,要在运行的服务器上连接到的套接字文件或命名管道。
有关密钥迁移选项的更多详细信息,请参见 第6.4.4.11节“密钥环命令选项”。
使用刚刚确定的关键迁移选项(可能还有其他选项)启动迁移服务器。请记住以下注意事项:
可能需要其他服务器选项,例如两个密钥环插件的其他配置参数。例如,如果keyring_file是插件之一,则keyring_file_data如果密钥环数据文件的位置不是默认位置,则必须设置 系统变量。也可能需要其他非密钥选项。指定这些选项的一种方法是使用 --defaults-file命名包含所需选项的选项文件。
如果从不同于通常用于运行MySQL的系统帐户调用迁移服务器,则它可能会创建在正常操作期间服务器无法访问的密钥环目录或文件。假设 mysqld通常以mysql操作系统用户身份 运行,但是您以身份登录时调用了迁移服务器 isabel。迁移服务器创建的任何新目录或文件均归 isabel。当服务器由于mysql操作系统用户尝试访问拥有的文件系统对象而 运行时,随后的启动将失败isabel。
为避免此问题,请以root操作系统用户身份启动迁移服务器 并提供一个 选项,通常用于运行MySQL的系统帐户在哪里。 --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=localhost
--keyring-migration-user=root
--keyring-migration-password=root_password
密钥迁移服务器执行迁移操作如下:
(仅联机迁移)使用连接选项连接到正在运行的服务器。用于连接的帐户必须具有修改全局keyring_operations系统变量所需的特权 (ENCRYPTION_KEY_ADMIN除了 SYSTEM_VARIABLES_ADMIN或之外 SUPER)。
(仅联机迁移)keyring_operations在正在运行的服务器上禁用 。(正在运行的服务器必须支持 keyring_operations。)
加载源和目标密匙环插件。
将密钥从源密钥环复制到目标密钥环。
卸载密钥环插件。
(仅联机迁移)keyring_operations在运行的服务器上启用 。
(仅联机迁移)与正在运行的服务器断开连接。
出口。
如果在密钥迁移过程中发生错误,则将删除复制到目标插件的所有密钥,从而使目标密钥库保持不变。
重要
对于联机迁移操作,迁移服务器负责keyring_operations在运行的服务器上启用和禁用 。但是,如果迁移服务器异常退出(例如,如果有人强行终止了迁移服务器),则可能keyring_operations不会在正在运行的服务器上重新启用该迁移服务器 ,从而使其无法执行密钥环操作。在这种情况下,可能需要连接到正在运行的服务器并keyring_operations手动启用 。
成功完成在线密钥迁移操作后,可能需要重新启动运行中的服务器:
如果正在运行的服务器正在使用源密钥库,则在迁移后无需重新启动它。
如果正在运行的服务器在迁移之前正在使用源密钥库,但是在迁移之后应该使用目标密钥库,则必须将其重新配置为使用目标密钥环插件并重新启动。
如果正在运行的服务器正在使用目标密钥库,并且将继续使用它,则应在迁移后重新启动它,以将所有迁移的密钥加载到目标密钥库中。
注意
MySQL服务器密钥迁移模式支持暂停单个正在运行的服务器。如果多个密钥服务器正在使用所涉及的密钥库,则要执行密钥迁移,请使用以下过程:
手动连接到每个正在运行的服务器并进行设置 keyring_operations=OFF。
使用迁移服务器执行脱机密钥迁移。
手动连接到每个正在运行的服务器并进行设置 keyring_operations=ON。
所有正在运行的服务器必须支持 keyring_operations=ON系统变量。