Yapi資料庫遷移後無法建立的問題解決方案
1.場景
在一個新的伺服器環境全新安裝了yapi後,需要将原有的已經在使用的yapi系統裡的資料導入的新裝的伺服器裡。
即将A伺服器上mongodb裡yapi庫的資料遷移到B伺服器上的mongodb的yapi庫裡。
2.問題
遷移後再yapi中執行分組/項目/分類/接口的建立操作時,可能會遇到伺服器錯誤的提示,看伺服器端終端日志,原因是資料庫主鍵
_id
重複造成的。
3. 原因
- 由于
本身沒有主鍵自動遞增的機制,它預設隻是生成一個随機的mongodb
,objectid
- 是以 yapi 在程式裡自己生成了遞增的
字段,_id
- 每次生成新的
後,就會把這個值存入_id
這個表裡,IdentityCounter
- 下次再生成新的
時就會以這個表裡的count值為基準進行遞增。_id
導入資料的時候,
IdentityCounter
這個表的資料沒有導入成功,就會造成生成新紀錄時的
_id
基準值是從1重新開始的,就會和導入的資料的
_id
重複,繼而報錯。
4. 解決辦法
4.1 重試重新導入 IdentityCounter
表的資料
IdentityCounter
如果導入不成功,則嘗試下面辦法。
4.2 更新 IdentityCounter
表
IdentityCounter
以
interface
表為例,先查詢到導入後
interface
表中
_id
的最大值的那條記錄,記錄下這條記錄的
_id
值。
// mongodb->use yapi;
> db.interface.find().sort({_id: -1}).skip(0).limit(1);
将這條id值更新到
IdentityCounter
這個表中:
其中:
-
:$a
表中IdentityCounter
對應的那條記錄的interface
值_id
-
:上面查到的最大id值。$b