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

Node.js监听MySQL表操作遇认证模式错误的解决求助

解决@rodrigogs/mysql-events与MySQL 8.0的认证协议错误

1. 彻底确认MySQL用户的认证方式为mysql_native_password

@rodrigogs/mysql-events依赖的旧版mysql客户端完全不支持MySQL 8.0默认的caching_sha2_password认证,必须确保你的数据库用户使用mysql_native_password:

ALTER USER '你的用户名'@'你的主机' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;

执行后验证认证方式是否生效:

SELECT user, host, plugin FROM mysql.user WHERE user='你的用户名';

确认返回结果中plugin列的值为mysql_native_password。

2. 在Node.js连接配置中显式指定认证插件

即使用户认证方式已修改,旧客户端可能无法自动识别,需手动在连接选项中指定:

const mysql = require('mysql');
const MySQLEvents = require('@rodrigogs/mysql-events');

const connection = mysql.createConnection({
  host: '你的主机地址',
  user: '你的用户名',
  password: '你的密码',
  authPlugin: 'mysql_native_password' // 关键配置项
});

const instance = new MySQLEvents(connection, {
  startAtEnd: true,
  excludedSchemas: {
    mysql: true
  }
});

3. 修复依赖兼容性问题

@rodrigogs/mysql_events已多年未维护,其内置的mysql依赖版本过低,可手动强制升级兼容版本:

  • 删除项目根目录下的node_modules文件夹和package-lock.json文件
  • 在package.json中手动添加"mysql": "^2.18.1"(旧mysql包的最后稳定兼容版)
  • 重新执行npm install

4. 替代方案:使用维护活跃的监听包

若上述方法仍无效,建议替换为基于mysql2的现代包(如mysql2-events),原生支持MySQL 8.0的认证机制:

const mysql = require('mysql2/promise');
const MySQLEvents = require('mysql2-events');

const run = async () => {
  const connection = await mysql.createConnection({
    host: '你的主机地址',
    user: '你的用户名',
    password: '你的密码'
  });

  const instance = MySQLEvents(connection, {
    startAtEnd: true
  });

  await instance.addTrigger({
    name: '表变更监控',
    expression: '你的数据库名.你的表名',
    statement: MySQLEvents.STATEMENTS.INSERT | MySQLEvents.STATEMENTS.UPDATE,
    onEvent: (event) => {
      console.log('捕获到变更:', event);
    }
  });
};

run();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:26:11