开发者社区 问答 正文

MysqldResource不适用于MacOS Catalina

自从将操作系统升级到Mac Catalina以来,尝试运行以下命令时出现以下错误:

MysqldResource mysqldResource = new MysqldResource(uri); // Uri - temp db dir
            mysqldResource.start("embedded-mysqld-thread-" + System.currentTimeMillis(), databaseOptions);

看起来问题的根源在于依赖项“ mysql-connector-mxj-db-files”具有32位格式的二进制文件,而catalina不再支持它。

这是我得到的错误:

Exception in thread "embedded-mysqld-thread-1574931580040" com.mysql.management.util.WrappedException: java.io.IOException: Cannot run program "/private/var/folders/l5/4ywgvbbj1kvgvrwxzp6dz82c0000gn/T/test_db_24166997810717/bin/mysqld": error=86, Bad CPU type in executable
        at com.mysql.management.util.Exceptions.toRuntime(Exceptions.java:55)
        at com.mysql.management.util.Exceptions$Block.exec(Exceptions.java:89)
        at com.mysql.management.util.RuntimeI$Default.exec(RuntimeI.java:180)
        at com.mysql.management.util.Shell$Default.run(Shell.java:140)
        at java.lang.Thread.run(Thread.java:748)
    Caused by: java.io.IOException: Cannot run program "/private/var/folders/l5/4ywgvbbj1kvgvrwxzp6dz82c0000gn/T/test_db_24166997810717/bin/mysqld": error=86, Bad CPU type in executable
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
        at java.lang.Runtime.exec(Runtime.java:620)
        at com.mysql.management.util.RuntimeI$Default$1.inner(RuntimeI.java:177)
        at com.mysql.management.util.Exceptions$Block.exec(Exceptions.java:86)
        ... 3 more
    Caused by: java.io.IOException: error=86, Bad CPU type in executable
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
        at java.lang.ProcessImpl.start(ProcessImpl.java:134)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
        ... 6 more

有谁知道mysql-connector-java的替代方法,还是知道在Mac OS Catalina上运行现有依赖项的方法?

展开
收起
垚tutu 2019-11-28 19:26:27 1921 分享 版权
阿里云 AI 助理回答

遇到这个问题是因为MacOS Catalina不再支持32位应用程序,而你所依赖的mysql-connector-mxj-db-files包含的是32位二进制文件。为了解决这个问题,你可以尝试以下几种方法:

  1. 使用MySQL Connector/J替代: 如果你的目的是连接到MySQL数据库并执行SQL操作,而不是运行嵌入式MySQL服务器,那么推荐使用mysql-connector-java。这是MySQL官方提供的JDBC驱动,用于在Java应用中与MySQL数据库交互。你可以在项目的构建工具(如Maven或Gradle)中添加对应的依赖来替换当前的mysql-connector-mxj

    • Maven示例:

      <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.23</version> <!-- 使用最新的稳定版本 -->
      </dependency>
      
    • Gradle示例:

      implementation 'mysql:mysql-connector-java:8.0.23' // 使用最新的稳定版本
      
  2. 寻找64位版本的嵌入式MySQL库: 尽管mysql-connector-mxj主要用于嵌入式MySQL服务,但考虑到Catalina对32位的支持问题,如果确实需要嵌入式数据库功能,可以探索是否有针对macOS Catalina提供64位版本的类似库。不过,据我所知,MySQL官方已不再积极维护mysql-connector-mxj,转向推荐使用更标准的部署方式。

  3. Docker容器化运行MySQL: 另一个绕过本地操作系统限制的方法是使用Docker容器来运行MySQL。这样,你可以在任何支持Docker的系统上运行标准化的MySQL环境,无论其底层操作系统如何。这要求你对Docker有一定的了解,并且项目部署时也需要考虑Docker的集成。

  4. 调整开发环境: 如果可能的话,考虑在不强制升级到Catalina的系统上进行开发,比如继续使用较早版本的macOS或者在虚拟机中安装支持32位应用的系统专门用于此开发需求。

综上所述,最直接且兼容性好的解决方案是采用mysql-connector-java作为数据库连接手段,除非有特殊需求必须使用嵌入式MySQL服务。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答