使用Canal实现PHP应用程序与MySQL数据库的实时数据同步
发布:smiling 来源: PHP粉丝网 添加日期:2023-07-11 18:27:02 浏览: 评论:0
Canal是阿里巴巴开源的一个数据同步工具,可实现MySQL数据库到其他数据源的实时同步,PHP应用程序中可轻松使用,提高系统的可靠性和实时性,提供了丰富的API和文档支持。
canal简介
由阿里巴巴开源 github地址:https://github.com/alibaba/canal
Canal是阿里巴巴开源的一个基于MySQL协议的数据同步工具,可以将MySQL数据库中的数据实时同步到其他数据源中。在PHP应用程序中,可以使用Canal轻松实现与MySQL数据库的实时数据同步,减少了数据同步的延迟和数据丢失的风险,提高了系统的可靠性和实时性。
Canal提供了丰富的API和文档支持,可以方便地进行集成和使用
伪装成mysql从服务器,解析mysql的binlog文件
我主要是用来做redis缓存的更新&以及商品订阅降价的通知
安装:
- # 这玩意依赖java
- # java8以后版本的jdk根据 stdout.log 中的报错对 startup.sh 中的执行参数进行更改
- # 我的下载canal位置为 /download/canal
- cd /download/canal
- # 下载 得到 canal.deployer-1.1.5.tar.gz
- wget http://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
- # 解压
- tar -zxvf canal-1.1.5/canal.deployer-1.1.5.tar.gz
- # /download/canal/当前目录结构
- # bin 可执行sh
- # conf 配置
- # lib 包
- # plugin 插件
- # logs 日志 stdout.log 位置: /download/canal/logs/canal/stdout.log
配置:
- # 配置canal上的数据库连接设置
- vim /download/canal/conf/example/instance.properties
- canal.instance.master.address=127.0.0.1:3306
- # 通过mysql show master status 中的 File
- canal.instance.master.journal.name=mysql-bin.000001
- # 通过mysql show master status 中的 Position
- canal.instance.master.position=856
- # 连接mysql的用户名 一定要有读取binlog的权限
- canalcanal.instance.dbUsername=canal
- canalcanal.instance.dbPassword=canal
- # 可以这么创建用户
- CREATE USER 'canal'@'%' IDENTIFIED by 'canal';
- GRANT SELECT,REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
- FLUSH PRIVILEGES
启动
/download/canal/bin/startup.sh
安装php与canal连接的组件
# github地址
https://github.com/xingwenge/canal-php
# 我在laravel中使用,所以选择composer的安装方式
composer require xingwenge/canal_php
简单示例:
- //我在laravel下的public同级下建bin/core.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();
- // $client->subscribe("1001", "example", ".*\\..*");
- $client->subscribe("1001", "example", "laravel.school"); # 设置过滤
- 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;
- }
结果展示:
Tags: Canal PHP+MySQL PHP实时数据同步
- 上一篇:PHP实现异步定时多任务消息推送
- 下一篇:最后一页
相关文章
- ·php+mysql大量用户登录解决方案(2014-09-10)
- ·PHP+MYSQL 出现乱码问号的解决方法(2014-09-10)
- ·php+mysql简单的无限分类栏目(2015-04-04)
- ·php+mysql大量用户登录解决方案分析(2021-05-05)
- ·php+mysql查询优化简单实例(2021-05-08)
- ·php+mysql删除指定编号员工信息的方法(2021-05-08)
- ·使用PHP+MySql实现微信投票功能实例代码(2021-08-11)
- ·PHP+MySQL实现消息队列的方法分析(2021-09-17)
- ·PHP+MySQL+sphinx+scws实现全文检索功能详解(2021-12-09)
- ·深入理解PHP+Mysql分布式事务与解决方案(2022-04-02)
- ·PHP+Mysql分布式事务与解决方案深入理解(2022-04-14)
- ·学习php+mysql+ajax 局部刷新点赞/取消点赞功能(2022-07-22)
- ·实现PHP+Mysql无限分类的方法(2022-07-26)
- ·示例php+mysql查询实现无限下级分类树输出(2022-07-26)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)