2

我正在尝试使用 mysql-event 模块在我的应用程序中监听 mysql 更改事件。为此我知道了,我需要确定宗记模块是否工作正常。

所以这是我到目前为止所尝试的:

--我的服务器.js

                          var ZongJi = require('zongji');

                          var zongji = new ZongJi({
                            host     : 'db_host',
                            user     : 'root',
                            password : 'kakaun',
                            insecureAuth: true,
                            debug: true
                          });
                          zongji.start({
                            includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows']
                          });
                          zongji.on('binlog', function(evt) {
                            console.log("+++++Inside binlog event++++");
                            evt.dump();
                          });
                          process.on('SIGINT', function() {
                            console.log('Got SIGINT.');
                            zongji.stop();
                            process.exit();
                          });

(示例来自https://github.com/nevill/zongji/blob/master/example.js

我已经完美地为 mysql 配置了 binlog,它也在创建日志。

但是对于我的节点应用程序中的任何更改事件,我无法为上述控制台记录任何内容。

当我打开 debug=true 选项时,我可以看到对于数据库日志中的每次更改,我都会得到以下调试日志:

<-- BinlogHeader
BinlogHeader {}

<-- BinlogHeader
BinlogHeader {}

<-- BinlogHeader
BinlogHeader {}

所以,这意味着我的应用程序能够成功地联系到 mysql 的 binlog,但是我怎么知道哪一行发生了变化或者发生了什么变化?因为 zongzi.on('binlog', [Function]) 没有打印任何东西。

4

1 回答 1

3

所以经过大量调试,我发现了问题所在。所以这是我忽略并且做错了的事情。我想发布我的错误,以便其他用户可以避免这样做。

默认情况下,如果你为 mysql 启用 binlog,它将是基于事件的日志记录,这是 zongji 模块无法理解的。 https://dev.mysql.com/doc/internals/en/binary-log-overview.html

因此,您需要启用基于行的日志记录,以获取有用的信息(了解发生了什么变化)。

可以使用 mysql 配置文件的 my.cnf 文件中的这个额外语句启用基于行的日志记录:

binlog_format    = row

添加此内容并重新启动 mysql 服务器后,一切都开始正常工作。

于 2017-12-19T09:09:22.087 回答