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

Ruby 2.7.2连接MySQL 8.0.22失败,gem安装编译错误求助

问题分析与解决方案

首先肯定你的判断:这确实是版本兼容问题,不需要降级Ruby或MySQL就能解决——问题出在你尝试安装的mysql和dbd-mysqlgem是非常老旧的维护停滞版本,完全不兼容MySQL 8.0和Ruby 2.7.x的API变更。

为什么会出现编译错误?

你的编译日志里的几个核心问题都指向版本不匹配:

  • MySQL 8.0移除了my_bool类型(替换为标准C的bool/_Bool),但旧mysqlgem还在依赖这个类型
  • MySQL 8.0废弃了MYSQL_SECURE_AUTH、MYSQL_SET_CLIENT_IP等常量,旧gem的代码里还在引用它们
  • Ruby 2.7.x移除了rb_cFixnum常量(统一合并到rb_cInteger),旧gem的扩展代码还在使用这个已被移除的API

这些旧gem(比如mysql最后一次更新是2013年)已经停止维护,完全适配不了你当前的环境。

无需降级,用当前版本实现连接的方案

你可以改用维护活跃、适配新版本的驱动gem,分两种场景:

场景1:直接使用MySQL驱动(推荐)

放弃旧的mysqlgem,改用mysql2——这是目前Ruby生态中最主流、支持MySQL 8.0和Ruby 2.7+的驱动:

  1. 先卸载失败安装的旧gem:
    gem uninstall mysql dbd-mysql
    
  2. 安装Ubuntu下的MySQL开发依赖(编译gem需要):
    sudo apt-get update && sudo apt-get install libmysqlclient-dev
    
  3. 安装mysql2gem:
    gem install mysql2
    
  4. 基础连接示例:
    require 'mysql2'
    
    client = Mysql2::Client.new(
      host: 'localhost',
      username: 'your_username',
      password: 'your_password',
      database: 'your_database'
    )
    
    # 测试查询
    results = client.query('SELECT 1 + 1 AS sum')
    results.each do |row|
      puts row['sum'] # 输出2
    end
    

场景2:继续使用DBI框架

如果你一定要用DBI(数据库独立接口),可以用dbd-mysql2gem替代老旧的dbd-mysql,它基于mysql2驱动实现了DBI接口:

  1. 完成上述场景1的前3步(安装mysql2和依赖)
  2. 安装dbd-mysql2:
    gem install dbd-mysql2
    
  3. DBI连接示例:
    require 'dbi'
    
    dbh = DBI.connect('DBI:Mysql2:your_database:localhost', 'your_username', 'your_password')
    begin
      stmt = dbh.prepare('SELECT 1 + 1 AS sum')
      stmt.execute
      stmt.fetch do |row|
        puts row['sum'] # 输出2
      end
    ensure
      dbh.disconnect if dbh
    end
    

额外提示

如果连接MySQL 8.0时遇到认证相关错误(比如caching_sha2_password不兼容),可以在连接时指定认证插件:

  • 对于mysql2:添加default_auth: 'mysql_native_password'参数
  • 对于DBI:在连接字符串后追加;default_auth=mysql_native_password

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:04:34