使用Canal实现PHP应用程序与MySQL数据库的实时数据同步

目录
  • canal简介
  • 安装
  • 配置
  • 启动
  • 安装php与canal连接的组件
  • 简单示例
  • 结果展示

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的权限
canal.instance.dbUsername=canal
canal.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;
}

结果展示

到此这篇关于使用Canal实现PHP应用程序与MySQL数据库的实时数据同步的文章就介绍到这了,更多相关PHP Canal内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于mysql主备切换canal出现的问题解决

    通过配置VIP,在进行主备切换时,出现的报错信息: 1.当主备节点当前binlog文件名称相同时,原主节点的position小于主备切换后的position,出现如下报错: 2020-07-02 15:08:09,332 INFO [destination = 1-236 , address = /192.168.3.100:3306 , EventParser] MysqlConnection:293 | Register slave RegisterSlaveCommandPacket[re

  • Canal监听MySQL的实现步骤

    目录 1.Mysql数据库开启binlog模式 2.Docker下Canal容器安装 3.Canal Client项目搭建 1.Mysql数据库开启binlog模式 注意:Mysql容器,此处Mysql版本为5.7 #进入容器 docker exec -it mysql /bin/bash #进入配置目录 cd /etc/mysql/mysql.conf.d #修改配置文件 vi mysqld.cnf (1) 修改mysqld.cnf配置文件,添加如下配置: log-bin=mysql-bin

  • MySQL高性能实现Canal数据同步神器

    目录 简介 配置MySQL centos7 安装 canal java客户端 简介 Canal是阿里巴巴基于Java开源的数据同步工具.平时业务场景使用比较多的如下: 同步数据到ES.Redis缓存中. 数据同步. 业务需要监听数据. 图片来源阿里巴巴github仓库:https://github.com/alibaba/canal 配置MySQL 跟配置主从复制类似. 数据执行如下命令: -- 给canal单独创建用户 用户名:canal 密码:123456 create user 'cana

  • mysql-canal-rabbitmq 安装部署超详细教程

    原文 1.1. 开启 MySQL 的 binlog 日志 1.修改 my.cnf 或 my.ini(windows), 添加配置项: # binlog 日志存放路径 log-bin=D:\env\mysql-5.7.28-winx64\binlog # 日志中记录每一行数据被修改的形式 binlog-format=ROW # 当前机器的服务 ID, 如果为集群时不能重复 server_id=1 2.重启 mysql 服务后, 查看配置变量是否生效: mysql> show variables l

  • 详解监听MySQL的binlog日志工具分析:Canal

    Canal是阿里巴巴旗下的一款开源项目,利用Java开发.主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL. GitHub地址:https://github.com/alibaba/canal 在介绍Canal内部原理之前,首先来了解一下MySQL Master/Slave同步原理: MySQL master启动binlog机制,将数据变更写入二进制日志(binary log, 其中记录叫做二进制日志事件binary log events,可以通过sho

  • 使用canal监控mysql数据库实现elasticsearch索引实时更新

    业务场景 使用elasticsearch作为全文搜索引擎,对标题.内容等,实现智能搜索.输入提示.拼音搜索等 elasticsearch索引与数据库数据不一致,导致搜索到不应被搜到的结果,或者搜不到已有数据 索引相关业务,影响其他业务操作,如索引删除失败导致数据库删除失败 为了减少对现有业务的侵入,基于数据库层面,对信息表进行监控,但需要索引的字段变动时,更新索引 由于使用的是mysql数据库,故决定采用alibaba的canal中间件 主要是监控信息基表base,监控这一张表的数据变动,mq消

  • 基于Docker结合Canal实现MySQL实时增量数据传输功能

    Canal的介绍 Canal的历史由来 在早期的时候,阿里巴巴公司因为杭州和美国两个地方的机房都部署了数据库实例,但因为跨机房同步数据的业务需求 ,便孕育而生出了Canal,主要是基于trigger(触发器)的方式获取增量变更.从2010年开始,阿里巴巴公司开始逐步尝试数据库日志解析,获取增量变更的数据进行同步,由此衍生出了增量订阅和消费业务. 当前的Canal支持的数据源端MySQL版本包括:5.1.x .5.5.x .5.6.x.5.7.x.8.0.x. Canal的应用场景 目前普遍基于日

  • MySQL 到Oracle 实时数据同步

    目录 第一步:配置MySQL 连接 第二步:配置 Oracle连接 第四步:进行数据校验 其他数据库的同步操作 摘要:很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.本文亲测了一种方式,可以非常方便地完成 MySQL 数据实时同步到Oracle,跟大家分享一下,希望对你有帮助. 本次 MySQL 数据实时同步到 Oracle大概只花了几分钟就完成.使用的工具是Tapdata Cloud ,这个工具是永久免费

  • MySQL 到 ClickHouse 实时数据同步实操

    摘要: 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.我自己亲测了一种方式,可以非常方便地完成 MySQL 数据实时同步到ClickHouse,跟大家分享一下,希望对你有帮助. MySQL 到 ClickHouse 实时数据同步实操分享 本次 MySQL 数据实时同步到ClickHouse大概只花了几分钟就完成.使用的工具是Tapdata Cloud ,这个工具是永久免费的. @[TOC](MySQL 到

  • MySQL 到Oracle 实时数据同步

    目录 第一步:配置MySQL 连接 第二步:配置 Oracle连接 第四步:进行数据校验 其他数据库的同步操作 摘要:很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.本文亲测了一种方式,可以非常方便地完成 MySQL 数据实时同步到Oracle,跟大家分享一下,希望对你有帮助. 本次 MySQL 数据实时同步到 Oracle大概只花了几分钟就完成.使用的工具是Tapdata Cloud ,这个工具是永久免费

  • 如何在Java程序中访问mysql数据库中的数据并进行简单的操作

    在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文. 创建一个javaProject,并输入如下java代码: package link; import java.sql.*; /** * 使用JDBC连接数据库MySQL的过程 * DataBase:fuck, table:person: * 使用myeclipse对mysql数据库进行增删改查的基本操作. */ public

  • 微信小程序访问mysql数据库流程详解

    目录 1 开通云上的mysql 2 创建自定义连接器 3 创建云函数 4 安装依赖 5 出参映射 6 在小程序中使用连接器 总结 1 开通云上的mysql 经过询价,我发现阿里云的数据库是比较便宜的,新人购买非常划算.对于爱学习的博主来说,果断购买一个. 按照操作指引购买后,云会帮你创建一系列的环境,在控制台就可以看到属于自己的实例 点击操作列上的管理,就可以创建我们自己的数据库.配置的步骤是先创建数据库的账号 然后创建一个数据库 都设置好之后就可以登录数据库,创建表,加数据了 刚创建好的数据库

  • MySQL数据库结构和数据的导出和导入

    正在看的db2教程是:MySQL数据库结构和数据的导出和导入. 导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将被导出. 通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表. 注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据

  • python连接mysql数据库并读取数据的实现

    1.安装pymysql包 pip install pymysql 注: MySQLdb只支持python2,pymysql支持python3 2.连接数据 import pymysql import pandas as pd from pandas import DataFrame as df conn = pymysql.Connect( host = 'IP地址', port = 端口号, user = '用户名', passwd = '用户密码', db = '数据库名称', charse

  • Node.js下向MySQL数据库插入批量数据的方法

    项目(nodejs)中需要一次性插入多笔数据到数据库,数据库是mysql的,由于循环插入的性能太差,就像使用批量插入的方法提高数据的插入性能. 批量插入的数据库的表结构如下: 1.数据库连接 var mysql = require('mysql'); // 数据库信息 var connection = mysql.createConnection({ host : 'localhost', user : '数据库用户名', password : '数据库登录密码', database : '操作

  • java实现连接mysql数据库单元测试查询数据的实例代码

    1.按照javaweb项目的要求逐步建立搭建起机构,具体的类包有:model .db.dao.test; 具体的架构详见下图: 2.根据搭建的项目架构新建数据库test和数据库表t_userinfo并且添加对应的测试数据; (这里我使用的是绿色版的数据库,具体的下载地址:http://pan.baidu.com/s/1mg88YAc) 具体的建立数据库操作详见下图: 3.编写包中的各种类代码,具体参考代码如下: UserInfo.java /** * FileName: UserInfo.jav

  • MySQL数据库的实时备份知识点详解

    前言 数据库实时备份的需求很常见,MySQL本身提供了 Replication 机制,摘译官方介绍如下: MySQL Replication 可以将一个主数据库中的数据同步到一个或多个从数据库中.并且这个同步过程默认以异步方式工作,不需要保持主从数据库的实时连接(即允许连接中断).同时允许自定义配置需同步的数据库及数据表. MySQL Replication 的优点及应用场景如下: 1.通过 MySQL Replication 实现负载均衡与读写分离(主数据库仅更新,从数据库仅读取),提升数据库

随机推荐