Backup

在 docker 卷恢復:無法訪問文件“$libdir/timescaledb-1.6.0”:沒有這樣的文件或目錄

  • June 17, 2021

我正在嘗試將 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 更新到更高版本,這一點很重要,因為您需要使用多個圖像才能獲得目前的最新版本。

一般來說,為了避免混淆,最好使用帶有特定版本標籤的圖像。

引用自:https://dba.stackexchange.com/questions/286559