Docker で MySQL マスター スレーブ レプリケーションを実装するためのサンプル コード

Docker で MySQL マスター スレーブ レプリケーションを実装するためのサンプル コード

1. 概要

1. 原則

  • マスター サーバーは、データの変更をバイナリ ログに記録します。マスター上のデータが変更されると、その変更がバイナリ ログに書き込まれます。
  • スレーブサーバーは、マスターバイナリログが一定の時間間隔で変更されたかどうかを検出します。変更された場合は、マスターバイナリイベントを要求するI/Oスレッドを開始します。
  • 同時に、マスター ノードは各 I/O スレッドのダンプ スレッドを開始し、バイナリ イベントを送信してスレーブ ノードのローカル リレー ログに保存します。スレーブ ノードは SQL スレッドを開始し、リレー ログからバイナリ ログを読み取り、ローカルで再生して、マスター ノードのデータと一致するようにします。最後に、I/O スレッドと SQL スレッドはスリープ状態に入り、次回起動されるまで待機します。

マスタースレーブフローチャート

2. 実装

マスターライブラリ: 192.168.3.13:3310 スレーブライブラリ: 192.168.3.14:3310 2. マスターライブラリを作成する サーバー192.168.3.13を入力します

1. イメージをインストールする

docker プル mysql:8.0.26

2. 新しいディレクトリを作成する

mkdir -p /home/apps/mysql-master/{config,log,data}

3. 作成して開始する

docker run -d --name mysql-master \
--restart=常に\
--privileged=true \
-p 3310:3306 \
-v /home/apps/mysql-master/config:/etc/mysql/conf.d \
-v /home/apps/mysql-master/log:/var/log/mysql \
-v /home/apps/mysql-master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
マイスク:8.0.26

4. マスター基本設定の追加/変更

vim /home/apps/mysql-master/config/my.cnf

次のコンテンツを追加します

[クライアント]
デフォルトの文字セット=utf8
 
[mysql]
デフォルトの文字セット=utf8
 
[mysqld]
init_connect = '照合接続を utf8_unicode_ci に設定'
init_connect='名前をutf8に設定'
文字セットサーバー=utf8
照合サーバー=utf8_unicode_ci
文字セットクライアントハンドシェイクをスキップする
名前解決をスキップ

3. スレーブインスタンスを作成する

サーバー192.168.3.14を入力します

1. 上記の操作と同じ

# ディレクトリを作成 mkdir -p /home/apps/mysql-slave-01/{config,log,data}

# コンテナを起動します docker run -d --name mysql-slave-01 \
--restart=常に\
--privileged=true \
-p 3310:3306 \
-v /home/apps/mysql-slave-01/config:/etc/mysql/conf.d \
-v /home/apps/mysql-slave-01/log:/var/log/mysql \
-v /home/apps/mysql-slave-01/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
マイスク:8.0.26


# スレーブの基本設定を変更する vim /home/apps/mysql-slave-01/config/my.cnf

# 次のコンテンツを追加します [client]
デフォルトの文字セット=utf8
 
[mysql]
デフォルトの文字セット=utf8
 
[mysqld]
init_connect = '照合接続を utf8_unicode_ci に設定'
init_connect='名前をutf8に設定'
文字セットサーバー=utf8
照合サーバー=utf8_unicode_ci
文字セットクライアントハンドシェイクをスキップする
名前解決をスキップ

4. マスタースレーブ構成

1. マスター構成を追加する

vim /home/apps/mysql-master/config/my.cnf
サーバーID=1

# バイナリログを有効にする log-bin=mysql-bin
読み取り専用=0

# 同期する必要があるデータベース binlog-do-db=rapid-cloud
binlog-do-db=ラピッドクラウドテスト

# 無視するデータベース replicate-ignore-db=mysql
複製無視db=sys
複製無視DB=情報スキーマ
レプリケート-無視-db=パフォーマンススキーマ

2. コンテナを再起動する

docker で mysql-master を再起動する

3. スレーブ構成を追加する

vim /home/apps/mysql-slave-01/config/my.cnf

サーバーID=2
ログ bin = mysql bin
読み取り専用=1
binlog-do-db=ラピッドクラウド
binlog-do-db=ラピッドクラウドテスト

複製無視DB=mysql
複製無視db=sys
複製無視DB=情報スキーマ
レプリケート-無視-db=パフォーマンススキーマ

4. コンテナを再起動する

docker で mysql-slave-01 を再起動します。

5. ユーザーを同期するためのアカウントを追加する

# コンテナに入る docker exec -it mysql-master /bin/bash

# メインのmysqlデータベースに入る mysql -u root -p

# リモートアクセスをルートに許可します (マスター/スレーブとは関係なく、mysql へのリモート接続を容易にするためだけです)

# リモートを認証する ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

# 権限をフラッシュします。


