后续命令默认使用以下环境变量:
# 需要迁移的服务地址 export SOURCE_URL="http://localhost:1933" # serverless 服务地址 export TARGET_URL="https://api.vikingdb.cn-beijing.volces.com/openviking" # 如果本地源端未启用鉴权,可以删除源端命令里的 X-API-Key header。 export SOURCE_API_KEY="<source-account-admin-key-if-used>" # 目标端使用 account API Key。 export TARGET_API_KEY="<remote-account-admin-key>" export EXPORT_DIR="./exports" mkdir -p "${EXPORT_DIR}"
注意:
-H "X-API-Key: ${SOURCE_API_KEY}"。从源端备份全部数据
curl -sS -X POST "${SOURCE_URL}/api/v1/pack/backup" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${SOURCE_API_KEY}" \ -d '{"include_vectors": false}' \ --output "${EXPORT_DIR}/openviking-local.ovpack"
上传备份包到目标端并恢复
TARGET_TEMP_FILE_ID=$( curl -sS -X POST "${TARGET_URL}/api/v1/resources/temp_upload" \ -H "X-API-Key: ${TARGET_API_KEY}" \ -F "file=@${EXPORT_DIR}/openviking-local.ovpack" \ | jq -r ".result.temp_file_id" ) echo "${TARGET_TEMP_FILE_ID}"
如果没有安装 jq,可以直接查看上传接口响应,手动取出 result.temp_file_id。
curl -sS -X POST "${TARGET_URL}/api/v1/pack/restore" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${TARGET_API_KEY}" \ -d "{ \"temp_file_id\": \"${TARGET_TEMP_FILE_ID}\", \"on_conflict\": \"overwrite\" }"
适用于只迁移某个目录,例如:
viking://resources/my-project
从源端导出目录
curl -sS -X POST "${SOURCE_URL}/api/v1/pack/export" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${SOURCE_API_KEY}" \ -d '{ "uri": "viking://resources/my-project", "include_vectors": false }' \ --output "${EXPORT_DIR}/my-project.ovpack"
上传局部包到目标端
TARGET_TEMP_FILE_ID=$( curl -sS -X POST "${TARGET_URL}/api/v1/resources/temp_upload" \ -H "X-API-Key: ${TARGET_API_KEY}" \ -F "file=@${EXPORT_DIR}/my-project.ovpack" \ | jq -r ".result.temp_file_id" ) echo "${TARGET_TEMP_FILE_ID}"
导入到目标端
curl -sS -X POST "${TARGET_URL}/api/v1/pack/import" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${TARGET_API_KEY}" \ -d "{ \"temp_file_id\": \"${TARGET_TEMP_FILE_ID}\", \"parent\": \"viking://resources/\", \"on_conflict\": \"overwrite\" }"
parent 是目标父目录,不是最终目录。上面命令的导入结果是:
viking://resources/my-project