天天看點

Yapi資料庫遷移後無法建立的問題解決方案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

這個表中:

其中:

  • $a

    IdentityCounter

    表中

    interface

    對應的那條記錄的

    _id

  • $b

    :上面查到的最大id值。