# バックアップ ユーザーの作成 # 最初に新しいユーザーを作成する必要があります create user 'backup'@'%' identifiered by '123456';

# 実行権限は、*.* のすべての権限を 'backup'@'%' に付与します。

# 権限をフラッシュします。

# リモートを承認 ALTER USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

# 権限をフラッシュします。

# マスター データベースのステータスを表示します。show master status; 

6. スレーブデータベースでマスターデータベース接続を設定する

# コンテナに入る docker exec -it mysql-slave-01 /bin/bash

# メインのmysqlデータベースに入る mysql -u root -p

マスターをmaster_host='192.168.3.13'、master_user='backup'、master_password='123456'、master_log_file='mysql-bin.000001'、master_log_pos=0、master_port=3310に変更します。

7.スレーブ同期を開始する

まず、テーブル構造とデータを含むマスターデータベースのデータをスレーブデータベースにコピーします。

メインライブラリのバイナリログをクリアして、位置が0から​​始まるようにします。

マスターログを 'mysql-bin.000001' に消去します。

同期をオンにする

# 同期を開始します。start slave;

# 同期を停止します # スレーブを停止します;

# 同期ステータスを確認します show slave status\G; 

8. トラブルシューティング

マスタースレーブ同期が達成できない場合は、次の点を確認してください。

要約:

マスター データベースとスレーブ データベースは、構成ファイル内で、同期する必要があるデータベースと無視するデータベースを宣言します。また、サーバー ID は、マスター データベースが自身のデータを同期するために特定のアカウントとパスワードを承認しているものと同じにすることはできません。スレーブ データベースはこのアカウントとパスワードを使用してマスター データベースに接続し、データを同期します。

5. 参考

https://www.cnblogs.com/heian99/p/12104189.html

https://blog.csdn.net/lilygg/article/details/98187015

バイナリログのクリア: https://www.cnblogs.com/kiko2014551511/p/11532426.html

これで、Docker で MySQL マスタースレーブ レプリケーションを実装するためのサンプル コードに関するこの記事は終了です。MySQL マスタースレーブ レプリケーションに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  数千万データを持つMySQLテーブルを最適化する実践記録

>>:  CSS マスクを使用して PNG 画像のサイズを大幅に最適化します (推奨)

推薦する

mysql5.7.20 のインストールと設定方法のグラフィック チュートリアル (mac)

MySQL 5.7.20のインストールと設定方法のグラフィックチュートリアルをあなたと共有します1...

Mysql関数呼び出しの最適化の詳細な説明

目次関数呼び出しの最適化関数呼び出しの最適化MySQL 関数は、内部的に決定論的または非決定論的とし...

JSはキャンバス技術を使用してeChartsの棒グラフを模倣します

Canvas は HTML5 の新しいタグです。js を使用して Canvas 描画 API を操作...

VMWARE で Centos8 仮想マシンをコピーすることによって発生する IP 損失の問題の解決策

VMwareでcentos8サービスをインストールしてコピーすると、次の問題が発生します。 コピー前...

ウェブサイトのBGM実装方法

個々のウェブマスターにとって、自分のウェブサイトをいかにユニークで個性あふれるものにするかは、常に絶...

Django は Pillow を使用して検証コード機能を簡単に設定します (Python)

1. モジュールをインポートし、検証状態を定義する PIL から Image、ImageDraw、...

CSS3 アニメーション ボールローリング JS コントロールアニメーション一時停止

CSS3 はアニメーションを作成でき、多くの Web ページのアニメーション画像、Flash アニメ...

Linux におけるゼロコピー技術の使用に関する簡単な分析

この記事では、Linux におけるいくつかの主要なゼロコピー テクノロジと、ゼロコピー テクノロジを...

Jenkins+tomcat の自動ホットデプロイメント/再起動と発生した問題の解決策 (推奨)

1. 背景同社のプロジェクトは、これまでは手動で Maven でパッケージ化し、サーバーにアップロ...

MySQL データベース インデックスが B+ ツリーの使用を選択するのはなぜですか?

MySQL データベース インデックスが B+ ツリーを使用する理由をさらに分析する前に、データ構...

VMware12 インストール centOS8 構成グラフィック チュートリアルの詳細説明 (vm 仮想マシン インストール centos8 チュートリアル)

数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...

Linux クラウド サーバー上に SFTP サーバーとイメージ サーバーを構築する方法

まず、SFTP プロトコルと FTP プロトコルの違いを理解してください。ここでは詳細には触れません...

Linux QT Kit が見つからない、バージョンが空の問題の解決策

現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...

JavaScript で右クリック メニューを統合する layim のサンプル コード

目次1. 効果の実証2. 実装チュートリアル3. 最後に、完全なコードを添付します4. その他の右ク...

HTML 選択タグにリンクを追加する 3 つの方法

最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...