Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nacos2.0.2升级到2.2.0数据库发生变化,数据无法迁移 #10639

Closed
wps0721 opened this issue Jun 14, 2023 · 8 comments
Closed

nacos2.0.2升级到2.2.0数据库发生变化,数据无法迁移 #10639

wps0721 opened this issue Jun 14, 2023 · 8 comments
Labels
contribution welcome kind/enhancement Category issues or prs related to enhancement.

Comments

@wps0721
Copy link

wps0721 commented Jun 14, 2023

nacos2.0.2数据库表
CREATE TABLE his_config_info (
id bigint(64) unsigned NOT NULL,
nid bigint(20) unsigned NOT NULL AUTO_INCREMENT,
data_id varchar(255) NOT NULL,
group_id varchar(128) NOT NULL,
app_name varchar(128) DEFAULT NULL COMMENT 'app_name',
content longtext NOT NULL,
md5 varchar(32) DEFAULT NULL,
gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
src_user text,
src_ip varchar(50) DEFAULT NULL,
op_type char(10) DEFAULT NULL,
tenant_id varchar(128) DEFAULT '' COMMENT '租户字段',
PRIMARY KEY (nid),
KEY idx_gmt_create (gmt_create),
KEY idx_gmt_modified (gmt_modified),
KEY idx_did (data_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';

nacos2.2.0数据库表
CREATE TABLE his_config_info (
id bigint(20) unsigned NOT NULL, #更新字段
nid bigint(20) unsigned NOT NULL AUTO_INCREMENT,
data_id varchar(255) NOT NULL,
group_id varchar(128) NOT NULL,
app_name varchar(128) DEFAULT NULL COMMENT 'app_name',
content longtext NOT NULL,
md5 varchar(32) DEFAULT NULL,
gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
src_user text,
src_ip varchar(50) DEFAULT NULL,
op_type char(10) DEFAULT NULL,
tenant_id varchar(128) DEFAULT '' COMMENT '租户字段',
encrypted_data_key text NOT NULL COMMENT '秘钥', ##新增字段
PRIMARY KEY (nid),
KEY idx_gmt_create (gmt_create),
KEY idx_gmt_modified (gmt_modified),
KEY idx_did (data_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';

版本升级一共有3张表发生了变化
由于新增字段不为null,旧的语句无法插入?官方是否有数据迁移的工具或脚本?

@wilsonwu
Copy link
Contributor

目前没有相关工具,建议人工解决表差异后进行升级。

@KomachiSion
Copy link
Collaborator

可以添加一个默认值给encrypted_data_key,比如default ''。

@KomachiSion KomachiSion added contribution welcome kind/enhancement Category issues or prs related to enhancement. labels Jun 15, 2023
@Daydreamer-ia
Copy link
Contributor

Daydreamer-ia commented Jun 19, 2023

可以添加一个默认值给encrypted_data_key,比如default ''。

BLOB, TEXT, GEOMETRY or JSON column can't have a default value if mysql in STRICT_TRANS_TABLES sql_mode, and STRICT_TRANS_TABLES is the default mode for mysql

@KomachiSion
Copy link
Collaborator

encrypted_data_key 有必要是text吗? 需要这么长吗? 这里可能确实要讨论下。

首先代码对于不需要加密的给的值是'', 那么默认值应该就是'', 如果text不允许默认值,那可以考虑下是否需要text这么大,我理解一个加密用的key,应该不会太长吧。

@Daydreamer-ia
Copy link
Contributor

encrypted_data_key 有必要是text吗? 需要这么长吗? 这里可能确实要讨论下。

首先代码对于不需要加密的给的值是'', 那么默认值应该就是'', 如果text不允许默认值,那可以考虑下是否需要text这么大,我理解一个加密用的key,应该不会太长吧。

感觉也是,但是现在确实也是 text,如果直接变更类型不知道会不会出现版本不兼容问题

@KomachiSion
Copy link
Collaborator

我觉得应该还好, 正常使用不会有差很多的情况,实在不行就varchar(1024),主要是要让升级的用户没那么难受。同时尽量兼容。

如果现在用户使用的已经是text了,那可以选择不变。

@Daydreamer-ia
Copy link
Contributor

我觉得应该还好, 正常使用不会有差很多的情况,实在不行就varchar(1024),主要是要让升级的用户没那么难受。同时尽量兼容。

如果现在用户使用的已经是text了,那可以选择不变。

这个新增的字段是 NOT NULL 的,由于 TEXT 类型的限制,无法设置为 '',是否要把 NOT NULL 去掉?

@KomachiSion
Copy link
Collaborator

NOT NULL 去掉影响可能比较大, 代码中大量用到这个字段,哪里如果没有做好处理就会NPE。

相对来说,改为varchar(1024)的影响会更小,这个字段主要存储的是加解密用的key或者token, 一般不会太长。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
contribution welcome kind/enhancement Category issues or prs related to enhancement.
Projects
None yet
Development

No branches or pull requests

4 participants