搞定!详解MeterSphere 配置外部Mysql5.7的全过程

3个月前 (02-01) 0 点赞 0 收藏 0 评论 2 已阅读

最近试用了MeterSphere做接口测试平台,感觉使用起来非常方便,最重要的是开源免费!官方文档还是非常详细的,这里我就不多介绍了,感兴趣的同学可以参考:

https://metersphere.io/docs/v2.x/

经过讨论,决定在测试团队推广。由于公司数据库管理策略,数据库必须通过dba 统一管理,所以需要MeterSphere连接外部mysql数据库。数据库迁移过程中主要遇到下面错误:

Caused by: org.flywaydb.core.api.FlywayException: Schema `metersphere` contains a failed migration to version 5 !

接下来我就详细讲述一下,MeterSphere连接外部数据库的操作过程,以及再此过程中解决遇到问题的详细步骤:

修改配置文件

根据官方提示 在/opt/metersphere/.env (该文件是隐藏文件)中修改如下配置,注意标红

# 数据库配置

## 是否使用外部数据库

MS_EXTERNAL_MYSQL=true

## 数据库地址

MS_MYSQL_HOST=mysql

## 数据库端口

MS_MYSQL_PORT=3306

## 数据库库名

MS_MYSQL_DB=metersphere

## 数据库用户名

MS_MYSQL_USER=root

## 数据库密码

MS_MYSQL_PASSWORD=Password123@mysql

然后运行命令

msctl reload

msctl restart

错误现象

自以为会是大功告成,事实则是登录无反应!

查看/opt/metersphere/logs/metersphere/info.log 日志发现问题如下:

Caused by: org.flywaydb.core.api.FlywayException: Schema `metersphere` contains a failed migration to version 5 !

at org.flywaydb.core.internal.command.DbMigrate.migrateGroup(DbMigrate.java:217)

at org.flywaydb.core.internal.command.DbMigrate.lambda$migrateAll$0(DbMigrate.java:141)

at org.flywaydb.core.internal.database.mysql.MySQLNamedLockTemplate.execute(MySQLNamedLockTemplate.java:60)

at org.flywaydb.core.internal.database.mysql.MySQLConnection.lock(MySQLConnection.java:154)

at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.lock(JdbcTableSchemaHistory.java:141)

at org.flywaydb.core.internal.command.DbMigrate.migrateAll(DbMigrate.java:141)

at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:101)

at org.flywaydb.core.Flyway$1.execute(Flyway.java:219)

at org.flywaydb.core.Flyway$1.execute(Flyway.java:170)

at org.flywaydb.core.Flyway.execute(Flyway.java:586)

at org.flywaydb.core.Flyway.migrate(Flyway.java:170)

at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)

... 34 common frames omitted

第一反应是 — 怎么会?我明明按照官网链接一步一步执行的啊!

https://metersphere.io/docs/v2.x/installation/offline_installation/

并协调dba搞了个MySQL5.7 ,怎么还会报db迁移到5的错误呢?

Caused by: org.flywaydb.core.api.FlywayException: Schema `metersphere` contains a failed migration to version 5 !

寻求问题解决方案

于是乎找了metersphere的技术支持,解决方案如下:

首先执行下面的脚本

https://raw.githubusercontent.com/metersphere/metersphere/master/backend/src/main/resources/db/migration/V5__schedule.sql

然后修改metersphere_version 表对应版本的的success值为1,

最后执行命令 msclt reload 重启服务即可

1.这里需要注意的是:执行V5__schedule.sql语句一定让dba找一个最高权限的账号来执行,否者需要各种授权,非常的麻烦!

2.如果执行过程中有各种表已经创建,列已经存在的相关消息,直接忽略即可

3. V5__schedule.sql 执行之前已经执行了很多sql操作,这些语句是在执行下面语句时就已经完成了的!换句话说,V5__schedule.sql是基于下面的语句运行之后再运行的!

msctl reload

msctl restart

最后的总结

如果执行sql语句过程中出现了意想不到的问题。建议如下操作:

1. 删掉库metersphere,然后重新创建库metersphere

2. 执行msctl restart

3. 执行语句V5__schedule.sql

4. 修改metersphere_version 表对应版本的的success值为1

5. 执行msclt reload


本文收录在
0评论

登录

忘记密码 ?

切换登录

注册