安装环境:macOS(类似Linux)
1.安装elasticsearch
elasticsearch的版本:6.7.0,在elasticsearch官网上下载压缩包。elasticsearch官网的地址。
elasticsearch基本不用什么特别的配置,默认的端口是9200,9300,可以自行调整端口配置,如果不需要调整,直接启动即可,直接启动/bin/elasticsearch。
2.安装elasticsearch WEB工具Kibana
kibana的版本需要与elasticsearch的版本保持一致,需要下载6.7.0版本。kibana需要在官网下载地址。
需要重新配置/conf/kibana.yml,如没有特殊配置,只需要配置elasticsearch的访问地址。
我这里是在本地启动的es,所以,直接写的localhost,如果是服务器的话,不在同一台服务器上的情况下,需要写外网访问地址,端口是自己配置的端口,如果没有改动,则是9200.也可以直接拿这个路径放在浏览器上访问,正常情况下,这个路径是可以直接访问到的。
kibana至此就可以进行启动了,直接双击/bin/kibana,就可以启动。
安装并且配置成功了elasticsearch和kibana就可以直接利用elasticsearch client、elasticsearchTemplate、ElasticsearchRepository,对elasticsearch进行CRUD的操作。这部分可以自行百度,内容很多,这里主要解决利用canal来对mysql和elasticsearch进行数据同步。
canal需要安装的是canal-deployer和canal-adapter两个,canal与elasticsearch版本没有什么特别大的关系,可以自行下载最新的release版本的canal,我这里是用的当时最新版本,1.1.4
3.安装canal-deployer。
首先是下载1.1.4版本的canal-deployer。github下载地址。
使用canal-server需要对mysql开启binlog日志,这部分github的官方的文档里边有介绍,这里再贴一下。
对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
如果是阿里的RDS数据库,不需要这个操作,阿里的RDS数据库默认是开启binlog的。修改了my.cnf以后,可能需要重启一下mysql服务,让这些配置生效。
授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant
CREATE USER canal IDENTIFIED BY 'canal'; #创建canal用户
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';#赋予权限
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES; #刷新权限
创建canal用户,这个用户是给canal来读取binlog的。
- 修改/conf/example/instance.properties,进行一些简单的修改。
最简单的只需要修改框起来这三个参数,修改成自己的配置,mysql的ip的话,如果是外网访问的,直接写外网ip。
- 这样就可以直接启动canal-deployer,启动 sh /bin/startup.sh
查看日志 /logs/example/example.log,如果是上图这样,就算是启动成功了。
4.安装canal-adapter。
同样是在github上下载canal-adapter的压缩包。github地址。
修改canal-adapter的配置。
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: 127.0.0.1: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://localhost:3306/test_comment?useUnicode=true#配置自己的数据库的ip
username: root #数据库账号
password: 8888 #数据库密码
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: 127.0.0.1:9300 # 这个是es的可以访问的那个路径
properties:
#mode: transport # or rest
# security.auth: test:123456 # only used for rest mode
cluster.name: elasticsearch
需要配置的内容都在里边标注了,配置的时候注意一下。
再配置conf/es/里边的yml文件,这些文件是用来做数据同步的,可以多个,个性化配置。
dataSourceKey: defaultDS #在上个配置中的那个名字
destination: example #在上个配置中的名字
groupId: g1
esMapping:
_index: newscomment #es的索引的名称
_type: _doc #es中的索引下边的名称
_id: _id #主键的名称,这个地方名称要跟下边的sql中的主键的一致,这样才能同步
upsert: true
# pk: id
sql: "SELECT com.inner_id AS _id, com.user_id AS commentUserId, com.topic_type AS topicType, com.topic_id AS topicId, com.comment_type AS commentType, com.level AS commentLevel,
com.content AS commentContent, com.status AS commentStatus, com.is_use AS commentIsUse, us.nick_name AS commentNickName, com.create_time AS commentCreateTime, com.update_time AS commentUpdateTime,
ne.title AS newsTitle FROM comment com LEFT JOIN qlwb_test_online.user_base us ON us.id = com.user_id
LEFT JOIN qlwb_test_online.news_base ne ON ne.inner_id = com.topic_id "
# 这个sql就是用来数据同步的,这个sql里边不要出现‘’,因为如果使用navicat写的sql,有时候会出现用‘’引起来的字段,千万不要有这个‘’,会导致无法同步。
# objFields:
# _labels: array:;
# etlCondition: "where h.id > 0"#sql的查询条件写在这里
commitBatch: 3000
这个配置里边需要注意的地方。
- 这时候可以启动 sh /bin/startup.sh
- 查看 /log/adapter/adapter.log,如果没错误就显示成功了。