京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

php使用Canal监听msyql的过程详解

2024-11-4 11:23| 发布者: ae2942d9| 查看: 165| 评论: 0

摘要: 目次安装Java设置mysql用户权限修改mysql配置安装canal修改实例配置启动和制止php测试canal需要java8去官网下载java8 安装Java [code]#创建目次 mkdir -p /usr/local/java/ #解压到目次 tar zxvf jdk-8u411-linux-x
目次
  • canal需要java8
  • 官网下载java8

在这里插入图片形貌

安装Java

[code]#创建目次 mkdir -p /usr/local/java/ #解压到目次 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/ [/code]

配置环境变量在 /etc/profile 末了参加

[code]export JAVA_HOME=/usr/local/java/jdk1.8.0_411 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin [/code]

使之生效

[code]source /etc/profile[/code]

检察是否安装乐成

[code]java -version [/code]

在这里插入图片形貌

设置mysql用户权限

[code]#创建用户名和密码都为 canal 的用户 create user 'canal'@'%' identified by 'canal'; #授予该用户对全部数据库和表的查询、复制主节点数据的操纵权限 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; #重新加载权限 [/code]

修改mysql配置

[code]vim /etc/my.cnf [/code]

修改部门内容如下

[code] # 开启 binlog log-bin=mysql-bin #master端的ID号,不能和 canal 的 slaveId 重复; server-id=1 #行级,记载每次操纵后每行记载的变革。 binlog-format=row #指定库,缩小监控的范围。 binlog-do-db=test [/code]

检察是否开启主从

[code]show master status; [/code]

在这里插入图片形貌

安装canal

下载最新canal

在这里插入图片形貌

[code]下载 wget https://github.com/alibaba/canal/releases/download/canal-1.1.7/canal.deployer-1.1.7.tar.gz #创建canal目次 mkdir -p /usr/local/canal/ #解压到canal目次 tar -zxvf canal.deployer-1.1.7.tar.gz -C /usr/local/canal/ [/code]

检察canal主配置文件

[code]cat /usr/local/canal/conf/canal.properties [/code]

检察会看到暴露了三个端口和指定了一个实例

[code]canal.admin.port = 11110 canal.port = 11111 canal.metrics.pull.port = 11112 #多个实例使用逗号分隔: canal.destinations = example1,example2, #这里对应/usr/local/canal/conf/example/ canal.destinations = example [/code]

canal.destinations:canal能可以网络多个MySQL数据库数据,每个MySQL数据库都有独立的配置文件控制。详细配置规则: conf/目次下,使用文件夹放置,文件夹名代表一个MySQL实例。canal.destinations用于配置需要监控数据的数据库。如果是多个,使用,隔开。
修改实例配置文件

修改实例配置

[code]vim /usr/local/canal/conf/example/instance.properties [/code]

在文件末了参加

[code]#配置 slaveId ,不能等于 mysql 配置里的 server Id 即可 canal.instance.mysql.slaveId=10 #数据库毗连 canal.instance.master.address=127.0.0.1:3306 #数据库账号密码 canal.instance.dbUsername=canal canal.instance.dbPassword=canal #代表数据库的编码方式 canal.instance.connectionCharset = UTF-8 #设置白名单,这里是监控test库下全部表 canal.instance.filter.regex=test\\..* #设置黑名单,这里设置清除test库下以_noc结尾的表 canal.instance.filter.black.regex=test\\..*_noc [/code]

这个正则表达式 test\.*_noc 的寄义是:

[code]test:精确匹配字符串 "test"。 \\.:匹配一个点(.),因为点在正则表达式中有特别寄义,以是需要使用 \\ 举行转义。 *:匹配零个或多个恣意字符。 _noc:精确匹配字符串 "_noc"。 因此,这个正则表达式可以用来匹配全部以 test. 开头且以 _noc 结尾的字符串。在 Canal 的配置中使用这个正则表达式,就可以实现清除以 test. 开头且以 _noc 结尾的数据库和表,而监控其他数据库和表。 [/code]

比如我们要查询 test库下users表id为3的用户信息,sql语句可以这么写
SELECT * FROM test.users WHERE id = 3;
这里的test.users就是正则要匹配的地方

[code]如果体系是1个 cpu,需要将 canal.instance.parser.parallel 设置为 false[/code]

启动和制止

#启动

[code]/usr/local/canal/bin/startup.sh [/code]

#制止

[code]/usr/local/canal/bin/stop.sh[/code]

检察是否启动乐成

[code]ps -ef | grep canal [/code]

在这里插入图片形貌

php测试

使用 canal-php

[code]composer require xingwenge/canal_php[/code]

新建index.php文件

[code]<?php require __DIR__.'/vendor/autoload.php'; use xingwenge\canal_php\CanalClient; use xingwenge\canal_php\CanalConnectorFactory; use xingwenge\canal_php\Fmt; try { $client = CanalConnectorFactory::createClient(CanalClient::TYPE_SOCKET_CLUE); # $client = CanalConnectorFactory::createClient(CanalClient::TYPE_SWOOLE); $client->connect("127.0.0.1", 11111); $client->checkValid(); //设置过滤tes库t下的全部表 $client->subscribe("1001", "example", "test.*"); while (true) { $message = $client->get(100); if ($entries = $message->getEntries()) { foreach ($entries as $entry) { Fmt::println($entry); } } sleep(1); } $client->disConnect(); } catch (\Exception $e) { echo $e->getMessage(), PHP_EOL; } [/code]

运行php文件

[code]php index.php [/code]

在这里插入图片形貌

eventType:1、是新增行,2、修改行,3、删除行、4、新增表

也可以直接将数据写入rabbitmq

修改conf/canal.properties

[code]vim conf/canal.properties [/code]

修改RabbitMQ配置如下

[code]rabbitmq.host = 127.0.0.1 rabbitmq.virtual.host = / #交换机名称 rabbitmq.exchange =exchange.canal #队列名称 rabbitmq.queue = canal_queue #路由键名 rabbitmq.routingKey = canal-routing-key #账号密码 rabbitmq.username =admin rabbitmq.password =admin #路由模式,这里是严酷模式 rabbitmq.deliveryMode =direct [/code]

修改实例配置conf/example/instance.properties

[code]vim conf/example/instance.properties [/code]

修改部门内容如下

[code]#rabbitmq的路由键配置 #这里与canal.properties里的rabbitmq.routingKey一样 canal.mq.topic=canal-routing-key canal.mq.partition=0 canal.instance.multi.stream.on=false #rabbitmq 的 routing key #dynamic topic route by schema or table regex #canal.mq.dynamicTopic=mytest1.user,topic2:mytest2\\..*,.*\\..* #hash partition config #canal.mq.enableDynamicQueuePartition=false #canal.mq.partitionsNum=3 #canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6 #canal.mq.partitionHash=test.table:id^name,.*\\..* [/code]

以上就是php使用Canal监听msyql的详细内容,更多关于php Canal监听msyql的资料请关注脚本之家别的相关文章!


来源:https://www.jb51.net/program/320730t0r.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 21:13 , Processed in 0.045917 second(s), 18 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部