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 # 开启 binlogbinlog-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/localcd /usr/local## 自己创建的文件夹只有ll查看权限,chmod更改权限sudo mkdir /usr/local/canalsudo tar zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canalsudo 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```shellcd /usr/local/canal./bin/startup.sh## 报没有创建文件夹的权限,临时解决直接给所有用户权限sudo chmod -R 777 /usr/local/canal## 没有启动查看日志cd /usr/local/canalcat logs/canal/canal.log## 报地址正在使用,kill进程或者重启
5.安装cananl-adapter
cd ~sudo mv canal.adapter-1.1.4.tar.gz /usr/localsudo mkdir /usr/local/canal-adaptersudo 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-adaptersudo vim conf/application.yml
server:port: 8081spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8default-property-inclusion: non_nullcanal.conf:mode: tcp # kafka rocketMQcanalServerHost: 192.168.101.184:11111# zookeeperHosts: slave1:2181# mqServers: 127.0.0.1:9092 #or rocketmq# flatMessage: truebatchSize: 500syncBatchSize: 1000retries: 0timeout:accessKey:secretKey:srcDataSources:defaultDS:url: jdbc:mysql://192.168.101.184:3306/canal?useUnicode=trueusername: canalpassword: canalcanalAdapters:- instance: example # canal instance Name or mq topic namegroups:- groupId: g1outerAdapters:- 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: eshosts: 192.168.101.184:9300properties:cluster.name: my-application
sudo vim conf/es/mytest_user.yml
dataSourceKey: defaultDSdestination: examplegroupId: g1esMapping:_index: mytest_user_type: _doc_id: _idupsert: true# pk: idsql: "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
