복붙노트

[SQL] 외부 데이터 소스에 MySQL 데이터베이스를 동기화하는 방법

SQL

외부 데이터 소스에 MySQL 데이터베이스를 동기화하는 방법

나는 내가 ElasticSearch 지수 데이터를 유지하는 데 필요한 검색라는 MySQL 데이터베이스 테이블이 있습니다. 난 이미 ES의 인덱스 테이블에서 테이블을 수출했다,하지만 지금은 동기화 그렇지 않으면 검색이 매우 빠르게 오래된 될 것입니다 데이터를 유지해야합니다.

내가 생각할 수있는 유일한 방법은 테이블마다 X 분을 보낸 다음 마지막으로 가져온 무엇과 비교하는 것입니다. 테이블 10M 행에 대해 가지고 있는데 하루 종일 테이블 수출 5 분마다 수행되고 싶지 않기 때문에 이것은 가능하지 않습니다. 이것에 대한 좋은 해결책이 있을까요? 참고 난 단지 데이터베이스에 대한 읽기 액세스 할 수.

해결법

  1. ==============================

    1.나는 JDBC 입력 플러그인과 elasticsearch 출력 플러그인 Logstash을 활용할 것이다. 이 솔루션의 전체 예를 도시 한 블로그 글이있다.

    나는 JDBC 입력 플러그인과 elasticsearch 출력 플러그인 Logstash을 활용할 것이다. 이 솔루션의 전체 예를 도시 한 블로그 글이있다.

    Logstash를 설치 한 후, 당신은 내가 이런 위에서 언급 한 플러그인으로 구성 파일을 만들 수 있습니다 :

    input {
        jdbc {
            jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
            jdbc_user => "user"
            jdbc_password => "1234"
            jdbc_validate_connection => true
            jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
            jdbc_driver_class => "com.mysql.jdbc.Driver"
            schedule => "5m"
            statement => "SELECT * FROM search WHERE timestamp > :sql_last_value"
        }
    }
    output {
        elasticsearch {
            protocol => http
            index => "searches"
            document_type => "search"
            document_id => "%{uid}"
            host => "ES_NODE_HOST"
        }
    }
    

    당신은 당신의 환경에 맞게 몇 가지 값을 변경해야 할 필요가 있지만, 이것은 당신이 무엇을해야하는지에 대한 문제없이 작동합니다.

    쿼리가 실행되고 타임 스탬프 (변경 이름이 데이터와 일치하는 것을) 모든 검색 기록을 가져옵니다마다 5 분 마지막 쿼리 실행 된보다 최신. 선택된 기록은 ES_NODE_HOST에 당신의 Elasticsearch 서버에있는 검색 색인에 sinked됩니다. 이에 따라 인덱스 입력 이름을 변경뿐만 아니라뿐만 아니라 데이터와 일치하는 기본 키 필드 (즉, UID)의 이름으로해야합니다.

  2. from https://stackoverflow.com/questions/33293965/how-to-sync-a-mysql-database-to-external-data-source by cc-by-sa and MIT license