PHP、MySQL数据变化监听

Canael

mysql本身是支持主从的(master slave),原理就是master产生的binlog日志记录了所有的增删改语句,将binlog发送到slave节点进行执行即可完成数据的同步。

canal是阿里开源的一个中间件,它就是通过解析binlog来完成数据变更的监听的。

https://github.com/alibaba/canal

 可以看到,canal是这样工作的:canal有一个server工程,该server自己伪装为mysql的一个slave节点,然后向master请求所有的变更日志。同时canal有一个client工程,通过添加client的sdk,我们就可以在项目里监听到server端传来的数据变更信息,从而达到监听数据变化的目的。

   安装Canal

在这里https://github.com/alibaba/canal/releases,下载canal releases包,如https://github.com/alibaba/canal/releases/download/canal-1.0.22/canal.deployer-1.0.22.tar.gz。

这个就是server端,下载后解压,如图

 

打开conf/example下的instance.properties文件,编辑

 

#################################################
## mysql serverId
canal.instance.mysql.slaveId = 1234

# position info
canal.instance.master.address = 127.0.0.1:3306
canal.instance.master.journal.name =  
canal.instance.master.position = 
canal.instance.master.timestamp = 

#canal.instance.standby.address = 
#canal.instance.standby.journal.name =
#canal.instance.standby.position = 
#canal.instance.standby.timestamp = 

# username/password
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
canal.instance.defaultDatabaseName = test
canal.instance.connectionCharset = UTF-8

# table regex
canal.instance.filter.regex = .*\\..*
# table black regex
canal.instance.filter.black.regex =  

#################################################

 

address设置为mysql的连接地址,defaultDatabaseName设置为自己要监听的库名,如test。

在mysql命令行,创建一个新用户,作为slave

 

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

 

对应配置文件里的canal用户。到此配置完毕。

执行bin目录下的startup.sh

 

 

启动后可以在logs目录下查看日志。在example目录下的example.log,如果没有报错,说明启动成功。

 

转载:https://www.csdn.net/gather_2d/MtTaMgwsMTI2NC1ibG9n.html

 

PHP客户端

PHP版本采用5.6版本,在在命令行执行composer命令:

composer require xingwenge/canal_php

待命令执行完成后会发现所在目录下会下载了很多文件:

 

 

 

 

用phpstom打开所在文件夹,修改vendor\xingwenge\canal_php\src\sample\client.php文件

 

 

 

 

require要修改保证你能引用到自动加载的php文件,地址端口配置成你的服务端信息。然后运行此文件

 

 

 

 

可在控制台看到如下输出:

插入:

insert into student values(1,'闫绍帅',23,1,'备注');

 

 

 

修改:

update student set name='yanshaoshuai' where id=1;

 

 

 

 

删除:

delete from student where id=1;

 

 

 

 
/** 事件类型 **/
enum EventType {
   EVENTTYPECOMPATIBLEPROTO2 = 0;
    INSERT        =     1;
    UPDATE        =     2;
    DELETE        =     3;
    CREATE    =     4;
    ALTER     =     5;
    ERASE     =     6;
    QUERY     =     7;
    TRUNCATE   =     8;
    RENAME        =     9;
    /**CREATE INDEX**/
    CINDEX    =     10;
    DINDEX        =     11;
    GTID        =       12;
    /** XA **/
    XACOMMIT    =       13;
    XAROLLBACK  =     14;
    /** MASTER HEARTBEAT **/
    MHEARTBEAT  =       15;
}

转载:https://www.cnblogs.com/yanshaoshuai/p/11987112.html

如有涉及版权请及时联系!!

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值