Maxwell を使用して MySQL データをリアルタイムで同期する方法

Maxwell を使用して MySQL データをリアルタイムで同期する方法

マクスウェルについて

Maxwell は、MySQL のバイナリログをリアルタイムで読み取り、JSON 形式で行の更新を Kafka、RabbitMq、Redis などに書き込むことができる Java で書かれたデーモンです。MySQL の増分データ ストリームを使用すると、データのキャッシュへのリアルタイム同期、データの ElasticSearch への同期、データ移行など、さまざまな使用シナリオがあります。

マクスウェル公式サイト: http://maxwells-daemon.io
Maxwell ソースコード: https://github.com/zendesk/maxwell

Maxwellの設定と使用

Maxwell は Java SDK に依存しているため、最初に JDK 環境を構成する必要があります。

1. Maxwellインストールパッケージをダウンロードする

root@xxx マクスウェル]# pwd
/usr/local/マックスウェル
[root@xxx maxwell]# wget https://github.com/zendesk/maxwell/releases/download/v1.19.5/maxwell-1.19.5.tar.gz
[root@xxx maxwell]# tar zxvf maxwell-1.19.5.tar.gz 
[root@xxx maxwell]# cd maxwell-1.19.5

2. MySQLを設定し、MySQL binlogログを開く

[root@xxx mysql]# vi /usr/local/mysql/my.cnf 

[mysqld]
log-bin=mysql-bin #この行を追加 binlog-format=ROW #行モードを選択 server_id=1 #クラスター内の他のマシンの名前と同じにならない文字列をランダムに指定します。マシンが1台しかない場合は、自由に指定できます

mysqlサービスを再起動し、mysqlにログインして、binlogログモードを表示します。

mysql> '%log_bin%' のような変数を表示します
+---------------------------------+---------------------------------+
| 変数名 | 値 |
+---------------------------------+---------------------------------+
| log_bin | オン |
| log_bin_basename | /data/mysqldb/mysql-bin |
| log_bin_index | /data/mysqldb/mysql-bin.index |
| log_bin_trust_function_creators | オフ |
| log_bin_use_v1_row_events | オフ |
| sql_log_bin | オン |
+---------------------------------+---------------------------------+
セット6行(0.11秒)

Maxwell には、schema_database オプションで指定されたデータベース (デフォルトのデータベース名は maxwell) に状態を保存する権限が必要なので、事前に権限を付与する必要があります。

#同期されたデータを持つユーザーyhreplを作成する
mysql> 'scgaopan' によって識別されるユーザー 'yhrepl'@'*' を作成します。 
クエリは正常、影響を受けた行は 0 行 (0.10 秒)

#このユーザー yhrepl には、同期する必要があるデータベース テーブルを操作する権限が必要です。mysql> 'scgaopan' によって識別される 'yhrepl'@'%' に test.* のすべての権限を付与します。 
クエリは正常、影響を受けた行は 0 行 (0.13 秒)

# yhrepl にデータを同期する権限を与えますmysql> grant select,replication client,replication slave on *.* to 'yhrepl'@'%' identified by 'scgaopan';
クエリは正常、影響を受けた行は 0 行 (0.10 秒)
# Maxwell には、schema_database オプションで指定されたデータベースに状態を保存する権限が必要です (デフォルトのデータベース名は maxwell です)
mysql> 'scgaopan' で識別される 'yhrepl'@'%' に maxwell.* のすべての権限を付与します。
クエリは正常、影響を受けた行は 0 行 (0.09 秒)

3. Maxwell を起動し、主に rabbitmq にデータを書き込む実際の戦闘を紹介します。

[root@xxx maxwell-1.19.5]# vi /usr/local/maxwell/maxwell-1.19.5/config.properties
#ログレベル log_level=DEBUG

プロデューサー=rabbitmq
デーモン=true

#監視対象データベース、mysql ユーザーに binlog の読み取りと新しいデータベース テーブルの作成権限が必要です host=47.105.110.xxx
ユーザー=yhrepl
パスワード=scgaopan

出力NULL=true
jdbc_options=自動再接続=true

#データベース内のどのテーブルが監視されますか? filter=exclude: *.*,include: test.AA

#replica_server_id および client_id の一意の識別子。クラスターの展開に使用されます。replica_server_id=64
client_id=テストID

#メトリックス_type=http
#メトリックス_slf4j_間隔=60
#http_port=8111
#http_diagnostic=true # デフォルトは false

#うさぎ
rabbitmq_host=47.105.110.xxx
ラビットmq_port=5672
rabbitmq_user=ゲスト
rabbitmq_pass=ゲスト
rabbitmq_virtual_host=/
rabbitmq_exchange=マックスウェル
rabbitmq_exchange_type=トピック
rabbitmq_exchange_durable=false
rabbitmq_exchange_autodelete=false
rabbitmq_routing_key_template=%db%.%テーブル%
rabbitmq_message_persistent=偽
rabbitmq_declare_exchange=true

マクスウェルを起動します:

[root@xxx maxwell-1.19.5]# ./bin/maxwell
#バックグラウンドで起動できます [root@xxx maxwell-1.19.5]# nohub ./bin/maxwell &

