Saltar al contenido

¿Cómo integrar ElasticSearch con MySQL?

Nuestros mejores programadores han agotado sus depósitos de café, por su búsqueda día y noche por la respuesta, hasta que Raquel encontró el resultado en GitLab y en este momento la comparte con nosotros.

Solución:

A partir de ES 5.x, han proporcionado esta función de fábrica con el complemento logstash.

Esto importará periódicamente datos de la base de datos y los enviará al servidor ES.

Uno tiene que crear un archivo de importación simple que se proporciona a continuación (que también se describe aquí) y usar logstash para ejecutar el script. Logstash admite la ejecución de este script en un horario.

# file: contacts-index-logstash.conf
input 
    jdbc 
        jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
        jdbc_user => "user"
        jdbc_password => "pswd"
        schedule => "* * * * *"
        jdbc_validate_connection => true
        jdbc_driver_library => "/path/to/latest/mysql-connector-java-jar"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        statement => "SELECT * from contacts where updatedAt > :sql_last_value"
    

output 
    elasticsearch 
        protocol => http
        index => "contacts"
        document_type => "contact"
        document_id => "%id"
        host => "ES_NODE_HOST"
    

# "* * * * *" -> run every minute
# sql_last_value is a built in parameter whose value is set to Thursday, 1 January 1970,
# or 0 if use_column_value is true and tracking_column is set

Puede descargar el jar mysql de maven aquí.

En caso de que los índices no existan en ES cuando se ejecute este script, se crearán automáticamente. Como una llamada posterior normal a elasticsearch

Finalmente pude encontrar la respuesta. compartiendo mis hallazgos.

Para usar ElasticSearch con Mysql, necesitará The Java Database Connection (JDBC) importador. con los controladores JDBC puede sincronizar sus datos mysql en elasticsearch.

Estoy usando ubuntu 14.04 LTS y necesitará instalar Java8 para ejecutar elasticsearch como está escrito en Java

los siguientes son pasos para instalar ElasticSearch 2.2.0 y ElasticSearch-jdbc 2.2.0 y tenga en cuenta ambas versiones tienen que ser iguales

después de instalar Java8 ….. instale elasticsearch 2.2.0 de la siguiente manera

# cd /opt

# wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.2.0/elasticsearch-2.2.0.deb

# sudo dpkg -i elasticsearch-2.2.0.deb

Este procedimiento de instalación instalará Elasticsearch en / usr / share / elasticsearch / cuyos archivos de configuración se colocarán en / etc / elasticsearch.

Ahora hagamos una configuración básica en el archivo de configuración. aquí /etc/elasticsearch/elasticsearch.yml es nuestro archivo de configuración, puede abrir el archivo para cambiarlo

nano /etc/elasticsearch/elasticsearch.yml

y cambiar el nombre del clúster y el nombre del nodo

Por ejemplo :

# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
 cluster.name: servercluster
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
 node.name: vps.server.com
#
# Add custom attributes to the node:
#
# node.rack: r1

Ahora guarde el archivo e inicie elasticsearch

 /etc/init.d/elasticsearch start

para probar ES instalado o no se ejecuta siguiendo

 curl -XGET 'http://localhost:9200/?pretty'

Si sigue, entonces su elasticsearch está instalado ahora 🙂


  "name" : "vps.server.com",
  "cluster_name" : "servercluster",
  "version" : 
    "number" : "2.2.0",
    "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
    "build_timestamp" : "2016-01-27T13:32:39Z",
    "build_snapshot" : false,
    "lucene_version" : "5.4.1"
  ,
  "tagline" : "You Know, for Search"

Ahora instalemos elasticsearch-JDBC

descargarlo de http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.3.1/elasticsearch-jdbc-2.3.3.1-dist.zip y extraiga lo mismo en / etc / elasticsearch / y cree la carpeta “registros” también allí (la ruta de los registros debe ser / etc / elasticsearch / logs)

Tengo una base de datos creada en mysql con nombre “ElasticSearchDatabase“y dentro de eso tabla llamada “prueba” con campos id, nombre y correo electrónico

cd /etc/elasticsearch

y corre siguiendo

echo '
"type":"jdbc",
"jdbc":

"url":"jdbc:mysql://localhost:3306/ElasticSearchDatabase",
"user":"root",
"password":"",
"sql":"SELECT id as _id, id, name,email FROM test",
"index":"users",
"type":"users",
"autocommit":"true",
"metrics": 
            "enabled" : true
        ,
        "elasticsearch" : 
             "cluster" : "servercluster",
             "host" : "localhost",
             "port" : 9300 
         

' | java -cp "/etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/lib/*" -"Dlog4j.configurationFile=file:////etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/bin/log4j2.xml" "org.xbib.tools.Runner" "org.xbib.tools.JDBCImporter"

ahora verifique si los datos de mysql se importaron en ES o no

curl -XGET http://localhost:9200/users/_search/?pretty

Si todo va bien, podrá ver todos sus datos de mysql en formato json y si hay algún error, podrá verlos en el archivo /etc/elasticsearch/logs/jdbc.log

Precaución :

En versiones anteriores del complemento ES … Elasticsearch-río-jdbc se usó, que está completamente obsoleto en la última versión, así que no lo use.

Espero poder ahorrar tu tiempo 🙂

Cualquier otro pensamiento es apreciado.

URL de referencia: https://github.com/jprante/elasticsearch-jdbc

El complemento logstash JDBC hará el trabajo:

input {
  jdbc  
    jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb"
    jdbc_user => "root"
    jdbc_password => "factweavers"
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/home/comp/Downloads/mysql-connector-java-5.1.38.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    # our query
    schedule => "* * * *"
    statement => "SELECT" * FROM testtable where Date > :sql_last_value order by Date"
    use_column_value => true
    tracking_column => Date


output 
  stdout  codec => json_lines 
  elasticsearch 
  "hosts" => "localhost:9200"
  "index" => "test-migrate"
  "document_type" => "data"
  "document_id" => "%personid"
  

Si haces scroll puedes encontrar las referencias de otros gestores de proyectos, tú todavía puedes insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *