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

推薦する

webpack -v エラー解決

背景webpackのバージョンを確認したいのですが、webpack -vを実行するとエラーが報告され...

Webデザインの経験:ナビゲーションシステムをシンプルにする

<br />友人と話し合っていたとき、フレームワークのレイヤー設計の中で最も核となるのは...

MySQL が「operate_time」エラーのデフォルト値が無効であると報告する問題を解決する

データベースでcreate tableステートメントを実行する テーブル `sys_acl` を作成...

MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離

目次1.同時アクセス制御2. 取引1. トランザクションは ACID 原則に従います。 2. トラン...

MySQL 5.7.18 インストールチュートリアルと問題の概要

MySQL 5.7.18 のインストールと問題の概要。今日、新しい MySQL サーバーを導入しまし...

HTML フォーマットの json のサンプルコード

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...

LinuxでIPを表示する方法の例

ネットワークの問題のトラブルシューティング、新しい接続のセットアップ、ファイアウォールの構成を行うと...

MySQL 8.0 の新機能の落とし穴と解決策についての簡単な説明 (要約)

1. ユーザーを作成して承認するMySQL 8.0 では、ユーザーの作成と認証が以前とは異なります...

MySQL の where と on の違いと、いつ使用するか

以前、テーブル結合クエリを書いていたとき、whereとonの違いがわからず、SQLに小さな問題が発生...

高性能な HTML アプリケーションを作成するためのヒント

Web ページのパフォーマンスを向上させるにはどうすればよいでしょうか?ほとんどの開発者は、Java...

MySql マスタースレーブレプリケーションメカニズムの包括的な分析

目次マスタースレーブレプリケーションメカニズム非同期レプリケーション準同期レプリケーションマスタース...

MySql8.0以降のバージョンでROOTパスワードを正しく変更する方法

展開環境:インストールバージョン Red Hat Cent 7.0 MYSQL バージョン 8.0....

JS は VUE コンポーネントに基づいて都市リスト効果を実装します

この記事の例では、VUEコンポーネントに基づいて都市リストエフェクトを実装するための具体的なコードを...

HTML構造化実装方法

DIV+css構造 CSSレイアウトを学んでいますか?まだ純粋な CSS レイアウトを完全に習得でき...

nginx + fastcgi を使用して画像認識サーバーを実装する

背景ディープラーニング モデルの推論には、特定のデバイスが使用されます。マシンは、モデルの読み込み、...