Yapi数据库迁移后无法新建的问题解决方案
·
Yapi数据库迁移后无法新建的问题解决方案
1.场景
在一个新的服务器环境全新安装了yapi后,需要将原有的已经在使用的yapi系统里的数据导入的新装的服务器里。
即将A服务器上mongodb里yapi库的数据迁移到B服务器上的mongodb的yapi库里。
2.问题
迁移后再yapi中执行分组/项目/分类/接口的新建操作时,可能会遇到服务器错误的提示,看服务器端终端日志,原因是数据库主键_id 重复造成的。
3. 原因
- 由于
mongodb本身没有主键自动递增的机制,它默认只是生成一个随机的objectid, - 所以 yapi 在程序里自己生成了递增的
_id字段, - 每次生成新的
_id后,就会把这个值存入IdentityCounter这个表里, - 下次再生成新的
_id时就会以这个表里的count值为基准进行递增。
导入数据的时候,IdentityCounter 这个表的数据没有导入成功,就会造成生成新纪录时的_id 基准值是从1重新开始的,就会和导入的数据的_id重复,继而报错。
4. 解决办法
4.1 重试重新导入IdentityCounter表的数据
如果导入不成功,则尝试下面办法。
4.2 更新IdentityCounter 表
以interface 表为例,先查询到导入后interface表中 _id的最大值的那条记录,记录下这条记录的_id值。
// mongodb->use yapi;
> db.interface.find().sort({_id: -1}).skip(0).limit(1);
将这条id值更新到 IdentityCounter这个表中:
> db.interface.update({_id: $a} ,{$set: {count: $b}});
其中:
$a:IdentityCounter表中interface对应的那条记录的_id值$b:上面查到的最大id值。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)