美文网首页学习
搞定!详解MeterSphere 配置外部Mysql5.7的全过

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

作者: 测试开发Kevin | 来源:发表于2022-09-19 10:55 被阅读0次

    最近试用了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

    相关文章

      网友评论

        本文标题:搞定!详解MeterSphere 配置外部Mysql5.7的全过

        本文链接:https://www.haomeiwen.com/subject/fpcportx.html