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错误。