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

推薦する

nginxを使用して取得したIPアドレスが127.0.0.1である問題を解決する

IPツールを取得 lombok.extern.slf4j.Slf4j をインポートします。 org....

LinuxにComposerをインストールする方法

1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...

CSSスタイルは、テキストが長すぎる場合に省略記号を表示する問題を解決します

1. CSSスタイルは、テキストが長すぎる場合に省略記号を表示する問題を解決します1. 一般的なスタ...

Win10の明るさ調整効果を模倣するHTML+CSS+JSサンプルコード

HTML+CSS+JS で Win10 の明るさ調整効果を模倣コード <!doctypehtm...

JavaScript クロージャの説明

目次1. クロージャとは何ですか? 1.2 クロージャのメモ化: 関数は定義された環境を記憶する1....

Dockerデーモンのセキュリティ設定項目の詳細な説明

目次1. テスト環境1.1 CentOS 7をインストールする1.2 Docker CE 19.03...

MySQLは遅いSQLを開始し、原因を分析します

ステップ1. MySQLスロークエリを有効にする方法1: 設定ファイルを変更するWindows: W...

HTML の著作権記号のフォント選択問題 (著作権記号をより美しくする方法)

1. 問題を発見する&copy; は HTML の著作権記号ですが、間違ったフォントを選択す...

Linux コマンドラインでパケットをキャプチャするために tcpdump を使用するいくつかの機能

tcpdump は、ネットワークの問題のトラブルシューティングに効果的に役立つ、柔軟で強力なパケット...

Tomcat を IDEA にダウンロード、インストール、デプロイするチュートリアル (IDEA の 2 つのホット デプロイ設定方法付き)

目次Tomcat ダウンロードチュートリアルTomcat インストールチュートリアルTomcat の...

CSS 疑似クラス: 空っぽだと光る (サンプルコード)

最近私の記事を読んだ人なら誰でも、私が現在WeChatミニプログラムプロジェクトを担当しており、その...

elementui の el-popover スタイルの変更が有効にならない問題の解決策

element-uiを使用する場合、el-popoverというよく使われるコンポーネントがありますが...

Vue が値を返してフォームを動的に生成し、データを送信する仕組みの詳細な説明

目次解決された主な問題1. バックエンドから返され、バックエンドに送信されるデータは、次の形式になり...

CentOSにPHP+Apache+MySQLのサーバー環境をインストールして構築する

Yum (フルネームは Yellow dog Updater, Modified) は、Fedora...

WeChatミニプログラムマップの使い方を詳しく解説

この記事の例では、WeChatアプレットマップで使用される具体的な実装コードを参考までに共有していま...