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}});

其中:

  • $aIdentityCounter 表中 interface 对应的那条记录的_id
  • $b:上面查到的最大id值。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