亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

php使用Canal監(jiān)聽msyql的過(guò)程詳解

 更新時(shí)間:2024年05月08日 08:26:31   作者:qq_20376949  
這篇文章主要介紹了php使用Canal監(jiān)聽msyql的全過(guò)程,文中通過(guò)圖文和代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工資有一定的幫助,需要的朋友可以參考下

在這里插入圖片描述

安裝Java

#創(chuàng)建目錄
mkdir -p /usr/local/java/
#解壓到目錄
tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/

配置環(huán)境變量在 /etc/profile 最后加入

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

使之生效

source /etc/profile

查看是否安裝成功

java -version

在這里插入圖片描述

設(shè)置mysql用戶權(quán)限

#創(chuàng)建用戶名和密碼都為 canal 的用戶
create user 'canal'@'%' identified by 'canal';
#授予該用戶對(duì)所有數(shù)據(jù)庫(kù)和表的查詢、復(fù)制主節(jié)點(diǎn)數(shù)據(jù)的操作權(quán)限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES; #重新加載權(quán)限

修改mysql配置

vim /etc/my.cnf 

修改部分內(nèi)容如下

 # 開啟 binlog
log-bin=mysql-bin
#master端的ID號(hào),不能和 canal 的 slaveId 重復(fù);
server-id=1
#行級(jí),記錄每次操作后每行記錄的變化。
binlog-format=row
#指定庫(kù),縮小監(jiān)控的范圍。
binlog-do-db=test 

查看是否開啟主從

show master status;

在這里插入圖片描述

安裝canal

下載最新canal

在這里插入圖片描述

下載
wget https://github.com/alibaba/canal/releases/download/canal-1.1.7/canal.deployer-1.1.7.tar.gz
#創(chuàng)建canal目錄
mkdir -p /usr/local/canal/
#解壓到canal目錄
tar -zxvf canal.deployer-1.1.7.tar.gz  -C /usr/local/canal/

查看canal主配置文件

cat /usr/local/canal/conf/canal.properties

查看會(huì)看到暴露了三個(gè)端口和指定了一個(gè)實(shí)例

canal.admin.port = 11110
canal.port = 11111
canal.metrics.pull.port = 11112
#多個(gè)實(shí)例使用逗號(hào)分隔: canal.destinations = example1,example2,
#這里對(duì)應(yīng)/usr/local/canal/conf/example/
canal.destinations = example

canal.destinations:canal能可以收集多個(gè)MySQL數(shù)據(jù)庫(kù)數(shù)據(jù),每個(gè)MySQL數(shù)據(jù)庫(kù)都有獨(dú)立的配置文件控制。具體配置規(guī)則: conf/目錄下,使用文件夾放置,文件夾名代表一個(gè)MySQL實(shí)例。canal.destinations用于配置需要監(jiān)控?cái)?shù)據(jù)的數(shù)據(jù)庫(kù)。如果是多個(gè),使用,隔開。
修改實(shí)例配置文件

修改實(shí)例配置

vim /usr/local/canal/conf/example/instance.properties

在文件最后加入

#配置 slaveId ,不能等于 mysql 配置里的 server Id 即可
canal.instance.mysql.slaveId=10 
#數(shù)據(jù)庫(kù)連接
canal.instance.master.address=127.0.0.1:3306 
#數(shù)據(jù)庫(kù)賬號(hào)密碼
canal.instance.dbUsername=canal 
canal.instance.dbPassword=canal
#代表數(shù)據(jù)庫(kù)的編碼方式
canal.instance.connectionCharset = UTF-8
#設(shè)置白名單,這里是監(jiān)控test庫(kù)下所有表
canal.instance.filter.regex=test\\..*
#設(shè)置黑名單,這里設(shè)置排除test庫(kù)下以_noc結(jié)尾的表
canal.instance.filter.black.regex=test\\..*_noc

這個(gè)正則表達(dá)式 test\.*_noc 的含義是:

test:精確匹配字符串 "test"。
\\.:匹配一個(gè)點(diǎn)(.),因?yàn)辄c(diǎn)在正則表達(dá)式中有特殊含義,所以需要使用 \\ 進(jìn)行轉(zhuǎn)義。
*:匹配零個(gè)或多個(gè)任意字符。
_noc:精確匹配字符串 "_noc"。
因此,這個(gè)正則表達(dá)式可以用來(lái)匹配所有以 test. 開頭且以 _noc 結(jié)尾的字符串。在 Canal 的配置中使用這個(gè)正則表達(dá)式,就可以實(shí)現(xiàn)排除以 test. 開頭且以 _noc 結(jié)尾的數(shù)據(jù)庫(kù)和表,而監(jiān)控其他數(shù)據(jù)庫(kù)和表。

比如我們要查詢 test庫(kù)下users表id為3的用戶信息,sql語(yǔ)句可以這么寫
SELECT * FROM test.users WHERE id = 3;
這里的test.users就是正則要匹配的地方

如果系統(tǒng)是1個(gè) cpu,需要將 canal.instance.parser.parallel 設(shè)置為 false

啟動(dòng)和停止

#啟動(dòng)

/usr/local/canal/bin/startup.sh

#停止

/usr/local/canal/bin/stop.sh

查看是否啟動(dòng)成功

ps -ef | grep canal

在這里插入圖片描述

php測(cè)試

使用 canal-php

composer require xingwenge/canal_php

新建index.php文件

<?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();
    //設(shè)置過(guò)濾tes庫(kù)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;
}

運(yùn)行php文件

php index.php

在這里插入圖片描述

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

也可以直接將數(shù)據(jù)寫入rabbitmq

修改conf/canal.properties

vim conf/canal.properties

修改RabbitMQ配置如下

rabbitmq.host = 127.0.0.1
rabbitmq.virtual.host = /
#交換機(jī)名稱
rabbitmq.exchange =exchange.canal
#隊(duì)列名稱
rabbitmq.queue = canal_queue
#路由鍵名
rabbitmq.routingKey = canal-routing-key
#賬號(hào)密碼
rabbitmq.username =admin
rabbitmq.password =admin
#路由模式,這里是嚴(yán)格模式
rabbitmq.deliveryMode =direct

修改實(shí)例配置conf/example/instance.properties

vim conf/example/instance.properties

修改部分內(nèi)容如下

#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,.*\\..*

以上就是php使用Canal監(jiān)聽msyql的詳細(xì)內(nèi)容,更多關(guān)于php Canal監(jiān)聽msyql的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論