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

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

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

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


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

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

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

1 ответ

Решение

Я решил свою проблему интеграции 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();
});

Другие вопросы по тегам