Как я могу слушать изменения базы данных MySQL в реальном времени с Node.js или переполнением стека

Мне нужно создать систему с несколькими базами данных. Одной из них является база данных master. Эта база данных должна реплицировать только структурные изменения в другие базы данных, например:

Когда я регистрирую нового пользователя в системе, система автоматически создает структурную реплику базы данных master, но эта база данных не отправляет вставленные регистры или обновления в базу данных master, только база данных master при обновлении отправляет все структурные изменения в ведомые базы данных. Поэтому мне нужно создать сценарий или реализовать инструмент для сбора обновлений базы данных, чтобы выполнять обновления на всех ведомых в режиме реального времени.

Я отправил вопрос в службу поддержки AWS, и они рекомендовали мне реализовать скрипт phyton или интегрировать другую библиотеку, которая позволяет выполнять потоковую передачу бинлога для репликации этих изменений в базы данных ведомого устройства.


Ответ поддержки AWS:

Вы можете следовать этому руководству здесь [1], вы можете пропустить часть Kinesis (сервис AWS) и сделать так, чтобы ваш код записывался непосредственно, а не помещался в поток Kinesis. Вам нужно будет включить binlog на вашем кластере БД и прослушать журнал. В зависимости от событий вы можете добавить в логику для выполнения обновлений БД на дочерних базах. Чтобы реплицировать вашу основную схему базы данных, я бы рекомендовал использовать инструмент CLI mysqldump для экспорта схемы вашей основной базы данных, прежде чем какие-либо дочерние базы данных должны будут подготовить и импортировать эту схему. Затем используйте сценарий binlog для внесения изменений в ваши дочерние базы данных в зависимости от написанной вами логики.

[1] https://aws.amazon.com/blogs/database/streaming-changes-in-a-database-with-amazon-kinesis/

-2

Решение

Я решил свою проблему интеграции Zongji в пакет npm, Zongji обнаружил изменения в binlog и перехватил выполненный запрос, я сделал скрипт, используя этот пакет, чтобы прослушать события binlog и применить эти изменения к ведомой базе данных, здесь я добавлю пример моего сценария.

Zongji хранилище: https://github.com/nevill/zongji.

var ZongJi = require('zongji');
var mysql = require('mysql');

var query;

var connection = mysql.createConnection({
host: '192.168.1.18',
port: '3310',
user: 'root',
password: 'admin'
});

var zongji = new ZongJi({
host: '192.168.1.18',
port: '3310',
user: 'root',
password: 'admin'
});

zongji.on('binlog', function(evt) {

if (evt.query != 'BEGIN') {

query = evt.query

query = query.replace(/`tuadmin`/g, '`demo`');

connection.query(query, function(error, results, fields) {

});

console.log(query);
}
});

zongji.start({
includeEvents: ['query']
});

process.on('SIGINT', function() {
console.log('Got SIGINT.');
zongji.stop();
process.exit();
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]