You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SonarQube 6.5升级至7.1及跨服务器从MySQL迁移至PostgreSQL咨询

老哥,我帮你把这个SonarQube升级+跨数据库迁移的流程理得明明白白的,结合你用Docker本地测试的计划,咱们一步步来,稳得很:

一、先把本地Docker的6.5实例数据对齐旧服务器

这是所有操作的基础,必须确保本地数据和旧服务器完全一致,不然测试白做:

  • 先从旧服务器的MySQL导出SonarQube数据:mysqldump -u sonar -p sonar > sonar_6.5_dump.sql,输入数据库密码即可
  • 把这个dump文件传到本地,导入到Docker的MySQL容器里:docker cp sonar_6.5_dump.sql your-mysql-container:/tmp/,然后进入容器执行mysql -u sonar -p sonar < /tmp/sonar_6.5_dump.sql
  • 启动6.5的SonarQube容器,登录后台扫一眼:项目数量、历史分析记录、质量指标都和旧服务器对上了再往下走
二、本地先升级到6.7.3 LTS(这步绝对不能省!)

SonarQube的规则就是不能跨LTS版本跳级,6.5直接升7.1肯定炸,所以必须先升到6.7.3这个LTS版本,而且这一步得用原来的MySQL数据库:

  1. 先把运行的6.5容器停了:docker stop sonarqube_6.5
  2. 再备份一次6.5的MySQL数据(双重保险,不怕一万就怕万一):mysqldump -u sonar -p sonar > sonar_6.5_pre_upgrade_dump.sql
  3. 拉6.7.3的镜像:docker pull sonarqube:6.7.3-community
  4. 启动6.7.3容器,连同一个MySQL数据库,记得环境变量要和之前6.5的一致:
    docker run -d --name sonarqube_6.7.3 \
      -p 9000:9000 \
      -e SONARQUBE_JDBC_URL=jdbc:mysql://your-mysql-host:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance \
      -e SONARQUBE_JDBC_USERNAME=sonar \
      -e SONARQUBE_JDBC_PASSWORD=sonar \
      sonarqube:6.7.3-community
    
  5. 启动后别着急登后台,等个几分钟,SonarQube会自动跑数据库迁移脚本,看日志里出现Database migration successful再停
  6. 登录6.7.3后台,再核对一遍数据:项目、历史记录、质量规则都没问题,这步就算成了
三、本地把数据从MySQL迁到PostgreSQL(为7.1铺路)

SonarQube官方不支持直接跨数据库迁移,所以得用备份导入的方式,步骤如下:

  1. 导出6.7.3的备份:登录后台,进「Administration」→「System」→「Backup」,点「Create Backup」,等备份完,文件存在容器的/opt/sonarqube/data/backups目录下,用docker cp sonarqube_6.7.3:/opt/sonarqube/data/backups/your-backup-file.zip ./把文件拷到本地
  2. 本地搭PostgreSQL容器:SonarQube 7.1只支持9.3-9.6版本的PostgreSQL,别搞太高版本,命令如下:
    docker run -d --name sonar-postgres -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -e POSTGRES_DB=sonar postgres:9.6
  3. 启动6.7.3连PostgreSQL,导入备份:
    • 先停掉之前的6.7.3容器,再启动一个连PostgreSQL的:
      docker run -d --name sonarqube_6.7.3_postgres \
        -p 9000:9000 \
        -e SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-postgres:5432/sonar \
        -e SONARQUBE_JDBC_USERNAME=sonar \
        -e SONARQUBE_JDBC_PASSWORD=sonar \
        sonarqube:6.7.3-community
      
    • 容器起来后登录后台,进「Administration」→「System」→「Restore」,选刚才下载的备份文件,点「Restore」,等导入完成
    • 验证下:要么进PostgreSQL容器查projects表,要么直接在SonarQube后台看数据,确认没问题就行
四、本地升级到7.1版本

现在数据已经在PostgreSQL上了,升级7.1就简单了:

  1. 停掉6.7.3的容器:docker stop sonarqube_6.7.3_postgres
  2. 备份PostgreSQL数据:docker exec sonar-postgres pg_dump -U sonar sonar > sonar_6.7.3_postgres_dump.sql
  3. 拉7.1的镜像:docker pull sonarqube:7.1-community
  4. 启动7.1容器连同一个PostgreSQL:
    docker run -d --name sonarqube_7.1 \
      -p 9000:9000 \
      -e SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-postgres:5432/sonar \
      -e SONARQUBE_JDBC_USERNAME=sonar \
      -e SONARQUBE_JDBC_PASSWORD=sonar \
      sonarqube:7.1-community
    
  5. 还是等日志里出现迁移成功的提示,然后登录7.1后台,把所有功能都过一遍:项目分析、质量规则、用户权限,都正常就说明本地测试通了
五、迁移到新服务器的PostgreSQL

本地测试没问题,就可以上生产了:

  1. 新服务器上装PostgreSQL 9.6,创建sonar用户和对应的数据库,权限给足
  2. 把本地的sonar_6.7.3_postgres_dump.sql传到新服务器,导入到PostgreSQL:psql -U sonar sonar < sonar_6.7.3_postgres_dump.sql
  3. 新服务器上启动SonarQube 7.1,配置好PostgreSQL的连接参数,启动后等会儿(其实本地已经完成7.1的迁移了,这里启动很快)
  4. 验证新服务器的SonarQube功能正常,然后把流量切过去,旧服务器就可以停了
几个必须注意的坑
  • 备份!备份!备份! 每一步操作前都要备份数据库,尤其是跨版本、跨数据库的操作,不然哭都来不及
  • 版本兼容性:数据库版本绝对不能乱选,6.7.3和7.1都只支持PostgreSQL 9.3-9.6,用10+版本肯定报错
  • Docker网络:本地测试时,SonarQube容器和数据库容器要在同一个Docker网络里,或者用host模式,不然连不上数据库
  • 内存要够:升级过程中SonarQube需要不少内存,Docker容器可以加-e SONAR_JAVA_OPTS="-Xmx2G -Xms2G"来调JVM内存,避免OOM

内容的提问来源于stack exchange,提问作者aver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:16:52