关于 Node.js 监控 MySQL 表问题请教
发布于 10 年前 作者 dragon 5044 次浏览 最后一次编辑是 8 年前

现在有一个应用,三台服务器,其中:db 服务器是 MySQL,第二台服务器提供 Web 访问,收集用户提交的信息,另一台服务器部署Node.js,实时监控 MySQL 的一个表,如果发现表中有新的数据,则 Node.js 进行后台处理。现在的问题是,Node.js 如何能实时监控MySQL 是否有新的信息插入,Node.js 能否胜任?效率如何?需要长连接 MySQL?

6 回复

为什么不直接在业务脚本处理中创建任务,Node.js进行队列处理?

当初的想法是出于安全考虑,第三台服务器只负责跟db服务器链接,不提供对外服务,用第三台服务器为db的某个字段进行可逆加密,不直接在web服务器业务处理时加密是为了防止web服务器被攻破造成加密程序以及数据被黑客获取。想用node.js实时监控mysql,发现有提交新的数据就运行加密进行更新,刚接触node.js,所以想请教大家有没有node.js实时监控mysql的实例

尝试过Mysql的trigger吗?如果需要trigger调用外部程序,谷歌下 mysqludf

多谢,最开始考虑过用mysql的触发器,因为刚接触node.js,所以想尝试一下node.js基于数据库的实时监控,现在来看可能node.js不太适合,再次感谢。

一般来说需要数据库触发的后台处理, 都可以在数据库脚本内实现, 如果实在不行, 可以用触发器调用外部程序, 比如nodejs app, 例:

DELIMITER @@
 
CREATE TRIGGER Test_Trigger  --创建触发器
AFTER INSERT ON MyTable  --在MyTable表中有插入后触发
FOR EACH ROW 
BEGIN
 DECLARE cmd CHAR(255);
 DECLARE result int(10); --外部程序返回值
 SET cmd=CONCAT('node ', '/home/user/app/task.js', ' param1, param2'); --根据你的实际情况组装成命令行格式字符串
 SET result = sys_exec(cmd); --执行外部程序, 必须带整型一个返回值
END;
@@
DELIMITER ;

参考: call External Program form MySQL

多谢您的Example,已经决定用mysql的触发器了

回到顶部