MySQL 5.7 における部分テーブルのデュアルマスター同期の実装プロセスの詳細な説明

MySQL 5.7 における部分テーブルのデュアルマスター同期の実装プロセスの詳細な説明

序文

最近、私はある要件に遭遇しました。会社の業務上、2 つのデータベース間の一部のテーブルは、リアルタイムかつ双方向にデータを同期する必要があり、いずれかのデータベースのダウンタイムが他のデータベースに影響を与えないようにする必要があります。ここでは、後の再構築に使用するために、私自身の技術調査を記録します。早速、詳しい紹介を見ていきましょう。

MySQL 5.7をインストールする

インストール用の yum ソースをダウンロードするには、公式 Web サイト https://dev.mysql.com に直接アクセスすることをお勧めします。これは安全で便利です。

https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm を実行します。
yum -y インストール mysql57-community-release-el7-11.noarch.rpm
yum -y mysql-server をインストールします
# MySQL 5.7 をインストール
systemctl で mysqld を起動します。
# MySQLを起動する

デュアルアクティブの設定

my.cnf の設定

ここでは単純なデュアルマスター構成のみを行い、データベース関連の最適化は行いません。最適化が必要な場合は、プライベートチャットでお問い合わせください。

MySQL1の設定は以下のとおりです

[mysqld]
vim /etc/my.cnf
データディレクトリ=/var/lib/mysql
ソケット=/var/lib/mysql/mysql.sock
シンボリックリンク=0
ログエラー=/var/log/mysqld.log
pidファイル=/var/run/mysqld/mysqld.pid
スキップ名解決=オン
#シンプルなパスワードを設定するvalidate_password_policy=0
パスワードの長さを検証する=1
###メイン設定 log_bin=bin_log
サーバーID=1
binlog-do-db=ziyun
# どのライブラリがslave_parallel_type='logical_clock'から複製できるか
#レプリケーションタイプをLOGICAL_CLOCKに設定する
スレーブ並列ワーカー = 4
#並列処理の数を4に設定する
###設定relay-log=relay-binから
リレーログインデックス=リレービンインデックス
複製するDB=ziyun
# メインサービスライブラリのレプリケーションを許可する replicate-do-table=ziyun.test1
# メインサービスライブラリのどのテーブルが複製可能か replicate-do-table=ziyun.test2

MySQL2 の設定は基本的に上記と同じですが、 server-id=2が変更され、残りは変更されません。

MySQLコマンド設定

SQLコマンドラインインターフェースでは以下が設定されます

主な構成:

mysql> 'slave'@'192.168.1.100' というユーザーを作成し、'123.com' で識別します。 
mysql> 'slave'@'192.168.1.100' に *.* のレプリケーションスレーブ権限を付与します。
# 承認されたレプリケーション ユーザーとパスワードmysql> show master status;
+-----------------+----------+--------------+------------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+------------------+
| bin_log.000002 | 8384 | ziyun | | |
+-----------------+----------+--------------+------------------+------------------+
セット内の 1 行 (0.00 秒)

構成から:

mysql> マスターを変更する
 -> MASTER_HOST='192.168.1.101',
 -> MASTER_USER='スレーブ'、
 -> MASTER_LOG_FILE='bin_log.000002'、
 -> MASTER_LOG_POS=8384;
クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.01 秒)
mysql> スレーブを起動します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
mysql>スレーブステータスを表示\G
  スレーブIO実行中: はい
  スレーブSQL実行中: はい
# 上記のすべてが「はい」であり、エラーがないことを確認します。

MySQL2でも同じ設定が可能です

デュアルマスター同期テスト

ここでは、両側に ziyun データベースを構築し、test1 test2 test3 テーブルを作成しました。テスト結果は次のとおりです。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQLは2つのテーブル間のデータの同期を実現します
  • 自動同期テーブル構造のMySql開発

<<:  VUEはFlappy Birdゲームのサンプルコードを実装します

>>:  新しい Linux ファイル権限設定における umask の詳細な理解

推薦する

Ubuntu システムログで /var/log/messages を設定する方法

1. 問題の説明今日、システム ログ ファイルを確認する必要がありますが、/var/log/mess...

Nginx 静的ファイル サービスの構成と最適化の詳細な説明

ルートディレクトリとインデックスファイルroot ディレクティブは、ファイルの検索に使用するルート ...

Vueは小さなフォーム検証機能を実装します

この記事では、フォーム検証を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は...

ページ切り替え効果を実現するJSコード

この記事の例では、ページ切り替え効果を実現するためのJSコードの具体的なコードを参考までに共有してい...

CSS で要素を垂直方向に中央揃えする 7 つの方法

【1】中央の要素の幅と高さを知る絶対値 + 負のマージンコードの実装 .wrapBox5{ 幅: 3...

JavaScript エラー処理 try..catch...finally + は throw+TypeError+RangeError をカバーします

目次1. 目的2. 文法3. 練習する1. 目的通常、エラーが発生すると、スクリプトは直ちに停止し、...

プライベートDockerリポジトリであるHarborをインストールするための詳細な手順

Harborのインストールは非常に簡単ですが、Dockerログインで行き詰まってしまいました。このブ...

js を使用して XML オンライン エディターを作成する例

目次序文オンラインXMLエディタの必要性テクノロジー事前調査ビジュアルプログラミングVSCODEプラ...

Alibaba Cloud CentOS 7 に MySQL 8.0.13 をインストールする方法

1. MySQL インストール パッケージをダウンロードします(ここにはコツがあります。おそらく、こ...

Tomcatの自動シャットダウンに関するバグ修正

序文最近、4 年間実行されている Java EE Web プロジェクトでは、システムが開けないという...

MySQLでテーブルを作成し、フィールドコメントを追加する方法

コードと例を直接投稿する #テーブル作成時にコメントを記述する CREATE TABLE useri...

Nodejs で WeChat アカウント分割を実装するためのサンプルコード

会社のビジネスシナリオでは、WeChat アカウント分割機能を使用する必要があります。公式 Web ...

Typescript+React でモバイルと PC でシンプルなドラッグ アンド ドロップ効果を実現

この記事では、モバイルとPCで簡単なドラッグアンドドロップ効果を実現するためのTypescript ...

MySQL ストアド プロシージャのクエリ コマンドの概要

以下のように表示されます。 mysql.proc から名前を選択します (db='データベー...

忘れられたMySQLパスワードとログインエラーの問題について簡単に説明します

MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...