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

推薦する

CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する例

テーマ今日は、CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する方法を説...

HTML ページ ヘッダー コード例の詳細な説明

知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...

MySQL の大きなデータ テーブルにフィールドを追加する方法

序文フィールドの追加は誰でもよく知っていると思います。簡単に記述できます。MySQL テーブルにフィ...

HTML タグのメタ概要、HTML5 のヘッド メタ属性の概要

序文metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うで...

HTML_PowerNode Java アカデミーでテーブルを動的に追加する

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

MySQL 8.0.12 クイックインストールチュートリアル

MySQL 8.0.12 のインストールには 2 日かかり、さまざまな問題が発生しました。以下にまと...

Nginx で Basic Auth ログイン認証を設定する方法

nginx でファイルサーバーを構築することもありますが、これは一般に公開されていますが、サーバーが...

Ubuntu で時刻同期に NTP を使用する

NTP は、ネットワーク上で時間を同期するための TCP/IP プロトコルです。通常、クライアントは...

MySQL 8.0.18 のさまざまなバージョンのインストールとインストール中に発生した問題 (要点の要約)

概要: MYSQLの問題解決記録:どのようなインストール方法 (rpm、gz、gz.xz) を使用す...

MySQL共通インデックスとユニークインデックスの選択に関する詳細な分析

各人が固有の携帯電話番号で登録し、ビジネス コードによって重複する携帯電話番号が 2 つ書き込まれな...

MySQL ルートパスワードエラー番号 1045 の解決方法

MySQLサービスを停止するWindowsでは、マイコンピュータを右クリック--管理--サービスと...

jsは徐々に増加するデジタルアニメーションを実現します

目次背景コンテナを固定し、数字を上にスクロールすることで、スクロールホイールと同様の効果を実現します...

Linux のごみ箱メカニズムの実装プロセスと使用方法の詳細な説明

序文: Linux システムでの rm は元に戻せません。コマンドの設計自体に問題はありません。問題...

Nginxを使用してストリーミングメディアサーバーを構築し、ライブブロードキャスト機能を実現する

前面に書かれた近年、ライブストリーミング業界は非常に人気が高まっています。伝統的な業界でのライブスト...

Linux における SUID、SGID、SBIT の素晴らしい使い方の詳細な説明

序文Linux のファイル権限管理はとにかく素晴らしいです。SUID、SGID、SBIT の機能を確...