DockerでMySQLマスタースレーブ環境を構築する方法の詳しい説明

DockerでMySQLマスタースレーブ環境を構築する方法の詳しい説明

序文

この記事では、docker-compose と dockerfile を使用して、binlog に基づく MySQL マスター スレーブ環境を構築する方法を説明します。この記事の手順に厳密に従えば、基本的な MySQL マスター/スレーブ環境をすぐに構築できると思います。

導入

MySQL マスター スレーブ同期は 3 つのステップに分かれています。

  • マスターノードはデータ更新レコードをバイナリログに書き込みます。
  • スレーブノードは、マスターノードに接続するための IO スレッドを開始し、指定されたバイナリログファイルの指定された位置以降のログを取得するように要求します。
  • マスターノードのバイナリログダンプスレッドは、指定されたバイナリログ情報をスレーブノードにプッシュします。
  • メッセージを受信した後、スレーブノードの IO スレッドはログの内容をリレーログファイルに書き込みます。
  • スレーブ ノードの SQL スレッドは、リレー ログに新しいコンテンツが追加されたことを検出し、リレー ログ ファイルをすぐに解析して対応する SQL ステートメントを生成し、これらの SQL ステートメントをデータベースに再生して、マスターとスレーブ間のデータの一貫性を確保します。

構成

ディレクトリ構造を作成する

まず、ディレクトリ構造を取得しましょう。私のディレクトリ構造は次のとおりです。自分の考えに従ってディレクトリを構築する場合は、以下の docker-compose.yaml ファイルと Dockerfile ファイル内のファイル パスを変更することに注意してください。

docker-compose テンプレートファイルを構成する

バージョン: "3"
サービス:
 mysqlマスター:
 建てる:
  コンテクスト: 。/
  dockerfile:mysql/マスター/Dockerfile
 コンテナ名: mysql-master
 ボリューム:
  - ./mysql/master/data:/var/lib/mysql
 再起動: 常に
 ポート:
  - 3305:3306
 リンク:
  -mysqlスレーブ

 mysqlスレーブ:
 建てる:
  コンテクスト: 。/
  dockerfile:mysql/スレーブ/Dockerfile
 コンテナ名: mysql-slave
 ボリューム:
  - ./mysql/スレーブ/データ:/var/lib/mysql
 再起動: 常に
 ポート:
  -3306:3306

マスターノードのcluster.cnfファイルとDockerfileファイルを構成する

[mysqld]
サーバーID=100
binlog-ignore-db=mysql
ログ bin = レプリカ mysql bin
binlog_cache_size=1M
binlog_format=混合
スレーブスキップエラー=1062

# 私のMySQLは8.xなので、default_authentication_plugin=mysql_native_passwordを次のように設定する必要があります
文字セットサーバー=utf8mb4
照合サーバー=utf8mb4_unicode_ci
mysql:latestから
./mysql/master/cluster.cnf /etc/mysql/conf.d/cluster.cnf を追加します。
ENV MYSQL_ROOT_PASSWORD=パスワード

スレーブノードのcluster.cnfファイルとDockerfileファイルを構成する

[mysqld]
サーバーID=101
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=混合
スレーブスキップエラー=1062
リレーログ=レプリカmysqlリレーbin
ログスレーブ更新=1
読み取り専用=1

# 私のMySQLは8.xなので、default_authentication_plugin=mysql_native_passwordを次のように設定する必要があります
文字セットサーバー=utf8mb4
照合サーバー=utf8mb4_unicode_ci
mysql:latestから
./mysql/slave/cluster.cnf /etc/mysql/conf.d/cluster.cnf を追加します。
ENV MYSQL_ROOT_PASSWORD=パスワード

コンテナを作成する

docker-compose up -d mysql-master mysql-slave

上記のコマンドを実行してコンテナを作成します。ビルド時間が長すぎる場合は、次のような国内の高品質イメージソースなど、イメージソースの変更を検討できます。

ネットイース: http://hub-mirror.c.163.com

Alibaba Cloud: http://<あなたのID>.mirror.aliyuncs.com

中国科学技術大学: http://docker.mirrors.ustc.ed...

ビルドが完了したら、 docker psコマンドを使用してコンテナが正常に動作しているかどうかを確認します。次の状況が発生した場合、ビルドは成功しているとみなすことができます。

スレーブノードの構成

まず、docker コマンドを使用して mysql-master コンテナに入り、次に mysql にログインしてshow master statusコマンドを入力し、マスター データベースのステータスを取得します。ここで、後でスレーブ データベースを構成するために使用される 2 つのパラメータ、 FilePositionに注意する必要があります。

