一、在docker配置elasticsearch和kibana
1.注:elasticsearch和kibana的版本要一致
elesticsearch
--拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.1.0
--运行容器
docker run -it --name elasticsearch --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.1.0
kibana
--拉取镜像
docker pull docker.elastic.co/kibana/kibana:7.1.0
--运行容器
docker run --name kibana -p 5601:5601 --link elasticsearch -d kibana:7.1.0
2.验证elesticsearch和kibana是否配置成功(输入url,出现界面则成功)
elasticsearch localhost:9200
kibana localhost:5601
二、修改mysql的配置
注:我的mysql版本号是:8.0.18
1.mysql的binlog日志主要用于数据库的主从复制和数据恢复。要通过mysql binlog将数据同步到ES集群中,要使用ROW模式(ROW模式可知道mysql中数据的修改内容)
--在dos窗口更改配置
#查看binlog模式
mysql> show variables like "%binlog_format%";
#开启binlog
mysql>set global log-bin=mysql-bin;
#修改binlog模式
mysql> set global binlog_format='ROW';
# 配置MySQL replaction需要定义
mysql>server_id=1;
--查看配置是否成功
mysql> show variables like 'log_bin';
mysql> show variables like "%binlog_format%";
mysql> show master status;
2.创建连接mysql的账号canal
CREATE USER canal IDENTIFIED BY ‘canal’;
3.授予权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘canal’@’%’;
4.刷新权限
FLUSH PRIVILEGES;
5.查看mysql数据库中的user表(成功如下)
三、canal-server
1.在docker中配置canal-server
--拉取镜像
docker pull canal/canal-server:v1.1.5
--运行容器
docker run --name canal-server -p 11111:11111 --link mysql:mysql -id canal/canal-server:v1.1.5
2.修改配置文件instance.properties
--进入canal-server容器
docker exec -it canal-server bash
--把instance.properties配置文件拷贝到桌面
docker cp canal-server:/home/admin/canal-server/conf/example/instance.properties C:\Users\Administrator\Desktop
--获取mysql容器/镜像的元数据:用于下一步数据库地址的填写(另开一个Windows PowerShell)
docker inspect mysql
--修改instance.properties配置文件中的内容
(1)# position info
canal.instance.master.address=172.17.0.3:3306
(2)# username/password
canal.instance.dbUsername=canal #你的数据库账号
canal.instance.dbPassword=canal #你的数据库密码
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
--将原有的instance.properties配置文件移除
(先进入到conf目录下,一路cd xxx...即可)
rm instance.properties #linux中只需输入首字母,再按Tab键即可生成完整文件名
--把桌面的instance.properties配置文件放回conf路径下
docker cp C:\Users\Administrator\Desktop\instance.properties canal-server:/home/admin/canal-server/conf/example
--重新启动canal-server容器
docker restart canal-server
四、canal-adapter
1.在docker中配置canal-adapter
--拉取镜像
docker pull slpcat/canal-adapter:v1.1.5
--运行容器
docker run --name canal-adapter -p 8081:8081 -d --link mysql:mysql --link elasticsearch:elasticsearch slpcat/canal-adapter:v1.1.5
2.修改配置文件
--进入canal-adapter容器
docker exec -it canal-adapter bash
--修改application.yml配置文件
--拷贝到桌面(在另开的Windows PowerShell中输入)
docker cp canal-adapter:/opt/canal-adapter/conf/application.yml C:\Users\Public\Desktop
--查canal-server、elesticsearch的元数据
canal-server:172.17.0.5
elesticsearch:172.17.0.2
--修改文件内容
consumerProperties:
# canal tcp consumer
canal.tcp.server.host: 172.17.0.5:11111
canal.tcp.zookeeper.hosts:
canal.tcp.batch.size: 500
canal.tcp.username:
canal.tcp.password:
srcDataSources:
defaultDS:
url: jdbc:mysql://172.17.0.3:3306/jeecg-boot?useUnicode=true # 自己数据库的地址
username: canal #步骤二中新建的用户
password: canal
canalAdapters:
- instance: example
groups:
- groupId: g1
outerAdapters:
- name: es7
hosts: 172.17.0.2:9200
properties:
mode: rest
# security.auth: test:123456 # only used for rest mode
cluster.name: docker-cluster
--将原有的application.yml配置文件移除
(先进入到conf目录下,一路cd xxx...即可)
rm application.yml #linux中只需输入首字母,再按Tab键即可生成完整文件名
--把桌面的application.yml配置文件放回conf路径下
docker cp C:\Users\Public\Desktop\application.yml canal-adapter:/opt/canal-adapter/conf
--修改mytest_user.yml配置文件
--拷贝到桌面(在另开的Windows PowerShell中输入)
docker cp canal-adapter:/opt/canal-adapter/conf/es7/mytest_user.yml C:\Users\Public\Desktop
--修改文件内容
dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
_index: pm_index #此处是elesticsearch中建立的索引名(先建索引再改此配置文件)
_id: _id
_type: _doc
upsert: true
pk: id
#下方是想要同步的字段
sql: "select p.id as _id,
p.project_code,
p.pid,
p.project_name,
from pm p"
commitBatch: 3000
--将原有的mytest_user.yml配置文件移除
(先进入到conf目录下,一路cd xxx...即可)
rm mytest_user.yml #linux中只需输入首字母,再按Tab键即可生成完整文件名
--把桌面的mytest_user.yml配置文件放回conf路径下
docker cp C:\Users\Public\Desktop\mytest_user.yml canal-adapter:/opt/canal-adapter/conf/es7
--重新启动canal-adapter容器
docker restart canal-adapter
3.在kibana中如何新建索引(备注)
PUT pm
{
"mappings" : {
"properties" : {
"id" : {
"type" : "text"
},
"pid" : {
"type" : "text"
},
"project_code" : {
"type" : "text"
},
"project_name" : {
"type" : "text"
}
}
}
}
--查看索引结构是否创建成功
GET pm/_mapping
五、操作对应数据库
观察canal-adapter的日志,往数据库中插入数据,若log能监测到则证明es和mysql数据同步成功。
--同步完后,去kibana中查看
GET pm/_search
六、数据同步的时候可能出现的问题 1、es7.1如何新增字段(不删除索引的前提下新增字段)
#更改索引的配置(pm是我的索引的名字,自行更改)
PUT pm/_settings
{
"index.blocks.read_only_allow_delete":null
}
#新增字段
PUT pm/_mapping
{
"properties":{
"client_name":{
"type":"keyword"
}
}
}
#新增完之后查看索引的结构,若新字段在结构中,则代表更改成功了
GET pm/_mapping
2、隔了几天再次启动canal-server和canal-adapter,想同步别的数据,此时报了如下错误:
com.alibaba.otter.canal.protocol.exception.CanalClientException: java.net.ConnectException: Connection refused
解决办法:
#在PowerShell获取canal-server镜像元数据,查看IPAddress
docker inspect canal-server
#再找到canal-adapter中的配置文件application.yml,查看如下一行
canal.tcp.server.host: xxxx:11111
#xxxx处就是第一步获得的IPAddress(一般都是此处出错才导致连接失败,IPAddress会改变的)