1.安装mysql
2.安装jdk
3.canal提前设置
0) 查询是否开启binlog
show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------+
1) 首先需要知道mysql数据库安装在什么位置
查询mysql安装路径:
adrian@adrian-Virtual-Machine:/etc$ which mysql
/usr/bin/mysql
2)查找配置文件位置
然后在根据这个目录,查看配置文件在哪里了(路径后面加上 —verbose —help|grep -A 1 ‘Default options’),就会出现以下信息:
adrian@adrian-Virtual-Machine:/etc$ /usr/bin/mysql --verbose --help|grep -A 1 'Default option'
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
3)修改文件
服务器首先读取的是/etc/my.cnf文件,如果前一个文件不存在则继续读/etc/mysql/my.cnf文件,如果还不存在依次向后查找,找到配置文件以后就可以根据需要修改配置文件,这里我修改的/etc/mysql/my.cnf
对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下: (一定要放在[mysqld]下,没有则加上)
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
- 注意:针对阿里云 RDS for MySQL , 默认打开了 binlog , 并且账号默认具有 binlog dump 权限 , 不需要任何权限或者 binlog 设置,可以直接跳过这一步
- 重启mysql
service mysql stop
service mysql start
show variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/mysql-bin |
| log_bin_index | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+--------------------------------+
- 授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant,默认账号canal,canal
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- 下面直接赋予所有权限,可以直接连接创建数据库
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
4.安装cannal
配置修改 ```powershell sudo vim conf/example/instance.properties下载canal通过ftp工具上传到/home/adrian目录
sudo mv canal.deployer-1.1.4.tar.gz /usr/local
cd /usr/local
## 自己创建的文件夹只有ll查看权限,chmod更改权限
sudo mkdir /usr/local/canal
sudo tar zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal
sudo rm -rf canal.deployer-1.1.4.tar.gz
修改内容
mysql serverId
canal.instance.mysql.slaveId = 0
position info,需要改成自己的数据库信息
canal.instance.master.address = 192.168.101.184:3306 canal.instance.master.journal.name = canal.instance.master.position = canal.instance.master.timestamp =
canal.instance.standby.address =
canal.instance.standby.journal.name =
canal.instance.standby.position =
canal.instance.standby.timestamp =
username/password,需要改成自己的数据库信息
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
canal.instance.defaultDatabaseName =
canal.instance.connectionCharset = UTF-8
table regex
canal.instance.filter.regex = .*\\..*
- canal.instance.connectionCharset 代表数据库的编码方式对应到 java 中的编码类型,比如 UTF-8,GBK , ISO-8859-1
- 如果系统是1个 cpu,需要将 canal.instance.parser.parallel 设置为 false
启动canal
```shell
cd /usr/local/canal
./bin/startup.sh
## 报没有创建文件夹的权限,临时解决直接给所有用户权限
sudo chmod -R 777 /usr/local/canal
## 没有启动查看日志
cd /usr/local/canal
cat logs/canal/canal.log
## 报地址正在使用,kill进程或者重启
5.安装cananl-adapter
cd ~
sudo mv canal.adapter-1.1.4.tar.gz /usr/local
sudo mkdir /usr/local/canal-adapter
sudo tar zxvf canal.adapter-1.1.4.tar.gz -C /usr/local/canal-adapter
## 临时直接给所有权限
sudo chmod -R 777 /usr/local/canal-adapter
先创建mysql同步的表以及ES创建对应的索引再启动canal-adapter,否则会报错
-- 先创建数据库canal,再创建用户表,导入数据库数据,通过kibana创建索引
create table user (
`id` int(10) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`role_id` int(10) NOT NULL,
`c_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`c_utime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
PUT /mytest_user
{
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"role_id": {
"type": "long"
},
"c_time": {
"type": "date"
}
}
}
}
}
修改配置文件
cd /usr/local/canal-adapter
sudo vim 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 # kafka rocketMQ
canalServerHost: 192.168.101.184:11111
# zookeeperHosts: slave1:2181
# mqServers: 127.0.0.1:9092 #or rocketmq
# flatMessage: true
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
srcDataSources:
defaultDS:
url: jdbc:mysql://192.168.101.184:3306/canal?useUnicode=true
username: canal
password: canal
canalAdapters:
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
# - name: rdb
# key: mysql1
# properties:
# jdbc.driverClassName: com.mysql.jdbc.Driver
# jdbc.url: jdbc:mysql://127.0.0.1:3306/mytest2?useUnicode=true
# jdbc.username: root
# jdbc.password: 121212
# - name: rdb
# key: oracle1
# properties:
# jdbc.driverClassName: oracle.jdbc.OracleDriver
# jdbc.url: jdbc:oracle:thin:@localhost:49161:XE
# jdbc.username: mytest
# jdbc.password: m121212
# - name: rdb
# key: postgres1
# properties:
# jdbc.driverClassName: org.postgresql.Driver
# jdbc.url: jdbc:postgresql://localhost:5432/postgres
# jdbc.username: postgres
# jdbc.password: 121212
# threads: 1
# commitSize: 3000
# - name: hbase
# properties:
# hbase.zookeeper.quorum: 127.0.0.1
# hbase.zookeeper.property.clientPort: 2181
# zookeeper.znode.parent: /hbase
- name: es
hosts: 192.168.101.184:9300
properties:
cluster.name: my-application
sudo vim conf/es/mytest_user.yml
dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
_index: mytest_user
_type: _doc
_id: _id
upsert: true
# pk: id
sql: "select a.id as _id, a.name, a.role_id, a.c_time from user a"
# objFields:
# _labels: array:;
# etlCondition: "where a.c_time>='{0}'"
commitBatch: 3000
启动canal-adapter
cd /usr/local/canal-adapter
./bin/startup.sh
查看日志
cat logs/adapter/adapter.log