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数据库:
- 先把运行的6.5容器停了:
docker stop sonarqube_6.5 - 再备份一次6.5的MySQL数据(双重保险,不怕一万就怕万一):
mysqldump -u sonar -p sonar > sonar_6.5_pre_upgrade_dump.sql - 拉6.7.3的镜像:
docker pull sonarqube:6.7.3-community - 启动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 - 启动后别着急登后台,等个几分钟,SonarQube会自动跑数据库迁移脚本,看日志里出现
Database migration successful再停 - 登录6.7.3后台,再核对一遍数据:项目、历史记录、质量规则都没问题,这步就算成了
三、本地把数据从MySQL迁到PostgreSQL(为7.1铺路)
SonarQube官方不支持直接跨数据库迁移,所以得用备份导入的方式,步骤如下:
- 导出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 ./把文件拷到本地 - 本地搭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 - 启动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后台看数据,确认没问题就行
- 先停掉之前的6.7.3容器,再启动一个连PostgreSQL的:
四、本地升级到7.1版本
现在数据已经在PostgreSQL上了,升级7.1就简单了:
- 停掉6.7.3的容器:
docker stop sonarqube_6.7.3_postgres - 备份PostgreSQL数据:
docker exec sonar-postgres pg_dump -U sonar sonar > sonar_6.7.3_postgres_dump.sql - 拉7.1的镜像:
docker pull sonarqube:7.1-community - 启动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 - 还是等日志里出现迁移成功的提示,然后登录7.1后台,把所有功能都过一遍:项目分析、质量规则、用户权限,都正常就说明本地测试通了
五、迁移到新服务器的PostgreSQL
本地测试没问题,就可以上生产了:
- 新服务器上装PostgreSQL 9.6,创建sonar用户和对应的数据库,权限给足
- 把本地的
sonar_6.7.3_postgres_dump.sql传到新服务器,导入到PostgreSQL:psql -U sonar sonar < sonar_6.7.3_postgres_dump.sql - 新服务器上启动SonarQube 7.1,配置好PostgreSQL的连接参数,启动后等会儿(其实本地已经完成7.1的迁移了,这里启动很快)
- 验证新服务器的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
相关产品推荐
相关产品推荐

