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
如有涉及版权请及时联系!!