点击展开更新日志

2026

03-22

【创建】

nexttime

会有些什么呢(❁´◡`❁)

源起

最开始部署 immich 使用的官方的 docker-compose.yml 文件,因此数据库、redis也都是用的官方镜像,从创建以来都现在一直都没有任何问题,那么为什么想要迁移呢?不知道欸,大概是不喜欢在容器上跑数据库,还是想要更安全的备份方式?总之,就开始了迁移。

迁移环境

迁移前

  • immich-postgres: Docker 容器数据库
  • postgres:PVE VM 部署的数据库,已安装向量扩展

迁移后

  • immich-postgres:停止容器服务
  • postgres:新增 immich 数据库且一切正常

安装向量扩展

⚠️:此章节涉及命令仅在 Debian13.1 PostgreSQL 18环境测试可用,不保证其它发行版及版本可用。

推荐安装 VectorChord > pgvecto.rs > pgvector

官方文档:https://docs.vectorchord.ai/vectorchord/getting-started/installation.html

  1. 已安装 PostgreSQL18

  2. 安装 pgvector

    1
    apt install postgresql-18-pgvector
  3. 安装 vchord

    1
    2
    wget https://github.com/tensorchord/VectorChord/releases/download/1.1.1/postgresql-18-vchord_1.1.1-1_$(dpkg --print-architecture).deb
    sudo apt install ./postgresql-18-vchord_1.1.1-1_$(dpkg --print-architecture).deb
  4. 启用扩展:

    1
    2
    psql -U postgres -c 'ALTER SYSTEM SET shared_preload_libraries = "vchord"'
    sudo systemctl restart postgresql.service
  5. 检查是否启用:

    1
    2
    3
    SHOW shared_preload_libraries;
    CREATE EXTENSION IF NOT EXISTS vchord CASCADE;

迁移步骤

  1. 确认数据库:

    1
    2
    3
    4
    5
    # 进入容器
    docker exec -it immich-postgres bash

    # 查看数据库
    psql -U postgres -l
  2. 导出数据库:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 宿主机执行
    docker exec immich-postgres pg_dump \
    -U postgres \
    -d immich \
    -F c \
    -f /tmp/immich.dump

    # 拷贝至宿主机 /tmp 目录
    docker cp immich-postgres:/tmp/immich.dump /tmp
  3. 传输备份文件:
    用喜欢的方式(scp、本地中转等)传输到 PostgreSQL 虚拟机 /tmp 目录下。

  4. 创建恢复数据库,在数据库虚拟机上执行:

    1
    2
    3
    # 登录数据库创建数据库和用户
    sudo -u postgres psql

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    -- 1. 创建数据库
    CREATE DATABASE immich;

    -- 2. 创建用户并设置密码
    CREATE USER immich WITH PASSWORD '<immich_password>';

    -- 3. 授予用户对数据库的所有权限
    GRANT ALL PRIVILEGES ON DATABASE immich TO immich;

    -- 4. 将数据库所有权转移给 immich 用户(推荐,确保完全控制)
    ALTER DATABASE immich OWNER TO immich;

    \c immich
    -- 授予 schema 权限
    GRANT ALL ON SCHEMA public TO immich;
    ALTER SCHEMA public OWNER TO immich;

    -- 设置默认权限,使未来创建的表自动有权限
    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO immich;
    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO immich;
  5. 恢复数据库:

    1
    pg_restore -U postgres -d immich -v /tmp/immich.dump
  6. 修改 immich 数据库配置,修改 .env 文件:

    1
    2
    3
    4
    5
    DB_HOSTNAME=192.168.1.22
    DB_PORT=5432
    DB_USERNAME=postgres
    DB_PASSWORD=<immich_password>
    DB_DATABASE_NAME=immich
  7. 重启 immich-server:

    1
    2
    docker compose stop immich-postgres
    docker compose restart immich-server
  8. 验证迁移:
    打开 Web 页面,检查是否正常。

备份