当前位置: 首页 > 知识库问答 >
问题:

LoadError: MySQL2 gem 问题与不正确的 libmysql 客户端.so.20 版本在 Ubuntu LTS 20.04

丁宏盛
2023-03-14

自从升级到 Ubuntu LTS 20.04(从 LTS 18)以来,我被提升到了更新版本的 MySQL(从 v5.7.3 升级到 8.0.16)。所有数据库和配置都已成功更新,但 MySQL2 Gem 坚持尝试针对较旧版本的 libmysql 客户端(libmysqlclient.so.20 而不是较新的 libmysqlclient.so.21)进行构建。

我已经卸载并重新安装了APT包:mysql-server和libmysqlclient-dev,也卸载并重新安装了MySQL2 gem,但是没有效果。

从下面的数据中可以看出,它似乎仍然错误地链接,我找不到一种方法来使其链接到正确的版本。任何帮助非常感谢。

$ gem list mysql2

*** LOCAL GEMS ***

mysql2 (0.5.3)

$ mysql -v -u *** -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.21-0ubuntu0.20.04.4 (Ubuntu)

$ RAILS_ENV=production bundle exec rails c
Traceback (most recent call last):
     1: from /home/**/**/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2.rb:36:in `<top (required)>'
/home/rails/kwai/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2.rb:36:in `require': libmysqlclient.so.20: cannot open shared object file: No such file or directory - /home/rails/kwai/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.so (LoadError)

$ ldd mysql2.so
    linux-vdso.so.1 (0x00007fffa3b5e000)
    libruby.so.2.6 => /home/***/.rvm/rubies/ruby-2.6.3/lib/libruby.so.2.6 (0x00007f8d4c92d000)
    libmysqlclient.so.20 => not found
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8d4c902000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8d4c710000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8d4c6f4000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8d4c6e9000)
    libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f8d4c663000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8d4c65d000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f8d4c622000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8d4c4d3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8d4cecc000)

$ ls -l /usr/lib/x86_64-linux-gnu/libmy*
-rw-r--r-- 1 root root 9242056 Aug  4 12:39 /usr/lib/x86_64-linux-gnu/libmysqlclient.a
lrwxrwxrwx 1 root root      20 Aug  4 12:39 /usr/lib/x86_64-linux-gnu/libmysqlclient.so -> libmysqlclient.so.21
lrwxrwxrwx 1 root root      25 Aug  4 12:39 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.21 -> libmysqlclient.so.21.1.21
-rw-r--r-- 1 root root 7264264 Aug  4 12:39 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.21.1.21

共有2个答案

巫坚白
2023-03-14

终于解决了。我必须手动删除所有builder和.rvm文件夹中的gem的所有以前副本,然后gem看起来编译正常,一切都恢复正常。

洪安顺
2023-03-14

我删除了

./vendor/bundle/ruby/2.7.0/specifications/mysql2-0.5.3.gemspec
./vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3
./vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2

很管用谢谢

 类似资料:
  • 问题内容: 我创建了一个新的Rails项目,调用 然后当我在目录中运行 我收到关注错误 我见过其他人遇到此错误,但他们通常是linux用户,并且我正在运行Windows。我试图重新安装Rails(railsinstaller.org)和mysql 5.5。我既使用了32位版本,也使用了64位版本 问题答案: 这里似乎已经有几个问题。您尝试过他们的解决方案吗? 相关部分在这里:

  • 好吧,我对Mac和OSX有点陌生,但我选择了一个,这样我就可以用一个对我的Java程序进行一些故障排除,因为我工作的公司使用OSX和Windows机器的组合。我遇到的问题是,当我从Oracle的网站安装Java7时,它更新了首选项菜单,双击.jar文件时显示可以正确执行这些文件,但终端窗口的版本仍然是1.6.0_43,从终端运行相同的.jar文件会导致运行时错误,原因是版本较旧。 当我导航到/li

  • 我刚刚安装了Neo4j桌面,我正在尝试使用连接。NET客户端,问题是当我尝试连接我得到错误404响应(资源未找到)。目前的情况如下: 1) 我已经创建了一个新用户(管理员,具有管理员权限),以取代neo4j用户的使用(我没有该用户的密码)。 2) 使用admin user,我可以使用浏览器成功连接到Neo4j,因此用户看起来还行。 3) 我有一个运行在Neo4j默认数据库下的数据库,我可以从浏览器

  • 用户连接RADIUS客户端; RADIUS客户端又连接到RADIUS服务器。如果客户端似乎无法与服务器连接,请首先检查以下内容: FreeRADIUS知道这个客户吗?检查FreeRADIUS日志文件中的以下行: Wed May 18 17:53:57 2012 : Error: Ignoring request to authentication address * port 1812 from

  • 我希望在调试这个问题时得到一些帮助。如果我将以下JSON发送到后端,它将正常工作: 但是,如果我现在发送以下内容: 我得到了上面的错误。在我的后端代码中,我有以下代码: API 方法签名如下所示: 我认为我遇到的问题是JSON不能被解析为ZonedDateTime。有人对以下两个问题有什么建议吗?( json字符串格式ZonedDateTime自动接受什么时间,( 2)如何创建DTO来解析zone

  • 问题内容: 问题是我需要从提供的文件中构建Web服务客户端。我已将此文件存储在本地文件系统上,并且在将WSDL文件保留在正确的文件系统文件夹中的同时,一切都很好。当我将其部署到服务器上或从文件系统文件夹中删除WSDL时,代理找不到WSDL并引发错误。我已经在网上搜索过,但发现了以下帖子,但仍无法使它起作用: JAX-WS从jar中加载WSDL http://www.java.net/forum/t