trigger를 통해서 값이 insert되면 외부 프로그램, 혹은 API를 호출하고 싶었다.
그때마다 검색되는 UDF인 sys_exec() 는 my_global.h가 없어 컴파일이 안되어 사용할 수 없는 상황이었다.
(MySQL 5에서는 있었지만 8 혹은 마이너 버전부터 제외한다는 글을 본 것 같다.)
mysql 내부에서 해결하는 것은 포기하고 돌도 돌다 node.js에 binlog를 이용하여 테이블을 감시하는 것을 찾았다.
https://www.npmjs.com/package/@vlasky/mysql-live-select
원래는 목적으로는 특정 레코드의 컬럼까지 감시가 가능한 것 같지만, 나는 테이블만 감시하는 목적으로 사용하려고 했고, 제공된 예제를 아래와 같이 수정하니 목적을 달성할 수 있게 되었다.
const LiveMysql = require('@vlasky/mysql-live-select');
const LiveMysqlKeySelector = require('@vlasky/mysql-live-select/lib/LiveMysqlKeySelector');
const settings = {
host: '호스트주소',
user: '아이디',
password: '비밀번호',
database: 'DB명'
};
const liveConnection = new LiveMysql(settings);
liveConnection
.select('select version()', [], LiveMysqlKeySelector.Index(), [
{
table: '테이블명',
condition: function (row, newRow, rowDeleted) {
if (row && newRow === null) {
if (rowDeleted === false) {
// insert 상황
} else {
// delete 상황
}
} else {
// update 상황
}
return true;
}
}
]);