ZBLOG

openresty连接shared-proxy报错 connect to mysql error : Unknown collation: '0'

这个错误通常发生在 OpenResty 通过 shared-proxy(如 ProxySQL、MySQL Router 等中间件)连接 MySQL 时,字符集协商出现问题。以下是详细解决方案:


错误原因分析

  1. 根本原因:中间件代理与MySQL服务端的字符集/collation协商失败
    • Unknown collation: '0' 表示客户端收到了无效的collation ID
    • 常见于:
      • ProxySQL 版本较旧(<2.0)
      • MySQL 8.0+ 使用了新collation (如utf8mb4_0900_ai_ci)
      • OpenResty驱动未正确传递collation参数

解决方案

方案1:强制指定连接参数(推荐)

在 OpenResty 连接配置中显式声明字符集和collation:

  1. local mysql = require "resty.mysql"
  2. local db, err = mysql:new()
  3. local ok, err, errcode, sqlstate = db:connect{
  4. host = "shared-proxy-ip",
  5. port = proxy_port,
  6. user = "user",
  7. password = "password",
  8. database = "db_name",
  9. charset = "utf8mb4", -- 关键参数
  10. collation = "utf8mb4_general_ci", -- 明确指定collation
  11. max_packet_size = 1024 * 1024 -- 避免包大小问题
  12. }

方案2:修改ProxySQL配置

如果使用 ProxySQL,需调整其字符集转发规则:

  1. -- ProxySQL Admin界面执行:
  2. UPDATE mysql_servers SET character_set="utf8mb4" WHERE port=3306;
  3. LOAD MYSQL SERVERS TO RUNTIME;
  4. SAVE MYSQL SERVERS TO DISK;

方案3:升级中间件组件

  1. # ProxySQL >=2.0.x(支持MySQL8.0协议)
  2. apt-get install proxysql --upgrade
  3. # OpenResty驱动更新
  4. luarocks install lua-resty-mysql@0.25 --force

方案4:MySQL服务端降级Collation

临时解决方案(不推荐长期使用):

  1. -- MySQL执行:
  2. ALTER DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

调试技巧

  1. 抓包分析

    1. tcpdump -i any port proxy_port -w mysql.pcap

    用Wireshark检查握手阶段的Character Set字段

  2. 日志检查

    1. SHOW VARIABLES LIKE 'character%';
    2. SHOW VARIABLES LIKE 'collation%';
  3. 测试直接连接: 绕过shared-proxy直连MySQL,确认是否是代理问题。


关键参数说明

参数 推荐值 作用
charset utf8mb4 覆盖默认字符集
collation utf8mb4_general_ci 避免新版本冲突
max_packet_size 1048576 (1MB) 防止大数据包截断

如果仍存在问题,请提供以下信息进一步诊断:

  • OpenResty版本 (nginx -V)
  • Lua驱动版本 (luarocks list)
  • Shared-proxy类型及版本


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23574

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?