自从将操作系统升级到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上运行现有依赖项的方法?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到这个问题是因为MacOS Catalina不再支持32位应用程序,而你所依赖的mysql-connector-mxj-db-files
包含的是32位二进制文件。为了解决这个问题,你可以尝试以下几种方法:
使用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' // 使用最新的稳定版本
寻找64位版本的嵌入式MySQL库: 尽管mysql-connector-mxj
主要用于嵌入式MySQL服务,但考虑到Catalina对32位的支持问题,如果确实需要嵌入式数据库功能,可以探索是否有针对macOS Catalina提供64位版本的类似库。不过,据我所知,MySQL官方已不再积极维护mysql-connector-mxj
,转向推荐使用更标准的部署方式。
Docker容器化运行MySQL: 另一个绕过本地操作系统限制的方法是使用Docker容器来运行MySQL。这样,你可以在任何支持Docker的系统上运行标准化的MySQL环境,无论其底层操作系统如何。这要求你对Docker有一定的了解,并且项目部署时也需要考虑Docker的集成。
调整开发环境: 如果可能的话,考虑在不强制升级到Catalina的系统上进行开发,比如继续使用较早版本的macOS或者在虚拟机中安装支持32位应用的系统专门用于此开发需求。
综上所述,最直接且兼容性好的解决方案是采用mysql-connector-java
作为数据库连接手段,除非有特殊需求必须使用嵌入式MySQL服务。