日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

canal布在mysql端还是服务端_canal使用入坑,亲测 !!!!

發(fā)布時間:2025/3/15 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 canal布在mysql端还是服务端_canal使用入坑,亲测 !!!! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原來用windows本地運行,在本地模擬客戶端和服務(wù)端,鼓搗了一天都沒運行成功。。。最后放棄了,改用

windows的客戶端+ubuntu的服務(wù)端(客戶端程序運行在window,canal監(jiān)聽運行在Ubuntu中)

用到:windows+ubuntu+eclipse+mysql+canal

1、客戶端(windows)

1)用eclipse建一個java項目,建類

public classClientTest {public static voidmain(String args[]) {//創(chuàng)建鏈接 這個ip是你虛擬機的ip CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("10.168.12.43",11111), "example", "", "");int batchSize = 1000;int emptyCount = 0;try{

connector.connect();

connector.subscribe(".*\\..*");

connector.rollback();int totalEmptyCount = 120;while (emptyCount

Message message= connector.getWithoutAck(batchSize); //獲取指定數(shù)量的數(shù)據(jù)

long batchId =message.getId();int size =message.getEntries().size();if (batchId == -1 || size == 0) {

emptyCount++;

System.out.println("empty count : " +emptyCount);try{

Thread.sleep(1000);

}catch(InterruptedException e) {

}

}else{

emptyCount= 0;

printEntry(message.getEntries());

}

connector.ack(batchId);//提交確認

}

System.out.println("empty too many times, exit");

}finally{

connector.disconnect();

}

}private static void printEntry(Listentrys) {for(Entry entry : entrys) {if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() ==EntryType.TRANSACTIONEND) {continue;

}

RowChange rowChage= null;try{

rowChage=RowChange.parseFrom(entry.getStoreValue());

}catch(Exception e) {throw new RuntimeException("ERROR ## parser of eromanga-event has an error , data:" +entry.toString(),

e);

}

EventType eventType=rowChage.getEventType();

System.out.println(String.format("================> binlog[%s:%s] , name[%s,%s] , eventType : %s",

entry.getHeader().getLogfileName(), entry.getHeader().getLogfileOffset(),

entry.getHeader().getSchemaName(), entry.getHeader().getTableName(),

eventType));for(RowData rowData : rowChage.getRowDatasList()) {if (eventType ==EventType.DELETE) {

printColumn(rowData.getBeforeColumnsList());

}else if (eventType ==EventType.INSERT) {

printColumn(rowData.getAfterColumnsList());

}else{

System.out.println("-------> before");

printColumn(rowData.getBeforeColumnsList());

System.out.println("-------> after");

printColumn(rowData.getAfterColumnsList());

}

}

}

}private static void printColumn(Listcolumns) {for(Column column : columns) {

System.out.println(column.getName()+ " : " + column.getValue() + " update=" +column.getUpdated());

}

}

}

2)引入依賴(這里我用的1.0.24最新的是1.1.3)

com.alibaba.otter

canal.client

1.0.24

簡單吧!!!

2、服務(wù)端

主要工作在這里了!!!

1、確定你的虛擬機安裝了java環(huán)境和mysql數(shù)據(jù)庫

2、查看是否啟用了日志:

mysql>show variables like ‘log_bin‘;

3、開啟binlog

如果log_bin關(guān)閉,需要在etc下面找到my.cnf,開啟binlog:

server_id=1

log-bin=/var/lib/mysql/mysql-bin

4、添加canal mysql數(shù)據(jù)庫賬號

CREATE USER canal IDENTIFIED BY ‘canal‘;

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘canal‘@‘%‘;

GRANT ALL PRIVILEGES ON *.* TO ‘canal‘@‘%‘ ;

FLUSH PRIVILEGES;

6、修改?vi?canal/conf/example/instance.properties

## mysql serverId

canal.instance.mysql.slaveId = 1234# position info

canal.instance.master.address = 10.168.12.43:3306canal.instance.master.journal.name =mysql-bin.000003canal.instance.master.position =canal.instance.master.timestamp =……

canal.instance.dbUsername =canal

canal.instance.dbPassword =canal

canal.instance.defaultDatabaseName =testcanal

canal.instance.connectionCharset = UTF-8# table regex

canal.instance.filter.regex = .*\\..*

ip不要寫錯了,這個是虛擬機的ip,因為要監(jiān)聽的是運行與Ubuntu上的數(shù)據(jù)庫(這里用的mysql)的操作。

testcanal是默認數(shù)據(jù)庫,這個是你要監(jiān)聽的那個表所屬的數(shù)據(jù)庫

7、啟動canal

sh bin/startup.sh

8、查看日志

vi logs/canal/canal.log

vi logs/example/example.log

看看日志是否啟動成功沒報錯

9、測試

1)確保startup.sh?文件運行了

2)在windows上運行上面的ClientTest?程序

3)在mysql的testcanal數(shù)據(jù)庫中建立表,進行增刪改查

4)會在eclipse上打印操作數(shù)據(jù)庫的信息

原文:https://www.cnblogs.com/51python/p/10855907.html

總結(jié)

以上是生活随笔為你收集整理的canal布在mysql端还是服务端_canal使用入坑,亲测 !!!!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。