MySQL8 中文参考(二十九)(4)https://developer.aliyun.com/article/1566125
8.4.4.12 使用 Oracle Cloud 基础设施 Vault Keyring 插件
注意
keyring_oci
插件是包含在 MySQL 企业版中的扩展,这是一个商业产品。要了解更多关于商业产品的信息,请参阅 www.mysql.com/products/
。
keyring_oci
插件是一个与 Oracle Cloud 基础设施 Vault 通信的 keyring 插件,用于后端存储。没有密钥信息永久存储在 MySQL 服务器本地存储中。所有密钥都存储在 Oracle Cloud 基础设施 Vault 中,使得这个插件非常适合 Oracle Cloud 基础设施 MySQL 客户管理他们的 MySQL 企业版密钥。
截至 MySQL 8.0.31,此插件已被弃用,并可能在将来的 MySQL 版本中被移除。相反,考虑使用 component_keyring_oci
组件来存储 keyring 数据(请参阅 第 8.4.4.11 节,“使用 Oracle Cloud 基础设施 Vault Keyring 组件”)。
keyring_oci
插件支持组成标准 MySQL Keyring 服务接口的函数。这些函数执行的 keyring 操作可在两个级别访问:
- SQL 接口:在 SQL 语句中,调用 第 8.4.4.15 节,“通用 Keyring 密钥管理函数” 中描述的函数。
- C 接口:在 C 语言代码中,调用 第 7.6.9.2 节,“Keyring 服务” 中描述的 keyring 服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate('MyKey', 'AES', 32); SELECT keyring_key_remove('MyKey');
有关 keyring_oci
允许的密钥值特性的信息,请参阅 第 8.4.4.13 节,“支持的 Keyring 密钥类型和长度”。
要安装 keyring_oci
,请使用 第 8.4.4.3 节,“Keyring 插件安装” 中的通用说明,以及此处找到的特定于 keyring_oci
的配置信息。插件特定的配置涉及设置多个系统变量以指示 Oracle Cloud 基础设施资源的名称或值。
假设您熟悉 Oracle Cloud 基础设施概念,但在设置资源以供 keyring_oci
插件使用时,以下文档可能会有所帮助:
keyring_oci
插件支持下表中显示的配置参数。要指定这些参数,请为相应的系统变量赋值。
配置参数 | 系统变量 | 强制 |
用户 OCID | keyring_oci_user |
是 |
租户 OCID | keyring_oci_tenancy |
是 |
区段 OCID | keyring_oci_compartment |
是 |
保险柜 OCID | keyring_oci_virtual_vault |
是 |
主密钥 OCID | keyring_oci_master_key |
是 |
加密服务器端点 | keyring_oci_encryption_endpoint |
是 |
密钥管理服务器端点 | keyring_oci_management_endpoint |
是 |
保险柜服务器端点 | keyring_oci_vaults_endpoint |
是 |
机密服务器端点 | keyring_oci_secrets_endpoint |
是 |
RSA 私钥文件 | keyring_oci_key_file |
是 |
RSA 私钥指纹 | keyring_oci_key_fingerprint |
是 |
CA 证书捆绑文件 | keyring_oci_ca_certificate |
否 |
配置参数 | 系统变量 | 强制 |
为了在服务器启动过程中可用,必须使用 --early-plugin-load
选项加载 keyring_oci
。如前表所示,几个与插件相关的系统变量是强制性的,也必须设置:
- Oracle Cloud 基础设施广泛使用 Oracle Cloud ID(OCID)来指定资源,而且几个
keyring_oci
参数指定要使用的资源的 OCID 值。因此,在使用keyring_oci
插件之前,必须满足这些先决条件:
- 必须存在用于连接到 Oracle Cloud Infrastructure 的用户。如有必要,请创建用户并将用户 OCID 分配给
keyring_oci_user
系统变量。 - 必须存在要使用的 Oracle Cloud Infrastructure 租户,以及租户内的 MySQL 专用区和专用区内的保险库。如有必要,请创建这些资源,并确保用户已启用以使用它们。将租户、专用区和保险库的 OCID 分配给
keyring_oci_tenancy
、keyring_oci_compartment
和keyring_oci_virtual_vault
系统变量。 - 必须存在用于加密的主密钥。如有必要,请创建它并将其 OCID 分配给
keyring_oci_master_key
系统变量。
- 必须指定几个服务器端点。这些端点是特定于保险库的,Oracle Cloud Infrastructure 在创建保险库时分配它们。从保险库详细信息页面获取它们的值,并将其分配给
keyring_oci_encryption_endpoint
、keyring_oci_management_endpoint
、keyring_oci_vaults_endpoint
和keyring_oci_secrets_endpoint
系统变量。 - Oracle Cloud Infrastructure API 使用 RSA 公钥/私钥对进行身份验证。要创建此密钥对并获取密钥指纹,请使用 必需的密钥和 OCID 中的说明。将私钥文件名和密钥指纹分配给
keyring_oci_key_file
和keyring_oci_key_fingerprint
系统变量。
除了必填的系统变量外,keyring_oci_ca_certificate
可以选择设置以指定用于对等身份验证的证书颁发机构(CA)证书包文件。
重要提示
如果从 Oracle Cloud Infrastructure 控制台复制参数,则复制的值可能包含初始的 https://
部分。在设置相应的 keyring_oci
系统变量时,请省略该部分。
例如,要加载和配置 keyring_oci
,请在服务器的 my.cnf
文件中使用以下行(根据需要调整平台的 .so
后缀和文件位置):
[mysqld] early-plugin-load=keyring_oci.so keyring_oci_user=ocid1.user.oc1..*longAlphaNumericString* keyring_oci_tenancy=ocid1.tenancy.oc1..*longAlphaNumericString* keyring_oci_compartment=ocid1.compartment.oc1..*longAlphaNumericString* keyring_oci_virtual_vault=ocid1.vault.oc1.iad.*shortAlphaNumericString*.*longAlphaNumericString* keyring_oci_master_key=ocid1.key.oc1.iad.*shortAlphaNumericString*.*longAlphaNumericString* keyring_oci_encryption_endpoint=*shortAlphaNumericString*-crypto.kms.us-ashburn-1.oraclecloud.com keyring_oci_management_endpoint=*shortAlphaNumericString*-management.kms.us-ashburn-1.oraclecloud.com keyring_oci_vaults_endpoint=vaults.us-ashburn-1.oci.oraclecloud.com keyring_oci_secrets_endpoint=secrets.vaults.us-ashburn-1.oci.oraclecloud.com keyring_oci_key_file=*file_name* keyring_oci_key_fingerprint=12:34:56:78:90:ab:cd:ef:12:34:56:78:90:ab:cd:ef
有关 keyring_oci
插件特定系统变量的更多信息,请参见 第 8.4.4.19 节,“Keyring 系统变量”。
keyring_oci
插件不支持运行时重新配置,其系统变量均无法在运行时修改。要更改配置参数,请执行以下操作:
- 修改
my.cnf
文件中的参数设置,或者对于持久化到mysqld-auto.conf
的参数,使用SET PERSIST_ONLY
。 - 重新启动服务器。
8.4.4.13 支持的关键环关键类型和长度
MySQL 关键环支持不同类型(加密算法)和长度的关键:
- 可用的关键类型取决于安装了哪个关键环插件。
- 允许的关键长度受多个因素影响:
- 一般关键环可加载函数接口限制(用于使用第 8.4.4.15 节,“通用关键环关键管理函数”中描述的关键环函数之一管理的关键),或来自后端实现的限制。这些长度限制可以根据关键操作类型而变化。
- 除了一般限制外,单独的关键环插件可能对每种关键类型的关键长度施加限制。
表 8.32,“一般关键环关键长度限制”显示了一般关键长度限制。(keyring_aws
的较低限制由 AWS KMS 接口而不是关键环函数强加。)对于关键环插件,表 8.33,“关键环插件关键类型和长度”显示了每个关键环插件允许的关键类型,以及任何插件特定的关键长度限制。对于大多数关键环组件,一般关键长度限制适用,没有关键类型限制。
注意
component_keyring_oci
(类似于keyring_oci
插件)只能生成大小为 16, 24 或 32 字节的AES
类型的关键。
表 8.32 一般关键环关键长度限制
关键操作 | 最大关键长度 |
生成关键 | 16,384 字节(MySQL 8.0.18 之前为 2,048);keyring_aws 为 1,024 |
存储关键 | 16,384 字节(MySQL 8.0.18 之前为 2,048);keyring_aws 为 4,096 |
获取关键 | 16,384 字节(MySQL 8.0.18 之前为 2,048);keyring_aws 为 4,096 |
表 8.33 关键环插件关键类型和长度
插件名称 | 允许的关键类型 | 插件特定长度限制 |
keyring_aws |
AES``SECRET |
16, 24 或 32 字节 None |
keyring_encrypted_file |
AES``DSA``RSA``SECRET |
NoneNoneNoneNone |
keyring_file |
AES``DSA``RSA``SECRET |
NoneNoneNoneNone |
keyring_hashicorp |
AES``DSA``RSA``SECRET |
NoneNoneNoneNone |
keyring_oci |
AES |
16, 24 或 32 字节 |
keyring_okv |
AES``SECRET |
16, 24 或 32 字节 None |
SECRET
关键类型,自 MySQL 8.0.19 起可用,旨在使用 MySQL 关键环对敏感数据进行通用存储,并受大多数关键环组件和关键环插件支持。关键环在存储和检索时将SECRET
数据加密和解密为字节流。
涉及SECRET
关键类型的示例关键环操作:
SELECT keyring_key_generate('MySecret1', 'SECRET', 20); SELECT keyring_key_remove('MySecret1'); SELECT keyring_key_store('MySecret2', 'SECRET', 'MySecretData'); SELECT keyring_key_fetch('MySecret2'); SELECT keyring_key_length_fetch('MySecret2'); SELECT keyring_key_type_fetch('MySecret2'); SELECT keyring_key_remove('MySecret2');
原文:
dev.mysql.com/doc/refman/8.0/en/keyring-key-migration.html
8.4.4.14 在密钥环密钥库之间迁移密钥
密钥环迁移将密钥从一个密钥库复制到另一个,使得 DBA 可以将 MySQL 安装切换到不同的密钥库。成功的迁移操作会产生以下结果:
- 目标密钥库包含迁移前具有的密钥,以及源密钥库中的密钥。
- 在迁移前后,源密钥库保持不变(因为密钥是复制而不是移动)。
如果要复制的密钥已经存在于目标密钥库中,则会发生错误,并且目标密钥库将恢复到迁移前的状态。
密钥环使用密钥环组件和密钥环插件管理密钥库。这与迁移策略有关,因为源密钥库和目标密钥库的管理方式决定了是否可能进行特定类型的密钥迁移以及执行该操作的程序:
- 从一个密钥环插件迁移到另一个:MySQL 服务器具有提供此功能的操作模式。
- 从密钥环插件迁移到密钥环组件:MySQL 服务器在 MySQL 8.0.24 版本中提供了此功能的操作模式。
- 从一个密钥环组件迁移到另一个:mysql_migrate_keyring 实用程序提供了这种能力。mysql_migrate_keyring 自 MySQL 8.0.24 版本起可用。
- 从密钥环组件迁移到密钥环插件:没有提供此功能。
以下部分讨论了离线和在线迁移的特点,并描述了如何执行迁移。
- 离线和在线密钥迁移
- 使用迁移服务器进行密钥迁移
- 使用 mysql_migrate_keyring 实用程序进行密钥迁移
- 涉及多个运行服务器的密钥迁移
离线和在线密钥迁移
密钥迁移可以是离线或在线的:
- 离线迁移:用于确保本地主机上没有运行中的服务器使用源或目标密钥库时使用。在这种情况下,迁移操作可以将密钥从源密钥库复制到目标密钥库,而在操作期间不会发生运行中服务器修改密钥库内容的可能性。
- 在线迁移:用于当本地主机上运行的服务器正在使用源密钥库时。在这种情况下,必须小心防止服务器在迁移过程中更新密钥库。这涉及连接到运行的服务器并指示其暂停密钥环操作,以便可以安全地从源密钥库复制密钥到目标位置。当密钥复制完成后,允许运行的服务器恢复密钥环操作。
当计划进行密钥迁移时,请使用以下要点来决定是离线还是在线:
- 不要执行涉及正在运行的服务器使用的密钥库的离线迁移。
- 在线迁移过程中暂停密钥环操作是通过连接到运行的服务器并将其全局
keyring_operations
系统变量设置为OFF
来实现的,然后在复制密钥之前设置为ON
。这有几个影响:
keyring_operations
是在 MySQL 5.7.21 中引入的,因此只有运行的服务器是 MySQL 5.7.21 或更高版本时才能进行在线迁移。如果运行的服务器较旧,则必须停止它,执行离线迁移,然后重新启动。所有其他地方提到的与keyring_operations
相关的迁移说明都受到此条件的约束。- 用于连接到运行的服务器的帐户必须具有修改
keyring_operations
所需的特权。这些特权是ENCRYPTION_KEY_ADMIN
以及SYSTEM_VARIABLES_ADMIN
或已弃用的SUPER
特权。 - 如果在线迁移操作异常退出(例如,被强制终止),则可能导致
keyring_operations
在运行的服务器上保持禁用,导致无法执行密钥环操作。在这种情况下,可能需要连接到运行的服务器并使用以下语句手动启用keyring_operations
:
SET GLOBAL keyring_operations = ON;
- 在线密钥迁移允许在单个运行的服务器上暂停密钥环操作。如果多个运行的服务器正在使用涉及的密钥库,则使用在 涉及多个运行服务器的密钥迁移 中描述的过程。
使用迁移服务器进行密钥迁移
注意
仅当运行的服务器允许套接字连接或使用 TLS 的 TCP/IP 连接时,才支持使用迁移服务器进行在线密钥迁移;例如,当服务器在 Windows 平台上运行并且仅允许共享内存连接时,不支持此功能。
如果以支持密钥迁移的特殊操作模式调用,则 MySQL 服务器将成为迁移服务器。迁移服务器不接受客户端连接。相反,它只运行足够长的时间来迁移密钥,然后退出。迁移服务器将错误报告给控制台(标准错误输出)。
迁移服务器支持以下迁移类型:
- 从一个密钥环插件迁移到另一个。
- 从密钥环插件迁移到密钥环组件。此功能自 MySQL 8.0.24 版本开始提供。较旧的服务器仅支持从一个密钥环插件迁移到另一个,此时这些指令中涉及密钥环组件的部分不适用。
迁移服务器不支持从一个密钥环组件迁移到另一个密钥环组件。对于这种类型的迁移,请参阅使用 mysql_migrate_keyring 实用程序进行密钥迁移。
要使用迁移服务器执行密钥迁移操作,请确定需要的密钥迁移选项,以指定涉及哪些密钥环插件或组件,以及迁移是离线还是在线的:
- 要指示源密钥环插件和目标密钥环插件或组件,请指定这些选项:
--keyring-migration-source
: 管理要迁移的密钥的源密钥环插件。--keyring-migration-destination
: 要将迁移的密钥复制到的目标密钥环插件或组件。--keyring-migration-to-component
: 如果目标是密钥环组件而不是密钥环插件,则需要此选项。
--keyring-migration-source
和--keyring-migration-destination
选项表示服务器应该运行在密钥迁移模式下。对于密钥迁移操作,这两个选项都是必需的。每个插件或组件都使用其库文件的名称指定,包括任何特定于平台的扩展,如.so
或.dll
。源和目标必须不同,并且迁移服务器必须支持它们两者。- 对于离线迁移,不需要额外的密钥迁移选项。
- 对于在线迁移,某个运行服务器当前正在使用源或目标密钥库。要调用迁移服务器,请指定额外的密钥迁移选项,指示如何连接到运行服务器。这是必要的,以便迁移服务器可以连接到运行服务器并告诉其在迁移操作期间暂停密钥环使用。使用以下任何选项表示在线迁移:
--keyring-migration-host
:运行服务器所在的主机。这始终是本地主机,因为迁移服务器只能在本地插件和组件管理的密钥库之间迁移密钥。--keyring-migration-user
,--keyring-migration-password
:用于连接到运行服务器的帐户凭据。--keyring-migration-port
:对于 TCP/IP 连接,连接到运行服务器的端口号。--keyring-migration-socket
:对于 Unix 套接字文件或 Windows 命名管道连接,连接到运行服务器的套接字文件或命名管道。
有关密钥迁移选项的更多详细信息,请参见第 8.4.4.18 节,“密钥环命令选项”。
使用指示源和目标密钥库以及迁移是离线还是在线的密钥迁移选项启动迁移服务器,可能还有其他选项。请牢记以下考虑事项:
- 可能需要其他服务器选项,例如两个密钥环插件的配置参数。例如,如果
keyring_file
是源或目标,则必须设置keyring_file_data
系统变量,如果密钥环数据文件位置不是默认位置。还可能需要其他非密钥环选项。指定这些选项的一种方法是使用--defaults-file
命名包含所需选项的选项文件。 - 迁移服务器期望路径名选项值为完整路径。相对路径名可能不会按您的预期解析。
- 调用服务器以密钥迁移模式启动的用户不得是
root
操作系统用户,除非使用--user
选项指定一个非root
用户名来以该用户身份运行服务器。 - 以密钥迁移模式运行的服务器的用户必须具有读取和写入任何本地密钥环文件的权限,例如基于文件的插件的数据文件。
如果您以不同于通常用于运行 MySQL 的系统帐户调用迁移服务器,则可能会创建对服务器在正常操作期间无法访问的密钥环目录或文件。假设mysqld通常以mysql
操作系统用户运行,但您以isabel
登录时调用迁移服务器。迁移服务器创建的任何新目录或文件都归isabel
所有。当以mysql
操作系统用户运行的服务器尝试访问由isabel
拥有的文件系统对象时,后续启动将失败。
为避免此问题,请将迁移服务器作为root
操作系统用户启动,并提供--user=*
user_name*
选项,其中*user_name
*是通常用于运行 MySQL 的系统帐户。或者,在迁移后,使用chown、chmod或类似命令检查与密钥环相关的文件系统对象,并根据需要更改其所有权和权限,以便运行服务器可以访问这些对象。
离线迁移两个密钥环插件之间的示例命令行(在一行上输入命令):
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*
若要执行将目标设置为密钥环组件而不是密钥环插件的迁移,请指定--keyring-migration-to-component
选项,并将组件命名为--keyring-migration-destination
选项的值。
从密钥环插件迁移到密钥环组件的离线迁移示例命令行:
mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --keyring-migration-to-component --keyring-migration-source=keyring_file.so --keyring-migration-destination=component_keyring_encrypted_file.so
请注意,在这种情况下,未指定keyring_encrypted_file_password
值。组件数据文件的密码列在组件配置文件中。
从密钥环插件迁移到密钥环组件的在线迁移示例命令行:
mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --keyring-migration-to-component --keyring-migration-source=keyring_file.so --keyring-migration-destination=component_keyring_encrypted_file.so --keyring-migration-host=127.0.0.1 --keyring-migration-user=root --keyring-migration-password=*root_password*
密钥迁移服务器执行以下迁移操作:
- (仅在线迁移)使用连接选项连接到运行中的服务器。
- (仅在线迁移)在运行中的服务器上禁用
keyring_operations
。 - 加载源和目标密钥环插件/组件库。
- 将密钥从源密钥库复制到目标密钥库。
- 卸载源和目标密钥环插件/组件库。
- (仅在线迁移)在运行中的服务器上启用
keyring_operations
。 - (仅在线迁移)断开与运行中的服务器的连接。
如果在密钥迁移过程中发生错误,则目标密钥库将恢复到迁移前的状态。
成功进行在线密钥迁移操作后,可能需要重新启动运行中的服务器:
- 如果运行的服务器在迁移前使用源密钥库,并且在迁移后应继续使用它,则在迁移后无需重新启动。
- 如果运行的服务器在迁移前使用目标密钥库,并且在迁移后应继续使用它,则应在迁移后重新启动以加载所有迁移到目标密钥库中的密钥。
- 如果运行的服务器在迁移前使用源密钥库,但在迁移后应使用目标密钥库,则必须重新配置为使用目标密钥库并重新启动。在这种情况下,请注意,尽管在迁移过程中运行的服务器暂停修改源密钥库,但在迁移和随后的重新启动之间的间隔期间不会暂停。应注意在此间隔期间服务器不要修改源密钥库,因为这样的任何更改将不会反映在目标密钥库中。
使用 mysql_migrate_keyring 实用程序进行密钥迁移
mysql_migrate_keyring 实用程序将密钥从一个密钥环组件迁移到另一个。它不支持涉及密钥环插件的迁移。对于这种类型的迁移,请使用在密钥迁移模式下运行的 MySQL 服务器;参见使用迁移服务器进行密钥迁移。
使用mysql_migrate_keyring执行密钥迁移操作时,确定所需的密钥迁移选项,以指定涉及哪些密钥环组件,以及迁移是离线还是在线的:
- 要指示源和目标密钥环组件及其位置,请指定以下选项:
--source-keyring
:管理要迁移的密钥的源密钥环组件。--destination-keyring
:要将迁移的密钥复制到的目标密钥环组件。--component-dir
:包含密钥环组件库文件的目录。这通常是本地 MySQL 服务器的plugin_dir
系统变量的值。
- 所有三个选项都是必需的。每个密钥库组件名称都是一个组件库文件名,不带任何平台特定的扩展名,如
.so
或.dll
。例如,要使用库文件为component_keyring_file.so
的组件,请将选项指定为--source-keyring=component_keyring_file
。源和目标必须不同,并且mysql_migrate_keyring必须同时支持它们。 - 对于离线迁移,不需要额外的选项。
- 对于在线迁移,某个正在运行的服务器当前正在使用源或目标密钥库。在这种情况下,请指定
--online-migration
选项表示在线迁移。此外,请指定连接选项,指示如何连接到运行的服务器,以便mysql_migrate_keyring可以连接到它并告诉它在迁移操作期间暂停密钥环使用。--online-migration
选项通常与这些连接选项一起使用:
--host
:运行服务器所在的主机。这始终是本地主机,因为mysql_migrate_keyring只能在本地组件管理的密钥库之间迁移密钥。--user
、--password
:用于连接到运行服务器的帐户凭据。--port
:对于 TCP/IP 连接,在运行服务器上连接的端口号。--socket
:对于 Unix 套接字文件或 Windows 命名管道连接,在运行服务器上连接的套接字文件或命名管道。
要查看所有可用选项的描述,请参阅 Section 6.6.8, “mysql_migrate_keyring — Keyring Key Migration Utility”。
启动mysql_migrate_keyring时,需要指定源和目标密钥库以及迁移是离线还是在线,可能还有其他选项。请记住以下几点:
- 调用mysql_migrate_keyring的用户不能是
root
操作系统用户。 - 调用mysql_migrate_keyring的用户必须具有读取和写入任何本地密钥环文件的权限,例如基于文件的插件的数据文件。
如果您以不同于通常用于运行 MySQL 的系统帐户调用mysql_migrate_keyring,可能会创建对运行服务器在正常操作期间无法访问的密钥环目录或文件。假设mysqld通常以mysql
操作系统用户身份运行,但您在isabel
登录时调用mysql_migrate_keyring。mysql_migrate_keyring创建的任何新目录或文件都归isabel
所有。当以mysql
操作系统用户身份运行的服务器尝试访问由isabel
拥有的文件系统对象时,随后的启动将失败。
为避免此问题,请以mysql
操作系统用户的身份调用mysql_migrate_keyring。或者,在迁移后,检查与密钥环相关的文件系统对象,并根据需要使用chown、chmod或类似命令更改它们的所有权和权限,以便运行服务器可以访问这些对象。
假设您想要从component_keyring_file
迁移密钥到component_keyring_encrypted_file
,并且本地服务器将其密钥环组件库文件存储在/usr/local/mysql/lib/plugin
中。
如果没有运行中的服务器正在使用密钥环,允许进行离线迁移。像这样调用mysql_migrate_keyring(在一行中输入命令):
mysql_migrate_keyring --component-dir=/usr/local/mysql/lib/plugin --source-keyring=component_keyring_file --destination-keyring=component_keyring_encrypted_file
如果运行中的服务器正在使用密钥环,则必须执行在线迁移。在这种情况下,必须提供--online-migration
选项,以及指定要连接的服务器和要使用的 MySQL 帐户所需的任何连接选项。
以下命令执行在线迁移。它使用 TCP/IP 连接和admin
帐户连接到本地服务器。命令提示输入密码,您应在提示时输入密码:
mysql_migrate_keyring --component-dir=/usr/local/mysql/lib/plugin --source-keyring=component_keyring_file --destination-keyring=component_keyring_encrypted_file --online-migration --host=127.0.0.1 --user=admin --password
mysql_migrate_keyring执行迁移操作如下:
- (仅限在线迁移)使用连接选项连接到运行中的服务器。
- (仅限在线迁移)在运行中的服务器上禁用
keyring_operations
。 - 加载源和目标密钥库的密钥环组件库。
- 将密钥从源密钥库复制到目标密钥库。
- 卸载源和目标密钥库的密钥环组件库。
- (仅限在线迁移)在运行中的服务器上启用
keyring_operations
。 - (仅限在线迁移)断开与运行中的服务器的连接。
如果在密钥迁移过程中发生错误,则目标密钥库将恢复到迁移前的状态。
在成功的在线密钥迁移操作之后,运行中的服务器可能需要重新启动:
- 如果运行中的服务器在迁移前使用源密钥库,并且在迁移后应继续使用它,则在迁移后无需重新启动。
- 如果在迁移前运行中的服务器使用目标密钥库,并且在迁移后应继续使用它,则应在迁移后重新启动以加载所有迁移到目标密钥库中的密钥。
- 如果在迁移前运行中的服务器使用源密钥库,但在迁移后应使用目标密钥库,则必须重新配置以使用目标密钥库并重新启动。在这种情况下,请注意,尽管在迁移过程中暂停了运行中的服务器对源密钥库的修改,但在迁移和随后的重新启动之间的间隔期间,服务器并未暂停。应注意确保服务器在此间隔期间不修改源密钥库,因为这些更改不会反映在目标密钥库中。
涉及多个运行中的服务器的密钥迁移
在线密钥迁移允许暂停单个运行中的服务器上的密钥环操作。如果多个运行中的服务器正在使用涉及的密钥库,则使用以下过程执行迁移:
- 手动连接到每个运行中的服务器,并设置
keyring_operations=OFF
。这确保没有运行中的服务器正在使用源密钥库或目标密钥库,并满足离线迁移所需的条件。 - 使用迁移服务器或mysql_migrate_keyring为每个暂停的服务器执行离线密钥迁移。
- 手动连接到每个运行中的服务器,并设置
keyring_operations=ON
。
所有运行中的服务器必须支持keyring_operations
系统变量。任何不支持的服务器在迁移前必须停止,并在迁移后重新启动。