You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu22.04环境mysql2 0.5.3连接报Segmentation fault故障

mysql2 0.5.3 connect阶段段错误排查方案

该空指针段错误核心原因是Ubuntu 22.04源里的libmariadb-dev-compat兼容包和mysql2 0.5.3版本存在ABI不兼容问题,编译时链接到该库后,调用connect方法会访问空内存地址触发崩溃,和本地mysql-server运行状态无关,按以下步骤修复即可:

  • 彻底清理之前安装的mariadb相关开发依赖,避免编译时链接到错误的库:
sudo apt remove --purge libmariadb-dev libmariadb-dev-compat -y
sudo apt autoremove -y
  • 安装官方MySQL客户端开发依赖:
sudo apt update
sudo apt install default-libmysqlclient-dev build-essential -y

注意:网上旧教程提到的安装libmariadbclient-dev的方案仅适用于Ubuntu 20.04及更早版本,22.04版本源中已经移除该包,替换提供的libmariadb-dev-compat没有完全实现libmysqlclient的内部结构,编译0.5.x版本mysql2时链接到该库会导致内存访问错误,不要使用

  • 清理旧的mysql2 gem编译缓存,强制重新编译链接到正确的库:
    如果你直接用gem管理依赖,执行:
gem uninstall mysql2 -v 0.5.3
gem install mysql2 -v 0.5.3 -- --with-mysql-config=/usr/bin/mysql_config

如果你用bundler管理项目依赖,执行:

bundle config set --local build.mysql2 --with-mysql-config=/usr/bin/mysql_config
bundle pristine mysql2
  • 验证修复效果,先排除ActiveRecord/Rake层面的干扰,直接运行最小测试脚本:
require "mysql2"
# 先走TCP连接测试,避开本地socket配置问题
client = Mysql2::Client.new(
  host: "127.0.0.1",
  username: "你的数据库账号",
  password: "你的数据库密码",
  database: "任意已存在的库名"
)
puts client.query("SELECT VERSION() AS version").first

如果TCP连接正常,本地socket连接仍然报错,检查项目数据库配置文件里的socket路径,Ubuntu 22.04下MySQL默认socket路径为/var/run/mysqld/mysqld.sock,路径配置错误时老版本mysql2不会抛出明确配置错误,会直接触发段错误。

  • 若以上操作后问题仍存在,直接升级mysql2到0.5.5及以上的0.5.x稳定版本,0.5.3版本未适配Ubuntu 22.04的新版系统库,存在已知兼容问题,升级小版本不会影响现有业务代码兼容性。

内容的提问来源于stack exchange,提问作者Karthick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:16:04