mysql数据导⼊es
1,py-mysql-elasticsearch-sync《github ⼯具》
简介:
python版本的mysql导⼊es的插件
通过配置config.yaml⽂件,该插件可以将mysql的数据导⼊到es中。
使⽤:
es-sync l
程序流程:
思路为:1分析mysqldump导出数据 - > 2分析binlog
⾸先;会执⾏mysqldump指令,将mysql中的数据和数据表定义提取出来。然后使⽤xml解析出需要使⽤的部分。对⽐⾃定义的mapping规则,选择id和字段。最终批量上传给es服务器。
其次;程序会读取mysql的binlog,并从binlog第⼀⾏开始读取,直到binlog最后⼀⾏,同时将程序执⾏的binlog位置记录到binlog.info 中,⽤于下次从此开始导⼊数据。
最后;若已经存在binlog.info。该插件不会执⾏第⼀步的操作,⽽是直接从binlog.info记录的位置开始导⼊数据。
以下操作说明:
如下操作是将数据库清空后,打开了数据库binlog,然后往数据库插⼊数据。数据插⼊完毕后,开始向es导数据。
因此遇到了409版本错误。(因为mysqldump导出的数据就是binlog中对应的数据操作记录)
安装:
pip install py-mysql-elasticsearch-sync
注意可能会出现依赖包版本冲突 --- pip install --ignore-installed xxxx
添加开启binlog的mysql配置
在mysql配置为恩建中添加以下配置
[mysqld_safe]
log-bin=mysql-bin
binlog_format=mixed
max_binlog_size=500M
binlog-do-db=testdata_big
binlog-ignore-db=mysql
server-id=1
查看mysql的binlog记录位置
mysql> show variables like '%log_bin%';
+---------------------------------+-------------------------------------------------------+
| Variable_name | Value |
+---------------------------------+-------------------------------------------------------+
| log_bin | ON |
| log_bin_basename | /opt/lovelsl/MessageSoft/Mysql/data/mysql-bin |
| log_bin_index | /opt/lovelsl/MessageSoft/Mysql/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------------------------------------------------------+
6 rows in set (0.00 sec)
mysql的binlog处理
重置所有的binlog
reset master
删除某个binlog⽂件之前的所有binlog⽂件
purge binary logs to 'bin-log.000021';
查看⽇志
show binary logs;
在导⼊数据到es之前,先完成es索引的创建,以及es索引中mapping的定义
导⼊⽂件,⾃动⽣成索引,⼀般被禁⽤。
创建索引:
查看mysql索引⼀般为了安全性,禁⽌提交数据时⾃动创建索引。
curl -XPUT -H "Content-Type: application/json" "localhost:9200/testdata"
创建索引的mapping:
curl -XPUT -H "Content-Type: application/json" "127.0.0.1:9200/testdata/_mapping/nodes" -d ' {
"properties": {
"id": {
"type": "integer"
},
"node_flag": {
"type": "integer"
},
"owner_uid": {
"type": "keyword"
},
"parent_uid": {
"type": "keyword"
},
"node_name": {
"type": "keyword"
},
"group_name": {
"type": "keyword"
},
"interface": {
"type": "keyword"
},
"custum_name": {
"type": "keyword"
},
"osname": {
"type": "keyword"
},
"osversion": {
"type": "keyword"
},
"update_time": {
"type": "keyword"
},
"last_active_time": {
"type": "keyword"
},
"last_login_time": {
"type": "keyword"
},
"mac": {
"type": "keyword"
},
"last_local_ip": {
"type": "keyword"
},
"last_local_ip6": {
"type": "keyword"
},
"create_time": {
"type": "keyword"
},
"create_ip": {
"type": "keyword"
},
"long_ip": {
"type": "integer"
}
}
}'
修改es 的mapping:⼀般⽽⾔,mapping⼀旦创建,只能增加字段,⽽不能修改已经存在的mapping字段,但是允许增加⼀个字段。但⼀般多采⽤重建索引的⽅式。
这⾥由于long_ip的type为integer不能存储ip地址对应的⼤整数,将修改为long
删除索引:
[root@jiangmin /]# curl -XDELETE "localhost:9200/testdata"
注意,不要带上type
重建索引:
curl -XPUT -H "Content-Type: application/json" "localhost:9200/testdata"
重建索引的mapping
同上,不做重复操作了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论