起動が成功すると、maxwell ライブラリが自動的に生成されます。ライブラリには、maxwell 同期の状態、最後の同期の ID などの情報が記録されます。メインライブラリが失敗した後、または同期が異常になった後、maxwell ライブラリが存在する限り、次の同期は最後の同期の ID に基づいて行われます。 maxwell ライブラリが生成されないか、エラーが報告される場合は、config.properties で設定された mysql ユーザー権限が不十分である可能性があります。

RabbitMQ の操作

RabbitMQ操作では、Maxwellを起動すると、Maxwell交換が生成される。

ただし、対応するキュー、エクスチェンジ、キューのバインディングはユーザーが実装する必要があります。

maxwell-test キューを作成します。

キューをエクスチェンジにバインドします。

ここでのルーティング キーでは大文字と小文字が区別されることに注意してください。

データベース内のレコードを変更すると、maxwell-test キューにレコードがあることがわかります。

完全な同期

maxwell-bootstrapコマンドを使用する

./bin/maxwell-bootstrap --database xhd --table xhd-sso --host 127.0.0.1 --user xiehd --password xiehd2018 --client_id maxwell_dev

xhd.xhd-sso テーブル内のすべてのデータを同期し、同期を実行するために client_id maxwell_dev で maxwell を指定します。

前のコマンドを最初に開き、次にclient_id=maxwell_devでmaxwellを起動します。

./bin/maxwell --client_id maxwell_dev

実行が完了するまで待ちます

上記は、Maxwell を使用して MySQL データをリアルタイムで同期する方法の詳細です。Maxwell を使用して MySQL データを同期する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • PythonはMySQLの指定されたテーブルの増分データをClickhouseに同期するスクリプトを実装します
  • MySQLデータベースのマスタースレーブ同期の実際のプロセスの詳細な説明
  • MySQL データベースにスクレイピー データを保存する 2 つの方法 (同期と非同期)
  • MySQL マスター/スレーブ データベース同期構成と一般的なエラー
  • KTLツールはMySQLからMySQLへのデータの同期方法を実現します
  • Python を使用して MySQL データを ElasticSearch に同期する方法のチュートリアル
  • MySQLデータベースのマスタースレーブ同期構成と読み取り書き込み分離
  • node.js を使用して MongoDB データを MySQL に同期する手順
  • Linux での MySQL データベースのマスター スレーブ同期レプリケーション構成
  • PHPはSWOOLE拡張機能を使用してMySQLデータを同期します

<<:  Vue でユーザー権限に基づいてルートを動的に追加する方法

>>:  shtmlとhtmlの違い

推薦する

ページデザインにおけるテーブルとdivの適切な適用についての簡単な説明

この記事の冒頭で、以前書いた入門記事の間違いを訂正したいと思います。初心者を再び誤解させないように、...

JS で async と await を使用する方法

目次1. 非同期2. 待つ: 3. 包括的なアプリケーション1. 非同期async 、非同期コードが...

HTML のオートコンプリートを無効にして履歴を表示しないようにする

入力ボックスには、コンテンツを入力するときに常に入力履歴が表示されます。これを無効にする現在の方法は...

React Diff Principle の詳細な分析

目次差分アルゴリズムレイヤーごとの比較同じタイプのコンポーネントを比較する同じタイプの要素の比較子ノ...

MySQL のダウンロードとインストールの詳細グラフィックチュートリアル

1. MySQLデータベースをダウンロードするには、公式Webサイトにアクセスしてください:http...

MySQLにおけるrow_numberの実装プロセス

1. 背景一般的に、データ ウェアハウス環境では、row_number 関数を使用して特定のディメン...

Reactはページの透かし効果の全プロセスを実現します

目次序文1. 使用例2. 実施プロセス3. コンポーネントコード要約する序文1. cavans では...

MySQL でコミットされていないトランザクションを見つけるための SQL の例の簡単な分析

以前、「MySQL でコミットされていないトランザクション情報を検索する方法」というタイトルのブログ...

W3C チュートリアル (13): W3C WSDL アクティビティ

Web サービスは、アプリケーション間の通信に関係します。 WSDL は、XML ベースの Web ...

プレーンな JS オブジェクトの代わりに Map を使用する場合

目次1. マップは任意のタイプのキーを受け入れます2. マップにはキー名に関する制限はありません3....

uniapp パッケージ化されたアプレット レーダー チャート コンポーネントの完全なコード

効果画像:実装コードは以下のとおりですビュー <canvas id="radar-c...

ウェブレスポンシブレイアウトにおけるiframe適応の方法

問題<br />レスポンシブ レイアウトでは、iframe 要素に注意する必要があります...

Vue3におけるキーの役割と動作原理についての簡単な説明

このキー属性の機能は何ですか?まずは公式の説明を見てみましょう。 kekey 属性は主に、新しいノー...

CentOS7 構成 Alibaba Cloud yum ソースメソッドコード

Centos yumフォルダを開くコマンドcd /etc/yum.repos.d/を入力します。 w...

MySQL の簡単な分析 - MVCC

バージョンチェーンInnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つ...