immich 数据库迁移
点击展开更新日志
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
-
已安装 PostgreSQL18
-
安装
pgvector:1
apt install postgresql-18-pgvector
-
安装
vchord:1
2wget 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 -
启用扩展:
1
2psql -U postgres -c 'ALTER SYSTEM SET shared_preload_libraries = "vchord"'
sudo systemctl restart postgresql.service -
检查是否启用:
1
2
3SHOW shared_preload_libraries;
CREATE EXTENSION IF NOT EXISTS vchord CASCADE;
¶迁移步骤
-
确认数据库:
1
2
3
4
5# 进入容器
docker exec -it immich-postgres bash
# 查看数据库
psql -U postgres -l -
导出数据库:
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 -
传输备份文件:
用喜欢的方式(scp、本地中转等)传输到 PostgreSQL 虚拟机/tmp目录下。 -
创建恢复数据库,在数据库虚拟机上执行:
1
2
3# 登录数据库创建数据库和用户
sudo -u postgres psql1
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; -
恢复数据库:
1
pg_restore -U postgres -d immich -v /tmp/immich.dump
-
修改 immich 数据库配置,修改
.env文件:1
2
3
4
5DB_HOSTNAME=192.168.1.22
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=<immich_password>
DB_DATABASE_NAME=immich -
重启 immich-server:
1
2docker compose stop immich-postgres
docker compose restart immich-server -
验证迁移:
打开 Web 页面,检查是否正常。
¶备份
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Evergarden's Blog!
评论
WalineDisqus

