canal同步mysql从库_canal.adapter 实现mysql数据库同步
一、首先需要安装canal-server, 这里使用docker来运行canal-server
下载最近的release版本 https://github.com/alibaba/canal/releases,解压后拷贝 conf 目录到新的目录 /Users/huaan9527/Documents/docker/canal-server/conf
根据canal-server的文档
修改 canal.properties :
canal.serverMode = kafka # tcp, kafka, RocketMQ
canal.destinations = highso # instance的名字 多个使用逗号分隔
canal.mq.servers = 192.168.16.xxx:9092 #kafka集群的地址
修改instance.properties
canal.instance.master.address=192.168.16.xxx:3306 #需要监控的mysql数据库地址
canal.instance.dbUsername=xxx
canal.instance.dbPassword=xxx
canal.instance.connectionCharset = UTF-8
canal.instance.defaultDatabaseName =highso
canal.instance.filter.regex=highso\\.crmtest,highso\\.test #监控的数据库表
canal.mq.topic=common_mq_highso #kafka 中topic的名字
启动canal-server容器的脚本
#!/bin/bash
function usage() {
echo "Usage:"
echo " run.sh [CONFIG]"
echo "example:"
echo " run.sh -e canal.instance.master.address=127.0.0.1:3306 \\"
echo " -e canal.instance.dbUsername=canal \\"
echo " -e canal.instance.dbPassword=canal \\"
echo " -e canal.instance.connectionCharset=UTF-8 \\"
echo " -e canal.instance.tsdb.enable=true \\"
echo " -e canal.instance.gtidon=false \\"
echo " -e canal.instance.filter.regex=.*\\\\\\..* "
exit
}
function check_port() {
local port=$1
local TL=$(which telnet)
if [ -f $TL ]; then
data=`echo quit | telnet 127.0.0.1 $port| grep -ic connected`
echo $data
return
fi
local NC=$(which nc)
if [ -f $NC ]; then
data=`nc -z -w 1 127.0.0.1 $port | grep -ic succeeded`
echo $data
return
fi
echo "0"
return
}
function getMyIp() {
case "`uname`" in
Darwin)
myip=`echo "show State:/Network/Global/IPv4" | scutil | grep PrimaryInterface | awk '{print $3}' | xargs ifconfig | grep inet | grep -v inet6 | awk '{print $2}'`
;;
*)
myip=`ip route get 1 | awk '{print $NF;exit}'`
;;
esac
echo $myip
}
NET_MODE=""
case "`uname`" in
Darwin)
bin_abs_path=`cd $(dirname $0); pwd`
;;
Linux)
bin_abs_path=$(readlink -f $(dirname $0))
NET_MODE="--net=host"
;;
*)
NET_MODE="--net=host"
bin_abs_path=`cd $(dirname $0); pwd`
;;
esac
BASE=${bin_abs_path}
if [ "$1" == "-h" ] ; then
usage
elif [ "$1" == "help" ] ; then
usage
fi
# DATA="$BASE/data"
# mkdir -p $DATA
VOLUMNS="-v $BASE/conf:/home/admin/canal-server/conf -v $BASE/logs:/home/admin/canal-server/logs"
PORTLIST="8000 2222 11111 11112"
PORTS=""
for PORT in $PORTLIST ; do
#exist=`check_port $PORT`
exist="0"
if [ "$exist" == "0" ]; then
PORTS="$PORTS -p $PORT:$PORT"
else
echo "port $PORT is used , pls check"
exit 1
fi
done
MEMORY="-m 2048m"
LOCALHOST=`getMyIp`
cmd="docker run -d -it -h $LOCALHOST --name=canal-server $VOLUMNS $NET_MODE $PORTS $MEMORY canal/canal-server:v1.1.2"
echo $cmd
eval $cmd
二、配置canal.adapter 实现 mysql数据库3306 同步 到 mysql数据库3308
server:
port: 8081
logging:
level:
org.springframework: INFO
com.alibaba.otter.canal.client.adapter.hbase: DEBUG
com.alibaba.otter.canal.client.adapter.es: DEBUG
com.alibaba.otter.canal.client.adapter.rdb: DEBUG
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
canal.conf:
mqServers: 192.168.16.xxx:9092 #or rocketmq
flatMessage: true
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
mode: kafka # tcp kafka rocketMQ
srcDataSources:
demoSrc:
url: jdbc:mysql://192.168.16.xxx:3306/demo?useUnicode=true
username: xxx
password: xxx
canalAdapters:
- instance: common_mq_highso # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: demoDes
properties:
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://192.168.16.xxx:3308/demo?useUnicode=true
jdbc.username: xxx
jdbc.password: xxx
编辑rdb目录下面表的映射文件,数据库demo, 表 test
dataSourceKey: demoSrc
destination: common_mq_highso
outerAdapterKey: demoDes
concurrent: true
dbMapping:
database: demo
table: test
targetTable: demo.test
targetPk:
id: id
mapAll: true
启动canal.adapter : ./startup.sh
三、测试
在3306数据库中插入一条数据库,检查是否在3308中同步
更新
删除
批量插入
批量更新
批量删除
canal同步mysql从库_canal.adapter 实现mysql数据库同步相关推荐
- canal mysql从库_canal中间件|数据增量同步解决方案
上一文中提到延时双删等策略实现数据一致性的时候,可能存在删除缓存失败的情况,就会出现缓存和数据库不一致的问题.为了应对删除缓存失败而导致数据不一致的问题,可以通过回溯数据库日志文件,提供一个保障的重试 ...
- php mysql主从延迟_如何解决主从数据库同步延迟问题?php连接 mysql 数据库如何添加一个公共的配置文件50...
在上一篇文章中,小编为您详细介绍了关于<图上属标注的什么样元器件?火车购票明明显示无座为什么样乘车后却发现有很多空座>相关知识.本篇中小编将再为您讲解标题如何解决主从数据库同步延迟问题?p ...
- 阿里云mysql主从有延迟怎么办_MySQL主从数据库同步延迟问题解决
MySQL主从数据库同步延迟问题 摘要:MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主 ...
- mysql 修改库的校对集_mysql数据库的基本操作(增删改查、字符集、校对集)
MySQL数据库概述 MySQL数据库是经典的关系型数据库管理系统,MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Dat ...
- mysql c库 示例_选择MySQL数据库进行连接的简单示例
一旦获得MySQL服务器的连接,需要选择一个特定的数据库工作.这是因为MySQL服务器可能有一个以上的数据库. 从命令提示符,选择MySQL数据库: 这是很简单的选择一个特定的数据库mysql> ...
- oracle数据库同步工具Dell,|SQL Maestro Oracle Data Sync(数据库同步工具)下载v16.4.0.6免费版 - 欧普软件下载...
Oracle Data Sync是一款好用的Oracle数据库同步软件,软件可以自动创建无错误的同步脚本,可实现数据库中各项数据的快速同步,还有自定义比较键和自动映射工具,提高同步数据的准确性.支持命 ...
- 阿里云mysql主从有延迟怎么办_MySQL主从数据库同步延迟问题解决-阿里云开发者社区...
MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以 ...
- win执行mysql建库脚本_linux执行mysql脚本文件连接本地windows数据库
又开始玩linux了,小白一个,连ls命令都是这两天新学的,今天又学了点东西,贴上来备忘: 需求:我是想要在linux执行一个.py文件,这个文件执行后可以远程连接我的本地windows的mysql数 ...
- mysql单库tps_简单计算mysql 的QPS,TPS
QPS Queries Per Second:每秒查询数,一台数据库每秒能够处理的查询次数 TPS Transactions Per Second:每秒处理事务数 Uptime:服务器已经运行的实际, ...
- mysql 备份库的shell_linux备份Mysql数据库shell_MySQL
linux备份Mysql数据库shell_MySQL bitsCN.com 欢迎拍砖,详细内容如下: # MYSQL 数据文件路径 MYSQL_DATA_PATH="/usr/local/m ...
最新文章
- Linux性能研究(总)
- Extjs 格式化---Ext.util.Format类
- 4月27日云栖精选夜读丨阿里CMO董本洪:你要运营流量,更要运营超级用户
- 洛谷 1351 联合权值——树形dp
- 对一个简单汇编程序分析
- mac 没有所有开发者_为什么开发人员应该像产品所有者那样思考
- Oracle中通过Job实现定时同步两个数据表之间的数据
- order by + 数字的用意
- 学习 | MongoDB 索引和排序
- java hex to ascii_使用java实现hex和ascii码的转换
- 【优化预测】基于matlab粒子群算法优化SVM预测【含Matlab源码 1424期】
- 【DATAGUARD】 基于同一个主机建立物理备库和逻辑备库(二)
- 数学建模评价类模型——模糊综合评价
- 自己动手破解斯凯Mrp游戏
- 阿里矢量图库使用方法
- 晶体管电路设计 上 铃木雅臣 学习体会
- 计算机工业机器人编程,15个你不知道的工业机器人编程冷知识
- 电源过冲怎么测试软件,【经验】以DL3000电子负载为例,3分钟学会一个电源动态响应测试技巧...
- 2016年腾讯实习生校园招聘-电面2
- 基于java的条形码生成、读取和打印