如何将Redmine的PostgreSQL数据库从2.4.2迁移至3.2.1
从Redmine 2.4.2迁移PostgreSQL数据库到3.2.1的完整指南
我帮你梳理下从Redmine 2.4.2迁移PostgreSQL数据库到3.2.1的完整流程——这俩版本跨了好几个大版本,数据库结构变化不小,不能直接导数据就完事,得按步骤来:
一、先做好备份,确保数据安全
这一步绝对不能省,万一迁移出问题还能回滚:
- 先停掉Redmine 2.4.2的服务,避免备份过程中有新数据写入:
systemctl stop redmine(根据你实际的服务管理命令调整) - 备份PostgreSQL数据库,替换成你的数据库用户名和库名:
pg_dump -U redmine_user -d redmine_db > redmine_242_backup.sql - 同时备份Redmine的核心文件目录(上传附件、插件这些):
tar -czf redmine_files_backup.tar.gz /path/to/redmine-2.4.2/{uploads,plugins}
二、准备目标环境的Redmine 3.2.1
在新服务器(或者同一服务器的隔离目录)搭好3.2.1的基础环境:
- 安装对应版本的Ruby:Redmine 3.2.1推荐Ruby 2.2.x到2.3.x,别用太高版本,避免兼容性问题
- 创建新的PostgreSQL数据库和用户:
sudo -u postgres createdb -O redmine_user redmine_321_db sudo -u postgres psql -c "ALTER USER redmine_user WITH PASSWORD 'your_password';" - 下载并解压Redmine 3.2.1安装包,配置
config/database.yml指向刚创建的新数据库 - 运行
bundle install安装所有依赖,确保没有报错
三、导入旧数据到新数据库
把旧版本的数据迁移到新库:
- 将备份的SQL文件导入新数据库:
psql -U redmine_user -d redmine_321_db < redmine_242_backup.sql - 解压之前备份的文件包,把
uploads目录复制到3.2.1的对应路径:tar -xzf redmine_files_backup.tar.gz -C /path/to/redmine-3.2.1/ - 设置文件权限,确保Web服务器能访问:
chown -R www-data:www-data /path/to/redmine-3.2.1/uploads - 注意:插件先别急着复制,很多旧插件可能不兼容3.2.1,等核心迁移完成后再逐一测试安装
四、执行数据库结构升级
这是关键一步,让旧数据适配3.2.1的新结构:
- 切换到Redmine 3.2.1的目录,设置生产环境变量:
export RAILS_ENV=production - 运行数据库迁移任务,自动升级结构:
bundle exec rake db:migrate - 清理缓存和会话数据,避免旧缓存干扰:
bundle exec rake tmp:cache:clear tmp:sessions:clear - 如果有兼容3.2.1的插件,复制插件目录后运行插件迁移:
bundle exec rake redmine:plugins:migrate
五、验证迁移效果
启动服务后,一定要全面测试:
- 启动Redmine 3.2.1服务:
systemctl start redmine - 登录后台,检查核心数据:项目列表、问题记录、用户信息、附件是否都正常显示
- 测试核心功能:创建新问题、上传附件、生成报表、修改用户权限,确保没有报错
- 如果遇到问题,查看生产日志
log/production.log定位原因,常见问题比如插件不兼容、Ruby版本不匹配、数据库权限不足
重要注意事项
- 双重备份:迁移前数据库和文件都要备份,最好把备份文件放到另一台服务器
- 测试环境先行:先在测试环境完整跑一遍迁移流程,确认没问题再操作生产环境
- 插件兼容性:提前查好你用的插件是否有3.2.1的兼容版本,不兼容的话要么找替代插件,要么考虑修改插件代码
- PostgreSQL版本:Redmine 3.2.1要求PostgreSQL 9.1及以上,原环境如果用了更低版本,要确保目标环境的PostgreSQL版本符合要求
内容的提问来源于stack exchange,提问作者user79074
相关产品推荐
相关产品推荐

