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 の違いと用途の詳細な説明

推薦する

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。

前回は、Explain 実行プランの表示、インデックスの分析など、MySQL での SQL クエリの...

MySQL 8.0.22 zip圧縮パッケージ版(無料インストール)のダウンロード、インストール、および構成手順の詳細

目次最初のステップはMySQLをダウンロードすることですステップ2: ダウンロードした圧縮パッケージ...

MySQLデータを復元する2つの方法

1. はじめに少し前、開発者がテスト環境や本番環境で誤った操作をし、データベースを誤って削除/更新し...

Navicat が MySQL にリモート接続するときに発生する 10060 不明エラーを解決する方法

はじめに:今日は、サーバー上のMySQLにリモート接続したいと思います。使用するソフトウェアはNav...

Vue でデータが変更された後にビューを同期的に更新する方法

序文少し前に、興味深い問題を目にしました。Vue のデータが変更された後に、ビューを同期的に更新する...

Tomcatc3p0 で jnid データ ソースを構成する 2 つの実装方法の分析

c3p0の使用c3p0jarパッケージをインポートする <!-- https://mvnrep...

offsetWidth、clientWidth、scrollWidth、scrollTop、scrollLeft などのプロパティの図。

注 1: 上の画像の背景全体がこの Web ページのフルサイズであり、中央の小さなボックスがブラウザ...

CentOS 6.5 i386 インストール MySQL 5.7.18 詳細チュートリアル

ほとんどの人はMySQLをコンパイルしてシステムディレクトリに置きますが、私のやり方はコンパイルした...

WeChatアプレットでSVGアイコンを使用する方法

SVG は、さまざまな利点があるため、近年広く使用されています。残念ながら、WeChat ミニプログ...

Windows に WSL をインストールして構成する方法

WSLとはBaidu 百科事典からの一節を引用します。 Windows Subsystem for ...

React で Antd の Form コンポーネントを使用してフォーム機能を実装する方法

1. 構造部品1. フォームには、入力コントロール、標準フォーム フィールド、ラベル、ドロップダウン...

JavaScript の基本オブジェクト

目次1. オブジェクト1.1 オブジェクトとは何ですか? 1.2 なぜオブジェクトが必要なのか? 2...

JavaScript での実行コンテキストと実行スタックの例の説明

JavaScript - 原則シリーズ日常の開発では、既存のプロジェクトを引き継ぐときは常に、まず他...

CSS3で実装されたテキストポップアップ効果

成果を達成する実装コードhtml <div>123WORDPRESS.COM</d...