# Sync Data from ES to MySQL

**URL:** <https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370>\
**Category:** Elasticsearch\
**Created:** [September 21, 2017, 4:24pm UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370 "2017-09-21T16:24:40Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![faoc](https://avatars.discourse-cdn.com/v4/letter/f/c2a13f/32.png) [@faoc](https://discuss.elastic.co/u/faoc)\
**Post date:** [September 21, 2017, 4:24pm UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370/1 "2017-09-21T16:24:40Z")

</div>

i'm using elasticsearch to record a lot of messages. I want to create a ETL process with this ES data and create a DW in MySQL. How can i get data from ES, create a ETL process and insert it into MySQL DB? Any tool for that or is better use ,for example NodeJS or Python?

---

<div class="post-metadata">

**Author:** ![warkolm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/warkolm/32/39224_2.png) [@warkolm](https://discuss.elastic.co/u/warkolm)\
**Post date:** [September 21, 2017, 10:41pm UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370/2 "2017-09-21T22:41:00Z")

</div>

Logstash can do it with the JDBC input.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [September 22, 2017, 3:02am UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370/3 "2017-09-22T03:02:58Z")

</div>

I think he wants to do that the other way.

Read from ES, write in MySQL.

We don't have yet a change API but for a one shot operation you can run a scroll query on elasticsearch to get all the docs. Then parse the JSON and write the SQL INSERT queries you need.

---

<div class="post-metadata">

**Author:** ![warkolm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/warkolm/32/39224_2.png) [@warkolm](https://discuss.elastic.co/u/warkolm)\
**Post date:** [September 22, 2017, 3:45am UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370/4 "2017-09-22T03:45:31Z")

</div>

Ahh yeah, good point 😛

---

<div class="post-metadata">

**Author:** ![faoc](https://avatars.discourse-cdn.com/v4/letter/f/c2a13f/32.png) [@faoc](https://discuss.elastic.co/u/faoc)\
**Post date:** [September 22, 2017, 9:06am UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370/5 "2017-09-22T09:06:41Z")

</div>

Thank u. it is exactly what i want. But is not a scroll query too heavy? I want collect all data from one day (600k documents) and do a insert in MySQL. Do you think is better take small pieces and treat each one?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [September 22, 2017, 9:35am UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370/6 "2017-09-22T09:35:17Z")

</div>

> Do you think is better take small pieces and treat each one?

That's what scroll API is built for.  
You scroll over x documents let say 200 by 200 docs.

---

<div class="post-metadata">

**Author:** ![faoc](https://avatars.discourse-cdn.com/v4/letter/f/c2a13f/32.png) [@faoc](https://discuss.elastic.co/u/faoc)\
**Post date:** [September 22, 2017, 9:55am UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370/7 "2017-09-22T09:55:10Z")

</div>

ok, i understand.  
Thank you 🙂

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [October 20, 2017, 9:55am UTC](https://discuss.elastic.co/t/sync-data-from-es-to-mysql/101370/8 "2017-10-20T09:55:33Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
