Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么mysql事件在node.js中不起作用?_Javascript_Mysql_Node.js_Npm_Mysql Event - Fatal编程技术网

Javascript 为什么mysql事件在node.js中不起作用?

Javascript 为什么mysql事件在node.js中不起作用?,javascript,mysql,node.js,npm,mysql-event,Javascript,Mysql,Node.js,Npm,Mysql Event,从 当我尝试打印console.log(mysqlEventWatcher), 它印的是这样的东西 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 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'
);
编写完这段代码后,我更新了我在mysqlEventWatcher中实现的特定表('myTable'),然后它就不会转到那个方法,因为我正在打印事件

我不知道我错过了什么

  • 确保在mysql服务器上启用了binlog,并且binlog格式为

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

    { 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] }
    

  • 除了检查@nguyendn answer外,请尝试运行ZongJi standalone以检查其功能

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

    如果ZongJi不工作,mysql事件也将不工作。对我来说,ZongJi只是在本地主机上工作,而不是在远程IP上工作。我之所以添加这个答案,是因为它首先出现在Google上。希望这能帮助一些人

    我使用XAMPP作为我的服务器,为了让它正常工作,我编辑了
    my.cnf
    文件,可以在这里找到:
    XAMPP\mysql\bin
    ,如下所示:

    我启用了
    log bin=mysql bin
    (通过删除
    #
    )的每个实例,并使用
    binlog\u format=row
    编写

    编辑:
    服务器id=1
    log_bin=/var/log/mysql/mysql bin.log

    binlog_format=row

    我遇到了相同的问题,binlog处于打开状态且为row格式,用户具有正确的权限,但用户没有响应callback@MichaelLWatson请确保将保留时间设置为非空。示例:mysql.rds\u set\u配置('binlog保留时间',24小时);顺便说一句:我正在使用mysq事件来监听我的主表上的更改,以便进行审计,它与远程ip配合得很好。@nguyendn您能解释一下如何启用“binlog”吗@GilEpshtain您可以在MySQL配置文件
    server id=0 binlog format=ROW expire\u logs\u days=14 log bin=/var/lib/MySQL/bin log
    中启用binlog,然后您可以通过运行此查询来检查状态
    显示类似“log\u bin”的变量(使用mysql cli)。这里有更多细节
    
    var ZongJi = require('zongji');
    var zongji = new ZongJi({
      host     : 'localhost',
      user     : 'user',
      password : 'password',
      debug: true
    });
    
    zongji.on('binlog', function(evt) {
      evt.dump();
    });