使用 Node.js 跟踪对 MySQL 表的更改

Posted

技术标签:

【中文标题】使用 Node.js 跟踪对 MySQL 表的更改【英文标题】:Track Changes to MySQL table using Node.js 【发布时间】:2012-01-07 00:05:44 【问题描述】:

我正在尝试将 node.js 应用程序集成到现有的 php/mysql 系统中。 node-mysql 用于允许 node.js 访问 MySQL 数据库。 MySQL 数据库中名为 tableA 的表每 10 分钟更新一次新数据。

问题:使用节点,我需要节点服务器在tableA 更新时不断检查tableA 的更改。有什么好的方法可以做到这一点?

我在想如果我使用setInterval(checkDb(tableA), 10*60*1000),或者无限循环,checkDbquery 函数可能与数据库更新不一致。

我也碰巧在使用socket.io,所以如果 PHP 甚至可以向 node.js 发送消息,那么 PHP 系统将emit('dbUpdated') 发送到节点服务器是否是一个好方法?

节点代码

var dbCheckQueue = function(callback) 
    client.query('SELECT * from tableA',
                    function(error, results, fields) 
                        if error
                            throw error;
                        callback(results);
                    );


// 10mins-interval checking of table
setInterval(function() 
    dbCheckQueue(function(results) 
        console.log('Fresh meat!')
    );
, 10*60*1000);

【问题讨论】:

【参考方案1】:

理想情况下,您会在完成后从进行更新的地方触发事件。

由于您使用的是套接字,因此您可以创建一个“事件”连接或类似的连接(验证或其他一些方法来表明它正在连接以触发事件),这将连接到您的套接字并触发更新和断开连接。只要您能够创建连接,无论平台如何,都可以从任何地方调用它。连接后,脚本将发送您想要触发的任何命令并断开/完成更新过程。

您可以直接从进行更新的位置执行此操作,也可以使用 sys_exec() 在 mysql 上设置触发器以执行与上述相同的另一个脚本。

【讨论】:

如何从 PHP 中触发它?也许只是一个简单的方法,因为我只需要发送一条单向消息。 您将使用 socket_connect (php.net/manual/en/function.socket-connect.php) 和相关函数 (socket_send) 来连接并发送您的消息。

以上是关于使用 Node.js 跟踪对 MySQL 表的更改的主要内容,如果未能解决你的问题,请参考以下文章

Node.js实现对mysql数据库的crud时报加密方式错误解决方案

有没有办法使用 SQL 或 EXCEL 跟踪两个表的更改?

来自 phpMyAdmin 的跟踪报告的 MySQL 表

Node.js MySql如何知道用户ID以在登录后的查询中使用它

在 Node.js 中处理回滚的 MySQL 事务

Node.js 无法对 MySQL 8.0 进行身份验证