为什么 mysql-event 在 Node.js 中不起作用?

问题描述 投票:0回答:4
var MySQLEvents = require('mysql-events');
var dsn = {
  host:     'localhost',
  user:     'root',
  password: '' // no password set that's why keep blank
};
var mysqlEventWatcher = MySQLEvents(dsn);
console.log(mysqlEventWatcher);
var watcher =mysqlEventWatcher.add(
   'myDB.myTable',
  function (oldRow, newRow, event) {
     //row inserted
    if (oldRow === null) {
      //insert code goes here
    }

     //row deleted
    if (newRow === null) {
      //delete code goes here
    }

     //row updated
    if (oldRow !== null && newRow !== null) {
      //update code goes here
    }

    //detailed event information
    console.log(event); // don't matter, it updates, delete or insert
  },
  'Active'
);

https://www.npmjs.com/package/mysql-events

获取代码

当我尝试打印 console.log(mysqlEventWatcher); , 它打印出类似的东西

{ started: false,
  zongji: {},
  databases: [],
  tables: {},
  columns: {},
  events: [ 'tablemap', 'writerows', 'updaterows', 'deleterows' ],
  triggers: [],
  dsn: { host: 'localhost', user: 'root', password: '' },
  settings: {},
  connect: [Function: connect],
  add: [Function: add],
  remove: [Function: remove],
  stop: [Function: stop],
  reload: [Function: reload],
  includeSchema: [Function: includeSchema] }

编写此代码后,我更新了在 mysqlEventWatcher 中实现的特定表('myTable'),然后它不会转到该方法,因为我正在打印事件。

我不知道我错过了什么

javascript mysql node.js npm mysql-event
4个回答
2
投票

我添加这个答案是因为它首先出现在 Google 上。希望这会对某人有所帮助。

我使用 XAMPP 作为我的服务器,为了让它正常工作,我编辑了

my.cnf
文件,可以在此处找到该文件:
xampp\mysql\bin
,其中包含以下内容:

我启用了

log-bin=mysql-bin
的每个实例(通过删除
#
)并写入了
binlog_format=row

编辑:
服务器 ID = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = 行


1
投票
  1. 确保您在 mysql 服务器上启用了 binlog,并且 binlog 格式为 ROW https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html

  2. 尝试删除“Active”并确保设置正确的数据库和表名称以运行第一个测试

    var watcher =mysqlEventWatcher.add(
    'your_database_name.your_table_name',
    function (oldRow, newRow, event) {}
    );
    

1
投票

除了检查 @nguyendn 答案之外,请尝试独立运行 ZongJi 以检查其功能

var ZongJi = require('zongji');
var zongji = new ZongJi({
  host     : 'localhost',
  user     : 'user',
  password : 'password',
  debug: true
});

zongji.on('binlog', function(evt) {
  evt.dump();
});

如果ZongJi不工作,mysql-event也将不工作。对我来说,ZongJi 只在本地主机上工作,而不是远程 IP


0
投票

执行Mysql查询来更改db用户权限:

. 上的复制从属、复制客户端授予“root”@“localhost”; 将 SELECT ON . 授予 'root'@'localhost';

为我做了

© www.soinside.com 2019 - 2024. All rights reserved.