Sonatype Nexus社区版:EC2上H2数据库迁移至PostgreSQL求助
Nexus Community版从H2手动迁移到PostgreSQL的实操步骤
一、前置准备
- 停止Nexus服务:
sudo systemctl stop nexus(其他启动方式对应执行停止命令) - 备份H2数据库文件:复制
sonatype-work/nexus3/db/nexus.mv.db到安全目录,用于迁移失败时回滚 - 完成PostgreSQL基础配置:
- 进入PostgreSQL命令行:
sudo -u postgres psql - 创建Nexus专用数据库:
CREATE DATABASE nexus WITH ENCODING 'UTF8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' TEMPLATE template0; - 创建数据库用户:
CREATE USER nexus WITH PASSWORD 'your_secure_password'; - 授权用户权限:
GRANT ALL PRIVILEGES ON DATABASE nexus TO nexus; - 退出命令行:
\q
- 进入PostgreSQL命令行:
二、导出H2数据库为SQL脚本
Nexus社区版无内置导出工具,需用对应版本的H2命令行工具操作:
- 下载和Nexus内置版本一致的H2 jar包(比如Nexus 3.60+对应H2 2.2.224)
- 启动H2 Shell:
java -cp h2-xxx.jar org.h2.tools.Shell - 按提示输入连接信息:
- JDBC URL:
jdbc:h2:/绝对路径/sonatype-work/nexus3/db/nexus(注意去掉.mv.db后缀) - 用户名:
sa - 密码:留空(默认无密码)
- JDBC URL:
- 导出SQL脚本:
SCRIPT TO '/tmp/nexus_h2_dump.sql'; - 退出H2 Shell:
EXIT;
三、修改SQL脚本适配PostgreSQL
H2导出的脚本含专属语法,需手动调整:
- 替换所有
AUTO_INCREMENT为GENERATED BY DEFAULT AS IDENTITY(PostgreSQL标准自增语法) - 替换
TIMESTAMP为TIMESTAMPTZ(适配时区,避免时间显示异常) - 删除H2专属配置语句,比如
SET DATABASE ...、ALTER TABLE ... ALTER COLUMN ... RESTART WITH ... - 把
VARCHAR_IGNORECASE替换为VARCHAR(PostgreSQL无此类型,不影响数据导入) - 若遇外键约束报错,可在脚本开头加
SET session_replication_role = 'replica';,结尾加SET session_replication_role = 'origin';临时禁用外键检查
四、导入脚本到PostgreSQL
执行导入命令:psql -U nexus -d nexus -f /tmp/nexus_h2_dump.sql
- 若出现报错,根据提示调整脚本(比如表重复则删除对应DROP TABLE语句,索引重复则跳过)
- 导入完成后,进入psql执行
\dt确认所有表已创建成功
五、配置Nexus连接PostgreSQL
- 编辑Nexus数据存储配置文件:
sonatype-work/nexus3/etc/fabric/nexus-store.properties - 替换原有H2配置为PostgreSQL连接信息:
nexus.datastore.nexus.type=jdbc nexus.datastore.nexus.driverClassName=org.postgresql.Driver nexus.datastore.nexus.url=jdbc:postgresql://localhost:5432/nexus nexus.datastore.nexus.username=nexus nexus.datastore.nexus.password=your_secure_password
- 下载对应版本的PostgreSQL驱动jar包,放到
nexus-3.x.x/lib/system/org/postgresql/postgresql/目录,或直接放入sonatype-work/nexus3/deploy目录(Nexus会自动加载)
六、验证迁移结果
- 启动Nexus服务:
sudo systemctl start nexus - 查看日志
sonatype-work/nexus3/log/nexus.log,确认无数据库连接错误 - 登录Nexus UI,检查仓库、用户、权限等数据是否完整
- 测试核心功能:上传/下载组件、创建仓库、修改用户配置,确保一切正常
内容的提问来源于stack exchange,提问作者Raphaël
相关产品推荐
相关产品推荐

