【问题标题】:How can i listen MySQL database changes in real time with Node.js or PHP如何使用 Node.js 或 PHP 实时监听 MySQL 数据库更改
【发布时间】:2017-10-04 03:24:17
【问题描述】:

我需要创建一个具有多个数据库的系统,其中一个是主数据库,该数据库只需将结构更改复制到其他数据库,例如:

当我在系统中注册新用户时,系统会自动创建主数据库的结构副本,但该数据库不会将插入的寄存器或更新发送到主数据库,只有主数据库在更新时将所有结构更改发送到从数据库,因此我需要创建一个脚本或实现工具来捕获数据库更新以实时执行所有从数据库的更新。

我向 AWS 支持发送了一个问题,他们建议我实现一个 phyton 脚本或集成另一个允许进行二进制日志流以将这些更改复制到从属数据库的库。


AWS 支持回答:

您可以在此处遵循本指南[1],您可以跳过 Kinesis(AWS 服务)部分,直接编写代码,而不是将其放入 Kinesis 流中。您需要在数据库集群上启用 binlog 并收听日志。根据事件,您可以添加逻辑以对子数据库执行数据库更新。为了复制您的主数据库架构,我建议在任何子数据库需要配置和导入该架构之前使用 mysqldump CLI 工具导出主数据库的架构。然后根据您编写的逻辑,使用 binlog 脚本将更改推送到您的子数据库。

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

【问题讨论】:

  • 听起来您已经有了答案?
  • 如果你想在每次有slave更新的时候更新master,这不是违背了拥有slave的目的吗?
  • 不要解释清楚,我只需要将master数据库的结构变化发送给slave,但我不能用mysql复制来做,我试图这样做但我找不到解决方案

标签: php mysql node.js amazon-web-services binlog


【解决方案1】:

我解决了集成Zongji一个npm包的问题,​​Zongji检测binlog上的变化并捕获执行的查询,我用这个包做了一个脚本来监听binlog事件并将这些变化应用到从数据库,这里我会附上我的脚本示例。

总机仓库: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();
});

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多