次に、docker コマンドを使用して mysql-slave コンテナに入り、mysql にログインして次のステートメントを入力して mysql-master に接続します。

マスターを変更
 MASTER_HOST='mysql-master',
 MASTER_USER='root'、
 MASTER_PASSWORD=設定したパスワード、
 MASTER_LOG_FILE=前の手順で取得したファイルパラメータ、
 MASTER_LOG_POS=前の手順で取得した位置パラメータ。

コマンドを入力した後、 start slaveコマンドを入力してスレーブ サービスを開始します。起動後、 show slave status \Gコマンドを入力してスレーブノードのステータスを表示します。次の状況が発生した場合、設定は成功しています。

マスタースレーブノードの同期ステータスをテストする

mysql-master ノードにログインし、新しいデータベースを作成します。データベースが正常に作成されたら、mysql-slave ノードに切り替えてshow databases;コマンドを入力し、同期が成功したかどうかを確認します。次の状況が発生した場合、構成は成功しています。他の操作は自分で試すこともできますが、ここでは説明しません。

要約する

これらは、MySQL マスタースレーブアーキテクチャを構築しようとしたときに記録した手順です。これで、Docker を使用して MySQL マスタースレーブ環境を構築する方法についての記事は終了です。Docker を使用して MySQL マスタースレーブ環境を構築する方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法
  • DockerとCanalをベースにMySQLのリアルタイム増分データ転送を実現
  • Docker で MySQL マスターとスレーブをデプロイする方法
  • Docker で MySQL マスター スレーブ レプリケーションを実装するためのサンプル コード
  • Docker はデータ量の問題を解決するために MySQL の binlog ログを開きます

<<:  MySQL から Excel にテーブルデータをエクスポートする際の日時形式に関する簡単な説明

>>:  Vue における {{}}、v-text、v-html の違いと用途の詳細な説明

推薦する

Python Django アプリケーションを Docker 化する方法

Docker は、開発者やシステム管理者がアプリケーションを軽量コンテナとして構築およびパッケージ化...

HTMLのmarquee属性でテキストを踊らせる

構文: <marquee> …</marquee>モバイル属性マーキーを使用...

Dockerがプライベート倉庫Harborを構築する手順

港Harborは、エンタープライズレベルのプライベートDockerイメージリポジトリを構築するための...

VUEは底部吸引ボタンを実装

この記事では、VUEの具体的なコードを共有して、下部吸引ボタンを実装する例を紹介します。具体的な内容...

win2008 サーバー セキュリティ設定の展開ドキュメント (推奨)

私は新年を迎える前からプロジェクトに取り組んでいましたが、ここ数日で、新しいサーバー用に新しく増設し...

MySQL ストアド プロシージャにおけるループ ステートメント (WHILE、REPEAT、LOOP) の使用法の分析

この記事では、例を使用して、MySQL ストアド プロシージャでのループ ステートメント (WHIL...

Vue3 シングルファイルコンポーネントのスタイル機能の詳細な説明

目次スタイルスコープスタイルモジュール状態駆動型動的CSS要約するスタイルスコープ注意事項:スタイル...

jsで照明スイッチを制御する

参考までに、jsを使用して照明スイッチを制御します。具体的な内容は次のとおりです。トピック: js ...

CSS3 タブアニメーションの例 背景切り替えの動的効果

CSS 3 アニメーションの例 - タブの背景切り替えの動的効果、具体的なコードは次のとおりです。 ...

MySQL sql_mode の使用に関する詳細な説明

目次序文sql_mode の説明最も重要なオプションすべてのオプション要約する序文前回の記事「MyS...

Navicatを使用してクラウドサーバーデータベースにリモート接続する方法

秘密鍵を開かずにリモート サーバーのデータベースに接続するのは非常に便利です。新しい接続でデータを入...

自己終了XHTMLタグを書くときに注意すべきこと

XHTMLの img タグは、次のように記述する必要があります: <img alt="...

MySQL Binlog ログ処理ツールの比較分析

目次運河マクスウェルデータバスAlibaba Cloud のデータ転送サービス (DTS)運河ポジシ...

ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

目次1. 基本原則2. 特定のコード要約する1. 基本原則まず、生放送エリアを10の部分に分割し(個...

MySQLで置換関数を実装するためのいくつかの実用的なシナリオ

REPLACE構文REPLACE(String,from_str,to_str)つまり、String...