[alibaba/nacos]nacos2.0.2升级到2.2.0数据库发生变化,数据无法迁移

2025-10-30 690 views
6

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,旧的语句无法插入?官方是否有数据迁移的工具或脚本?

回答

1

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

2

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

5

可以添加一个默认值给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

6

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

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

4

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

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

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

8

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

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

2

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

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

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

5

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

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