返回

简易方案,轻松同步 MySQL 数据到 Elasticsearch

开发工具

众所周知,同步 MySQL 数据到 Elasticsearch 是一种常见需求。为了处理数据,可以使用自定义同步程序,但如果业务需求并不特殊,官方提供的 Logstash 就能发挥很大作用。

Logstash 的优势

  • 易于使用:Logstash 提供了一个用户友好的界面,简化了同步过程,即使是新手也能轻松上手。
  • 功能强大:Logstash 具有强大的数据处理功能,能够满足各种同步需求,例如过滤、转换和聚合数据。
  • 可扩展性强:Logstash 可以轻松扩展,以满足不断增长的数据同步需求,确保系统能够随着业务的发展而平稳运行。

Logstash 的局限性

  • 不支持被物理删除的数据同步:如果数据在 MySQL 中被物理删除,Logstash 将无法将其同步到 Elasticsearch 中。
  • 不支持物理删除 ES 中的数据:如果数据在 Elasticsearch 中被物理删除,Logstash 也无法将其同步回 MySQL 中。

同步步骤

  1. 安装 Logstash

    在所有需要同步数据的服务器上安装 Logstash。

  2. 配置 Logstash

    编辑 Logstash 的配置文件 logstash.conf,添加以下内容:

    input {
        jdbc {
            jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
            jdbc_user => "root"
            jdbc_password => "password"
            statement => "SELECT * FROM mytable"
        }
    }
    
    output {
        elasticsearch {
            hosts => ["localhost:9200"]
            index => "myindex"
            document_type => "mytype"
        }
    }
    
  3. 启动 Logstash

    运行以下命令启动 Logstash:

    bin/logstash -f logstash.conf
    
  4. 验证数据同步

    使用以下命令检查 Elasticsearch 中的数据是否已同步:

    curl -XGET 'localhost:9200/myindex/mytype/_search?pretty'
    

注意事项

  • 在表设计中添加逻辑删除字段 IsDelete 以标识数据删除。
  • Logstash 无法同步被物理删除的数据,因此需要在应用程序中处理数据删除逻辑。
  • 如果需要更高级的同步功能,可以考虑使用其他工具,例如 Debezium 或 Kafka Connect。

Logstash 资源