canal来实现mysql的数据同步


当前第2页 返回上一页

6.将数据库变更整理成自己的数据格式发送到kafka等消息队列,供消息队列的消费者进行消费。

  • 工作原理

canal-php 是 Canal 的 php 客户端,它与 Canal 是采用的Socket来进行通信的,传输协议是TCP,交互协议采用的是 Google Protocol Buffer 3.0。

  • 工作流程

image.png

  • 使用组件安装,此处我有一个laravel框架,直接在laravel里面安装使用了,相关代码贴出

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

# 安装组件canal-php

 composer require xingwenge/canal_php

# 编写脚本监听

<?php

 

namespace App\\\\Console\\\\Commands;

use xingwenge\\\\canal_php\\\\CanalClient;

use xingwenge\\\\canal_php\\\\CanalConnectorFactory;

use xingwenge\\\\canal_php\\\\Fmt;

use Illuminate\\\\Console\\\\Command;

 

ini_set('display_errors', 'On');

error_reporting(E_ALL);

class CanalDemo extends Command

{

    /**

     * The name and signature of the console command.

     *

     * @var string

     */

    protected $signature = 'CanalDemo';

 

    /**

     * The console command description.

     *

     * @var string

     */

    protected $description = '测试canal';

 

    /**

     * Create a new command instance.

     *

     * @return void

     */

    public function __construct()

    {

        parent::__construct();

    }

 

    /**

     * Execute the console command.

     *

     * @return mixed

     */

    public function handle()

    {

        try {

            $client = CanalConnectorFactory::createClient(CanalClient::TYPE_SOCKET_CLUE);

            # $client = CanalConnectorFactory::createClient(CanalClient::TYPE_SWOOLE);

 

            $client->connect("172.17.0.5", 11111);//此处修改为自己的配置

            $client->checkValid();

            $client->subscribe("1001", "test", ".*\\\\\\\\..*");//对应启动容器时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;

        }

 

    }

 

}复制代码

  • 更改数据

image.png

  • 监听结果

image.png

相关免费学习推荐:mysql视频教程

以上就是canal来实现mysql的数据同步的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

canal来实现mysql的数据同步

更多相关阅读请进入《canal》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...