canal簡易インストール使用
7246 ワード
canal概要:https://github.com/alibaba/canal
1、データベースの構成
まずcanalを使用するには、データベース構成を変更する必要があります.
canalデータベースユーザーの作成
2、canalのインストール
ダウンロード:https://github.com/alibaba/canal/releases
解凍(修正バージョン番号):tar zxvf canal.deployer-1.1.4.tar.gz-C./canal
オープン・サーバ・ポートの構成:11110、11111、11112
canalプロファイルの変更(ここでは2つのinstance、すなわち2つのデータベースが設定されています):
インストールの設定:
最初のデータベース構成
2番目のデータベース構成
#instanceを追加する必要がある場合はcanalを変更するだけです.propertiesファイルは、canalを再起動することなくinstance構成を追加します.
実行:
3、Java使用サンプル
pom依存を導入するには、インストールされたcanalバージョンと一致する必要があります.
サンプルコード(2つのデータベースの変更内容を非同期で印刷):
転載先:https://www.cnblogs.com/hackyo/p/11471385.html
1、データベースの構成
まずcanalを使用するには、データベース構成を変更する必要があります.
[mysqld]
log-bin=mysql-bin # binlog
binlog-format=ROW # ROW
server_id=1 # MySQL replaction , canal slaveId
canalデータベースユーザーの作成
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
2、canalのインストール
ダウンロード:https://github.com/alibaba/canal/releases
解凍(修正バージョン番号):tar zxvf canal.deployer-1.1.4.tar.gz-C./canal
オープン・サーバ・ポートの構成:11110、11111、11112
canalプロファイルの変更(ここでは2つのinstance、すなわち2つのデータベースが設定されています):
vi canal/conf/canal.properties
canal.destinations = example1,example2
インストールの設定:
cp -R canal/conf/example conf/example1
mv conf/example conf/example2
最初のデータベース構成
vi canal/conf/example1/instance.properties
canal.instance.master.address=32.1.2.140:3306
2番目のデータベース構成
vi canal/conf/example2/instance.properties
canal.instance.master.address=32.1.2.140:3307
#instanceを追加する必要がある場合はcanalを変更するだけです.propertiesファイルは、canalを再起動することなくinstance構成を追加します.
実行:
sh canal/bin/startup.sh
#
cat canal/logs/canal/canal
3、Java使用サンプル
pom依存を導入するには、インストールされたcanalバージョンと一致する必要があります.
com.alibaba.otter
canal.client
1.1.4
サンプルコード(2つのデータベースの変更内容を非同期で印刷):
package cn.spicybar.dblog;
import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.client.CanalConnectors;
import com.alibaba.otter.canal.protocol.CanalEntry.Entry;
import com.alibaba.otter.canal.protocol.CanalEntry.EntryType;
import com.alibaba.otter.canal.protocol.CanalEntry.RowChange;
import com.alibaba.otter.canal.protocol.Message;
import java.net.InetSocketAddress;
import java.util.List;
public class CanalClient {
public static void main(String[] args) {
new Thread(() -> initConnector("example1")).start();
new Thread(() -> initConnector("example2")).start();
}
private static void initConnector(String destination) {
CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("32.1.0.237", 11111), destination, "", "");
try {
connector.connect();
connector.subscribe(".*\\..*");
connector.rollback();
while (true) {
Message message = connector.getWithoutAck(1000);
if (message.getId() != -1 && message.getEntries().size() > 0) {
printEntry(message.getEntries());
}
connector.ack(message.getId());
}
} finally {
connector.disconnect();
}
}
private static void printEntry(List entries) {
for (Entry entry : entries) {
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() == EntryType.TRANSACTIONEND) {
continue;
}
try {
RowChange rowChange = RowChange.parseFrom(entry.getStoreValue());
System.out.println(rowChange.getSql());
} catch (Exception e) {
throw new RuntimeException("ERROR ## parser error, data:" + entry.toString(), e);
}
}
}
}
転載先:https://www.cnblogs.com/hackyo/p/11471385.html