Backup
在 docker 卷恢復:無法訪問文件“$libdir/timescaledb-1.6.0”:沒有這樣的文件或目錄
我正在嘗試將 TimescaleDB 數據從一台 ubuntu 機器恢復到另一台 ubuntu 機器。在兩台機器上,我們都通過 docker 部署了 TimescaleDB,並使用了相同的標籤。
使用的 Docker 鏡像:
timescale/timescaledb:latest-pg11
我正在使用以下命令為舊機器上的 docker 卷創建一個 tar 文件以進行備份:
docker run --rm -v $VOLUME_NAME:/volume -v /tmp:/backup busybox tar cvf /backup/$VOLUME_NAME.tar -C /volume ./
我也在新機器上使用以下命令進行恢復:
docker run --rm -v $VOLUME_NAME:/volume -v $(pwd):/backup busybox sh -c "rm -rf /volume/* ; tar -C /volume/ -xvf /backup/$VOLUME_BACKUP_FILE"
數據庫恢復成功,但是當我看到 docker 日誌時,出現以下錯誤:
2021-03-06 06:28:55.064 UTC [239] ERROR: could not access file "$libdir/timescaledb-1.6.0": No such file or directory 2021-03-06 06:28:55.064 UTC [239] STATEMENT: CREATE TABLE "__migration_lock" ("id" int NOT NULL, CONSTRAINT "PK_1312144c987e032cce38cfa00a2" PRIMARY KEY ("id"))
你知道為什麼會出現這個錯誤以及如何解決它嗎?
謝謝
標記為 的 Docker 映像
latest
在您檢索它時包含最新版本(這是 Docker 的約定),因此源中的映像包含與目前映像不同的 TimescaleDB 版本(1.6.0)latest
(2.1.0 現在是最新版本)。這會導致缺少二進製文件的錯誤,因為圖像不一樣並且目前latest
圖像不包含前一段時間最新的 1.6.0。最簡單的解決方案是下載與源中具有相同 TimescaleDB 版本的圖像。我相信timescale/timescaledb:1.6.0-pg11應該適用於您的情況。
\dx
您可以通過呼叫每個數據庫來仔細檢查正在使用的 TimescaleDB 版本。請注意,TimescaleDB 的圖像通常包含 5 個舊版本,然後再標記一個。因此,如果您使用帶標籤的圖像
1.7.3-pg11
,它也可能會起作用,因為它預計包含1.6.0-pg11
. 如果您要將 TimescaleDB 版本從 1.6.0 更新到更高版本,這一點很重要,因為您需要使用多個圖像才能獲得目前的最新版本。一般來說,為了避免混淆,最好使用帶有特定版本標籤的圖像。