1. 同期の原理MySQL ベースの Binlog ログサブスクリプション: Binlog ログは、MySQL によってデータのリアルタイムの変更を記録するために使用されます。 ESへのMySQLデータ同期には、完全同期と増分同期の2種類があります。 完全同期とは、ES インデックスが初めて確立された後、MySQL 内のすべてのデータが一度に ES にインポートされることを意味します。 増分同期とは、MySQL に新しいデータが生成されることを意味します。これらの新しいデータには、MySQL に新しく挿入されたデータ、更新された古いデータ、削除されたデータの 3 つの状況が含まれます。これらのデータの変更と追加は、ES に同期する必要があります。 2. ログスタッシュ入力JDBC公式の logstash プラグインは logstash に統合されています。logstash をダウンロードし、構成ファイルを通じて mysql と elasticsearch のデータを同期するだけです。 アドバンテージ
欠点
3. go-mysql-elasticsearchgo-mysql-elasticsearchは国内の作者によって開発されたプラグインです アドバンテージ
欠点
4. エラスティックサーチJDBCelasticsearch-jdbc の最新バージョンは 2.3.4 ですが、サポートされている ElasticSearch バージョンは 2.3.4 ですが、まだ実装されていません。 アドバンテージ
欠点
5. Logstash-input-jdbc 同期最初のステップはインストールです。 logstash5.x 以降では、logstash-input-jdbc プラグインが統合されています。 logstashをインストールした後、コマンドでlogstash-input-jdbcプラグインをインストールします。 cd /logstash-6.4.2/bin ./logstash-plugin をインストールしてlogstash-input-jdbc 2 番目のステップの構成: logstash-6.4.2/config フォルダに新しい jdbc.conf を作成し、次のように設定します。 logstash-6.4.2/configディレクトリに新しいjdbc.sqlファイルを作成します。 t_employee から * を選択 ステップ3: 実行 ログスタッシュ-6.4.2 # 設定ファイルの構文が正しいかどうかを確認します bin/logstash -f config/jdbc.conf --config.test_and_exit # bin/logstash を起動 -f config/jdbc.conf --config.reload.automatic --config.reload.automatic: 設定ファイルの内容を自動的にリロードします Kibanaでインデックスを作成した後、同期されたデータを表示します。 タコを入れる タコ/_searchを取得する 6. go-mysql-elasticsearch 同期ステップ1: mysql binlog ログ go-mysql-elasticsearch は、mysql の binlog ログを通じて elasticsearch と同期してデータを追加、削除、変更します。 MySQL の binlog ログは、主にデータベースのマスター スレーブ レプリケーションとデータ復旧に使用されます。バイナリログには、データの追加、削除、変更、クエリなどの操作が記録されます。マスター スレーブ レプリケーション プロセス中に、マスター データベースはバイナリログ ログをスレーブ データベースに同期し、スレーブ データベースはバイナリログ ログ内のイベントを再生して、マスター スレーブ同期を実現します。 MySQL binlog には 3 つのモードがあります。 ROW: 変更されたデータの各行を記録しますが、ログのボリュームが大きすぎます。STATEMENT: データを変更する各 SQL ステートメントを記録します。これにより、ログのボリュームが削減されますが、関数またはトリガーを使用すると、SQL ステートメントでマスターとスレーブの不整合が発生しやすくなります。MIXED: ROW と STATEMENT の利点を組み合わせ、データ操作を実行する特定の SQL ステートメントに応じて、ROW または STATEMENT を使用してログを記録することを選択します。 MySQL binlog を介して ES クラスターにデータを同期するには、ROW モードのみを使用できます。これは、ROW モードのみが MySQL 内のデータの変更された内容を知ることができるためです。 UPDATE 操作を例にとると、ROW モードでの binlog ログの内容は次のようになります。 タイムスタンプを 1527917394/*!*/ に設定します。 始める //*!*/; # 3751 で #180602 13:29:54 サーバー ID 1 end_log_pos 3819 CRC32 0x8dabdf01 Table_map: `webservice`.`building` が番号 74 にマップされました # 3819 で #180602 13:29:54 サーバー ID 1 end_log_pos 3949 CRC32 0x59a8ed85 Update_rows: テーブル ID 74 フラグ: STMT_END_F バイナリログ' 翻訳: wACAAQAAAAHfq40= UisSWx8BAAAAggAAAG0PAAAAAEoAAAAAAAEAAgAG///A1gcAAAAAAAAALYnVpbGRpbmctMTAADwB3 ウクRNbjNLYlV5d1k3ajVbD64WWw+uFsDWBwAAAAAAAAAtidWlsZGluZy0xMAEPAHdSRE1uM0tiVXl3 WTdqNVsPrhZbD64Whe2oWQ== '/*!*/; ### `webservice`.`building` を更新します ###どこ ### @1=2006 /* LONGINT meta=0 nullable=0 is_null=0 */ ### @2='building-10' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ ### @3=0 /* TINYINT メタ=0 nullable=0 is_null=0 */ ### @4='wRDMn3KbUywY7j5' /* VARSTRING(384) meta=384 nullable=0 is_null=0 */ ### @5=1527754262 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @6=1527754262 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### セット ### @1=2006 /* LONGINT meta=0 nullable=0 is_null=0 */ ### @2='building-10' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ ### @3=1 /* TINYINT メタ=0 nullable=0 is_null=0 */ ### @4='wRDMn3KbUywY7j5' /* VARSTRING(384) meta=384 nullable=0 is_null=0 */ ### @5=1527754262 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @6=1527754262 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ # 3949 で #180602 13:29:54 サーバー ID 1 end_log_pos 3980 CRC32 0x58226b8f Xid = 182 専念 /*!*/; STATEMENT モードでの binlog コンテンツの例は次のとおりです。 タイムスタンプを 1527919329/*!*/ に設定します。 ビルディングセットを更新 Status=1、Id=2000 //*!*/; # 688 で #180602 14:02:09 サーバー ID 1 end_log_pos 719 CRC32 0x4c550a7d Xid = 200 専念 /*!*/; ROW モードと STATEMENT モードでの UPDATE 操作のログの内容から、ROW モードでは更新前の変更対象データの行のすべてのフィールドの値と変更後のすべてのフィールドの値が完全に記録されるのに対し、STATEMENT モードでは UPDATE 操作の SQL 文のみが記録されることがわかります。 MySQL データを ES にリアルタイムで同期したい場合は、ROW モードで binlog を選択し、binlog ログのデータ内容を取得して解析し、ES ドキュメント API を実行して、データを ES クラスターに同期するしかありません。 binlog モードの表示と変更 # binlog を表示 modemysql> show variables like "%binlog_format%"; # binlog mode を変更します。mysql> set global binlog_format='ROW'; # binlog が有効になっているかどうかを確認します。mysql> show variables like 'log_bin'; # バイナリログを有効にする my.cnfファイルlog-bin = mysql-binを変更します。 ステップ2 インストール # goをインストールする sudo apt-get をインストールして実行します # godepをインストールする github.com/tools/godep にアクセスしてください # go-mysql-elasticsearch プラグインを取得する go get github.com/siddontang/go-mysql-elasticsearch # go-mysql-elasticsearch プラグインをインストールします cd go/src/github.com/siddontang/go-mysql-elasticsearch 作る ステップ3 構成 go/src/github.com/siddontang/go-mysql-elasticsearch/etc/river.toml # MySQL アドレス、ユーザー名、パスワード # ユーザーは MySQL でレプリケーション権限を持っている必要があります。 my_addr = "127.0.0.1:3306" # 同期する必要がある基本的なmysql設定 my_user = "root" my_pass = "ルート" # Elasticsearch アドレス es_addr = "127.0.0.1:9200" # ローカル elasticsearch 設定 # master.info などのデータを保存し、MySQL データをダンプするパス data_dir = "./var" # データ保存URL # 以下の設定はデフォルトとして保存されます# 内部 HTTP ステータス アドレス stat_addr = "127.0.0.1:12800" # スレーブのような疑似サーバー ID サーバーID = 1001 #mysql または mariadb フレーバー = "mysql" #mysqldump 実行パス mysqldump = "mysqldump" #MySQL データソース [[ソース]] schema = "test" //elasticsearch が mysql と同期される場合の対応するデータベース名 # 以下のテーブルのみが Elasticsearch に同期されます。 # テスト データベース内の複数のテーブルを同期します。テーブル パーティション メカニズムを使用する一部のプロジェクトでは、ワイルドカードを使用して一致させることができます。たとえば、t_[0-9]{4} はテーブル t_0000 から t_9999 まで一致させることができます。 テーブル = ["t", "t_[0-9]{4}", "tfield", "tfilter"] # 以下は特別なルールマッピングです # テーブルの場合、そのデータを同期する ES インデックスのタイプを指定する必要があります。指定されていない場合は、デフォルトでスキーマ#名をESインデックスとタイプとして使用します。 [[ルール]] schema = "test" //データベース名table = "t" //テーブル名index = "test" //対応するインデックス名type = "t" //対応するタイプ名# t_[0-9]{4}の形式を満たすすべてのテーブルを、インデックスtestとタイプtのESに同期します。もちろん、これらのテーブルでは、# スキーマが一貫していることを確認する必要があります [[rule]] スキーマ = "テスト" テーブル = "t_[0-9]{4}" インデックス = "テスト" タイプ = "t" # テーブル tfilter では、id 列と name 列のみを同期し、他の列は同期しません。filter = ["id", "name"] # テーブル tfield の列 id は es_id にマップされ、タグは es_tags にマップされます # list このフィールドは、対応する列データを ES 配列型に変換する必要があることを明示的に示します。これは現在、MySQL の varchar # やその他の型でよく使用されています。「a, b, c」のようなデータを保存し、ES に同期するときに [a, b, c] のようなリスト形式に変換したい場合があります。 [ルールフィールド] # 列 `id` を ES フィールド `es_id` にマップします id="es_id" # 列 `tags` を配列型の ES フィールド `es_tags` にマップします tags="es_tags,リスト" # 列 `keywords` を配列型で ES にマップする キーワード=",リスト" ステップ4: 実行 cd go/src/github.com/siddontang/go-mysql-elasticsearch bin/go-mysql-elasticsearch -config=./etc/river.toml 7. Elasticsearch-jdbc 同期ツールをダウンロードする 解凍: elasticsearch-jdbc-2.3.2.0-dist.zip を解凍します 環境変数の設定 [root@autofelix /]# vi /etc/profile エクスポート JDBC_IMPORTER_HOME=/elasticsearch-jdbc-2.3.2.0 環境変数を有効にする [root@autofelix /]# ソース /etc/profile 構成リファレンス ステップ1: 次のようにルートディレクトリに新しいフォルダodbc_esを作成します。 [root@autofelix /]# ll /odbc_es/ drwxr-xr-x 2 ルート ルート 4096 6月16日 03:11 ログ -rwxrwxrwx 1 ルート ルート 542 6月16日 04:03 mysql_import_es.sh ステップ2: 次の内容で新しいスクリプトmysql_import_es.shを作成します。 [root@autofelix odbc_es]# cat mysql_import_es.sh '#!/bin/sh bin=$JDBC_IMPORTER_HOME/bin lib=$JDBC_IMPORTER_HOME/lib エコー '{ 「タイプ」:「jdbc」、 "jdbc": { "elasticsearch.autodiscover":true、 "elasticsearch.cluster":"my-application", #クラスター名、参照: /usr/local/elasticsearch/config/elasticsearch.yml "url":"jdbc:mysql://10.8.5.101:3306/test", #mysql データベース アドレス "user":"root", #mysql ユーザー名 "password":"123456", #mysql パスワード "sql":"select * from cc", 「エラスティックサーチ」: { 「ホスト」:「10.8.5.101」、 「ポート」: 9300 }, "index" : "myindex", #新しいインデックス "type" : "mytype" #新しいタイプ } }'| java \ -cp "${lib}/*" \ -Dlog4j.configurationFile=${bin}/log4j2.xml \ org.xbib.tools.ランナー \ org.xbib.tools.JDBCインポーター ステップ 3: mysql_import_es.sh に実行権限を追加します。 [root@autofelix odbc_es]# chmod a+x mysql_import_es.sh ステップ4: スクリプトmysql_import_es.shを実行する [root@autofelix odbc_es]# ./mysql_import_es.sh これで、Mysql データを Elasticsearch に同期する方法に関するこの記事は終了です。Mysql データを Elasticsearch に同期する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vue のプラグインとコンポーネントの違いと使い方のまとめ
>>: ブラウザは関連するHTTPヘッダーをキャッシュし、HTTPリクエストの数を最小限に抑えます。
目次1. css() の基本的な使用法: 1.1 CSSプロパティを取得する1.2 CSSプロパティ...
成果を達成する実装コードhtml <input type="radio" ...
目次序文1. オブジェクト.freeze() 2. オブジェクト.seal() 3. オブジェクト....
債券とは何かNIC ボンドは、実稼働シナリオでよく使用されるテクノロジーです。複数の NIC を 1...
序文プロジェクト開発では、アイコンを使用する方法はたくさんあります。iconfont で適切なアイコ...
序文vue3 を使った例をいくつか書いてみましたが、Vue3 のコンポジション API はよく設計さ...
今日、redis をインストールしたところ、今までになかったいくつかのエラーが発生しました。ここで記...
キープアライブとは何ですか?通常の開発では、コンポーネントによっては複数回初期化する必要のないものも...
導入: Lambda Probe (旧称 Tomcat Probe) は、Apache Tomcat...
1. Windows10の組み込みLinuxサブシステムをインストールする1.1. Linuxサブシ...
1.コアファイルプログラム実行中にセグメンテーション エラー (コア ダンプ) が発生すると、プログ...
1. 環境整備Tencent Cloud Server CENTOS 7 バージョンDockerコン...
この記事では、Harbor アーキテクチャの構成と、実行時に各コンポーネントを使用する方法について説...
目次スプリングブートDocker spring-boot-maven-プラグインSpotify Ma...
画像をダウンロードMySQLイメージの選択 docker 検索 mysql MySQL 5.7 イメ...