赞
踩
Canal是阿里巴巴开源的一个组件,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。canal的介绍,在github 上的官方文档介绍的很好,我这边就不介绍了。感兴趣的查看git地址:https://github.com/alibaba/canal
Canal 1.1.4版本,迎来最重要的WebUI能力,引入canal-admin工程,支持面向WebUI的canal动态 管理能力,支持配置、任务、日志等在线白屏运维能力,具体文档:Canal Admin Guide。
本地测试准备2台服务器
服务器 | 部署的服务 |
---|---|
a-lf-bigdata | mysql、canal-server |
b-lf-bigdata | mysql、canal-admin、canal-adapter、es、kibana |
(1)安装MySQL的yum仓库
yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
(2)安装MySQL
yum -y install mysql-community-server
(3)设置为开机启动
systemctl enable mysqld
(4)启动MySQL
systemctl start mysqld
(5)查看MySQL状态
systemctl status mysqld
(6)查看root临时密码
grep 'temporary password' /var/log/mysqld.log
(7)修改root密码
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_12root';
SHOW VARIABLES LIKE 'validate_password%';
set global validate_password.policy=0;
set global validate_password.length=1;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root%123';
exit
mysql -uroot -p
set global validate_password.policy=0;
set global validate_password.length=1;
CREATE USER canal IDENTIFIED BY '2wsxVFR_';
-- GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
exit
在a-lf-bigdata的MySQL开启Binlog格式
vi /etc/my.cnf
增加如下配置
server-id=1
log-bin=mysql-bin
binlog-format=ROW
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
log-bin用于指定binlog日志文件名前缀,默认存储在/var/lib/mysql 目录下。
server-id用于标识唯一的数据库,不能和别的服务器重复,建议使用ip的最后一段,默认值也不可以。
binlog-ignore-db:表示同步的时候忽略的数据库。
binlog-do-db:指定需要同步的数据库(如果没有此项,表示同步所有的库)
登录mysql查看:
mysql -uroot -p
show master status;
如图,binlog就成功开启了。
禁用explicit_defaults_for_timestamp
mysql -uroot -p
SHOW VARIABLES LIKE '%explicit_defaults_for_timestamp%';
set persist explicit_defaults_for_timestamp=0;
SHOW VARIABLES LIKE '%explicit_defaults_for_timestamp%';
重启MySQL
systemctl status mysqld
mysql -uroot -p
set global validate_password.policy=0;
set global validate_password.length=1;
CREATE USER canaladmin IDENTIFIED BY '2wsxVFR_';
GRANT ALL ON canal_manager.* TO 'canaladmin'@'%';
FLUSH PRIVILEGES;
exit
下载ES:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.4.0-linux-x86_64.tar.gz
useradd hadoop
passwd hadoop
然后赋予sudo权限
cd /data/liufei/es
tar -zxf elasticsearch-7.4.0-linux-x86_64.tar.gz
ln -s elasticsearch-7.4.0 elasticsearch
# 编辑配置文件
vi /etc/profile
# 新增ES配置
#elasticsearch
export ES_HOME=/data/liufei/es/elasticsearch
export PATH=${ES_HOME}/bin:$PATH
# 是配置生效
source /etc/profile
调整最大虚拟内存
# 编辑配置文件
vi /etc/sysctl.conf
# 增加配置
vm.max_map_count=262144
保存退出后执行命令使配置生效
sysctl -p
将ES目录的所有者赋予给hadoop用户
chown -R hadoop:hadoop elasticsearch
chown -R hadoop:hadoop elasticsearch-7.4.0
切换到hadoop用户
su hadoop
# 编辑配置文件
vi $ES_HOME/config/elasticsearch.yml
# 修改配置
network.host: 0.0.0.0
discovery.seed_hosts: [“b-lf-bigdata”]
$ES_HOME/bin/elasticsearch -d
curl http://b-lf-bigdata:9200
cd /data/liufei/es
tar xzvf kibana-7.4.0-linux-x86_64.tar.gz
ln -s kibana-7.4.0-linux-x86_64 kibana
# 编辑配置文件
vi /etc/profile
# 新增ES配置
#kibana
export KIBANA_HOME=/data/liufei/es/kibana
export PATH=${KIBANA_HOME}/bin:$PATH
# 是配置生效
source /etc/profile
# 编辑配置文件
vi $KIBANA_HOME/config/kibana.yml
# 修改配置
server.host: “0.0.0.0”
elasticsearch.hosts: [“http://b-lf-bigdata:9200”]
nohup $KIBANA_HOME/bin/kibana > $KIBANA_HOME/kibana.out 2>&1 &
http://b-lf-bigdata:5601
put /test_test { "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" }, "modified_time": { "type": "date" } } } }
![]()
Canal下载地址:https://github.com/alibaba/canal/releases
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.adapter-1.1.5.tar.gz
tar -zxf canal.admin-1.1.5.tar.gz
cd canal-admin
目录结构如下
# 编辑配置文件
vi /etc/profile
# 增加配置
#canal-admin
export CANAL_ADMIN_HOME=/data/liufei/cacal/canal-admin
export PATH=
C
A
N
A
L
A
D
M
I
N
H
O
M
E
<
/
s
p
a
n
>
/
b
i
n
:
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
e
n
v
i
r
o
n
m
e
n
t
c
o
n
s
t
a
n
t
"
>
{CANAL_ADMIN_HOME}</span>/bin:<span class="token environment constant">
CANALADMINHOME</span>/bin:<spanclass="tokenenvironmentconstant">PATH
# 使环境变量生效
source /etc/profile
vi $CANAL_ADMIN_HOME/conf/application.yml
# 修改配置如下
server:
port: 8089
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
spring.datasource:
address: b-lf-bigdata:3306
database: canal_manager
username: canaladmin
password: 2wsxVFR_
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://
s
p
r
i
n
g
.
d
a
t
a
s
o
u
r
c
e
.
a
d
d
r
e
s
s
<
/
s
p
a
n
>
/
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
{spring.datasource.address}</span>/<span class="token variable">
spring.datasource.address</span>/<spanclass="tokenvariable">{spring.datasource.database}?
useUnicode=true&characterEncoding=UTF-
8&useSSL=false&allowPublicKeyRetrieval=true
hikari:
maximum-pool-size: 30
minimum-idle: 1
#这里指的是canal-server和canal-admin双线通信的用户名密码 canal:
adminUser: admin
adminPasswd: 123456
因为我们使用的是MySQL 5.7,所以需要使用8的驱动
mysql -uroot -p
source /data/liufei/canal/canal-admin/conf/canal_manager.sql
sh $CANAL_ADMIN_HOME/bin/startup.sh
查看日志:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lomrs253-1631081115831)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908132642239.png)]
http://b-lf-bigdata:8089
tar -zxvf canal.deployer-1.1.5.tar.gz
cd canal-server
vi /etc/profile
# 新增配置
#canal-server
export CANAL_SERVER_HOME=/home/hadoop/app/canal-server
export PATH=
C
A
N
A
L
S
E
R
V
E
R
H
O
M
E
<
/
s
p
a
n
>
/
b
i
n
:
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
e
n
v
i
r
o
n
m
e
n
t
c
o
n
s
t
a
n
t
"
>
{CANAL_SERVER_HOME}</span>/bin:<span class="token environment constant">
CANALSERVERHOME</span>/bin:<spanclass="tokenenvironmentconstant">PATH
# 使环境变量生效
source /etc/profile
vi canal.properties
# register ip
canal.register.ip = b-lf-bigdata
# canal admin config
canal.admin.manager = b-lf-bigdata:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
# admin auto register
canal.admin.register.auto = true
canal.admin.register.cluster =
canal.admin.register.name =
$CANAL_SERVER_HOME/bin/startup.sh
canal.instance.master.address=a-lf-bigdata:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=2wsxVFR_
在a-lf-bigdata上操作
mysql -uroot -p
CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use test;
DROP TABLE IF EXISTS test
;
CREATE TABLE test
(
uid
INT UNSIGNED AUTO_INCREMENT,
name
VARCHAR(100) NOT NULL,
age
int(3) DEFAULT NULL,
modified_time
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
PRIMARY KEY (uid
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
tar -zxf canal.adapter-1.1.5.tar.gz
cd canal-adapter
vi /etc/profile
# 新增配置
#canal-adapter
export CANAL_ADAPTER_HOME=/data/liufei/cacal/canal-adapter
export PATH=
C
A
N
A
L
A
D
A
P
T
E
R
H
O
M
E
<
/
s
p
a
n
>
/
b
i
n
:
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
e
n
v
i
r
o
n
m
e
n
t
c
o
n
s
t
a
n
t
"
>
{CANAL_ADAPTER_HOME}</span>/bin:<span class="token environment constant">
CANALADAPTERHOME</span>/bin:<spanclass="tokenenvironmentconstant">PATH
# 使环境变量生效
source /etc/profile
vi $CANAL_ADAPTER_HOME/conf/application.yml
server:
port: 8081
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
canal.conf:
mode: tcp #tcp kafka rocketMQ rabbitMQ
flatMessage: true
zookeeperHosts:
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
consumerProperties:
# canal tcp consumer
canal.tcp.server.host: a-lf-bigdata:11111
canal.tcp.zookeeper.hosts:
canal.tcp.batch.size: 500
canal.tcp.username:
canal.tcp.password:
srcDataSources:
defaultDS:
url: jdbc:mysql://a-lf-bigdata:3306/test?useUnicode=true
username: canal
password: 2wsxVFR_
canalAdapters:
修改es6 目录下的配置,新建test_to_es.yml
dataSourceKey: defaultDS
destination: test_to_es
groupId: g1
esMapping:
_index: test_test
_type: _doc
_id: _id
upsert: true
sql: "select a.uid as _id, a.name, a.age, a.modified_time from test a"
commitBatch: 2
$CANAL_ADAPTER_HOME/bin/startup.sh
$CANAL_ADAPTER_HOME/bin/stop.sh
$CANAL_ADAPTER_HOME/bin/restart.sh
(7)测试
INSERT INTO test.test (name, age) VALUES ("张三",20);
INSERT INTO test.test (name, age) VALUES ("李四",21);
INSERT INTO test.test (name, age) VALUES ("王五",22);
INSERT INTO test.test (name, age) VALUES ("赵六",23);
INSERT INTO test.test (name, age) VALUES ("马七",24);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。