mysql到elasticsearch数据迁移踩坑实践-Ali0th

Author : Ali0th

Date : 20190514

最近用go语言写了个爬虫,爬了几百万条数据,存在 mysql 里,数据量较大,一个表就一两G的程度(mysql表一般不要超过2G)。

在这里插入图片描述

使用查询语句非常之慢,而且我要经常使用到"LIKE",一条语句返回结果耗时 10~30 秒,这可不行。所以决定把数据迁移到 ES。真的是踩坑了,本来只想简单搞搞,结果搞了好多天。

本文章介绍两种迁移方式:go-mysql-elasticsearchlogstash。以下是相关实践过程。

0.1. 先说go-mysql-elasticsearch

一开始发现了 go-mysql-elasticsearch 这个工具,也是go写的,不过对ES的支持版本比较旧。于是我就把ES换成了旧版本。(新的ES版本就用logstash方式吧)

0.1.1. 环境

# 主要组件
mysql            : 5.5.3
elasticsearch    : 5.6.16
go-mysql-elasticsearch
# 环境
windows 10
go               : 1.11.2

同时也会用到 win 下 git 的命令行模式(可以运行 bash 命令)

go-mysql-elasticsearch对 mysql 和 ES 的要求为:

MySQL supported version < 8.0

ES supported version < 6.0

ES旧版本下载

kibana 5.6.16下载

0.1.2. 部署

mysql 和 elasticsearch 安装很简单,这里就不说明了。这里主要说 go-mysql-elasticsearch 的安装过程。

项目地址:go-mysql-elasticsearch

go get github.com/siddontang/go-mysql-elasticsearch

cd到目录下,我的 go mod 不好用,所以我直接使用 go get 安装。

go get github.com/juju/errors
go get github.com/pingcap/check
go get github.com/siddontang/go/sync2
go get github.com/siddontang/go-mysql
go get github.com/pingcap/errors
go get github.com/shopspring/decimal
go get github.com/siddontang/go-log/log

修改代码中的一处错误。(应该是版本原因导致的)

文件:river/river.go
在这里插入图片描述

编译:

go build -o bin/go-mysql-elasticsearch ./cmd/go-mysql-elasticsearch

无报错,并看到有 bin/go-mysql-elasticsearch 文件即成功。

0.1.3. mysql 配置

文件:my.ini

添加以下配置并重启。

# Binary Logging
server-id=1
log_bin = mysql-bin
binlog_format = ROW

0.1.4. river.toml配置

文件:etc/river.toml

其中有两个关键的配置Sourcerule

[[rule]]
schema = "mysql_es"   # Mysql数据库名
table = "test_table"  # Mysql表名
index = "test_index"  # ES中index名
type = "doc"          # 文档类型

这一部分看官方示例就很清楚了 river.tomlElasticsearch最佳实践从Mysql到Elasticsearch

0.1.5. mysqldump 配置

etc/river.toml 中有一处对于mysqldump的配置,只要把 mysql 的 bin 目录加到环境变量就可以了。但我这里还是找不到mysqldump,所以我就直接到mysqldump.exe拷贝到go-mysql-elasticsearch目录下就可以了。

0.1.6. 启动

./bin/go-mysql-elasticsearch -config=./etc/river.toml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值