MySQL Error number: MY-013841; Symbol: ER_PERSISTED_VARIABLES_KEYRING_SUPPORT_REQUIRED; SQLSTATE: HY000 报错 故障修复 远程处理

文档解释

Error number: MY-013841; Symbol: ER_PERSISTED_VARIABLES_KEYRING_SUPPORT_REQUIRED; SQLSTATE: HY000

Message: Keyring has to be loaded through manifest file in order to support secure storage for persisted variables

错误说明

MY-013841,也称为ER_PERSISTED_VARIABLES_KEYRING_SUPPORT_REQUIRED,是MySQL在版本8.0.15中新增加的错误代码,是指使用MySQL持久变量时,必须要支持keyring。目前,MySQL有多种建立持久变量的方法:MySQL Enterprise预安装,包含keyring的认证插件;使用MySQL Linus操作系统提供的keyring服务;使用支持的持久化安全存储的第三方的keyring服务。

常见案例

MY-013841错误通常发生在多个节点集群或多实例上,用户会在每个节点上安装MySQL,并试图使用持久化变量,但是在每个实例之间,持久化变量的值必须一致,因此必须使用keyring来确保这种一致性。但是,如果没有正确启用keyring,就会出现错误MY-013841,从而使MySQL不能连接到其他节点,从而引发失败。

解决方法

第一步,在MySQL管理器中启用keyring服务。可以在MySQL中使用以下命令:

GRANT INSERT ON mysql.keyring_* TO ”@’localhost’ IDENTIFIED BY ”;

GRANT SELECT ON mysql.keyring_* TO ‘’@’localhost’ IDENTIFIED BY ‘’;

第二步,创建存储keyring部分的表。可以使用以下命令:

CREATE TABLE ‘mysql’.’keyring_file’(

‘file_name’ VARCHAR(255) NOT NULL,

‘file_data’ BLOB NOT NULL,

‘create_time’ TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (‘file_name’)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

第三步,使用keyring服务。创建存储变量的表,使用以下命令:

CREATE TABLE ‘mysql’.’persisted_variables’(

‘persisted_variable_name’ VARCHAR(128) NOT NULL,

‘persisted_variable_value’ BLOB NOT NULL,

‘last_update’ DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (‘persisted_variable_name’)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

然后,在MySQL Shell中使用以下命令来创建变量:

INSTALL PERSISTED VARIABLE ‘myvar’ USING KEYRING;

最后,在MySQL Shell中使用以下命令来设置变量的值:

SET PERSISTED ‘myvar’ = ‘myvalue’;

以上三步便可以正确安装keyring服务,从而解决MY-013841错误。


数据运维技术 » MySQL Error number: MY-013841; Symbol: ER_PERSISTED_VARIABLES_KEYRING_SUPPORT_REQUIRED; SQLSTATE: HY000 报错 故障修复 远程处理