Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法

Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法

同じサーバーで、Docker を使用して Mysql のマスター スレーブ同期設定をシミュレートします。

1. 2 つの Mysql (masterMysql (マスター データベース) と slaveMysql (スレーブ データベース)、データベース バージョン 5.7) を実行します。

#イメージをプルする docker pull mysql:5.7
#yマスターコンテナとスレーブコンテナを実行しますdocker run -p 13306:3306 --name slavemysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 13307:3306 --name mastermysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

実行が完了したら、接続を試みることができます。ホストにマップされているサービス ポートはそれぞれ 13306 と 13307 であることに注意してください。外部接続の場合、ファイアウォールとゲートウェイの設定が開いていることを確認する必要があります。

2. コンテナが使用する IP アドレスを確認します (マスターとスレーブの構成では、同じイントラネット内の IP アドレスを使用する必要があります)

#メインデータベースのIPアドレスを表示する
docker 検査 --format='{{.NetworkSettings.IPAddress}}' マスターMySQL
#172.18.0.2

3. マスタースレーブライブラリを構成します。

(1)メインデータベースに入る

docker exec -it masterMysql bash #masterMysql は実行中のコンテナの名前です。

(2)設定ファイルを設定する

cd /etc/mysql&&ls

conf.d フォルダーと mysql.conf.d フォルダー内のファイルを含め、複数の *.cnf ファイルがあることがわかります。 これには読み込み順序があり、ここでの設定はすべて my.cnf で行われます。

(3)設定ファイルを設定する

方法1:

通常の操作は、次のようにフォルダーに入って編集することです。

vim ./my.cnf

しかし、ここでエラーが発生します:
bash: vi: コマンドが見つかりません

まずviをインストールします

apt-getアップデート
#成功したらapt-get install vimを実行します

方法2(推奨):

コンテナ外で編集し、コンテナ内にコピーします。これは直接上書きする方法です。

ホストをコンテナにコピーします。
構文: docker cp [ホストアドレス] [コンテナIDまたはコンテナ名]:[コンテナファイルアドレス]
docker cp /home/mysql/my.cnf mysql:/etc/mysql/my.cnf

(4)Binlog設定を開きます。

同じ構成: マスター ライブラリとスレーブ ライブラリを入力して、my.cnf 構成ファイルを設定します。サーバー ID は異なる必要があることに注意してください。

文字セットサーバー=utf8
init_connect='名前をutf8に設定'
#これら 2 つは UTF-8 文字形式を設定するもので、2 つのホストは同じ構成です。## 同じ LAN 内で一意になるように注意してください (双方向のマスターとスレーブ データベースがある場合は、これを利用して Binlog を実行する SQL ステートメントを区別します)
#最後のIPを取得できます。マスターデータベースは 2、スレーブデータベースは 3 です。
サーバーID=2  
## バイナリログ機能を有効にすると、任意のログ(キー)を取得できます
#デモンストレーション設定: マスターライブラリはmaster-binに設定され、スレーブライブラリはslave-binに設定されます
ログビン=マスタービン
log_bin_index = マスターbin.index

さまざまな構成は次のとおりです: メインライブラリ:

#設定可能な内容は以下のとおりです。テストのため、最初はコメントアウトされています。
#スレーブと同期するライブラリ(記述しない場合はデフォルトですべてが同期されます)
#binlog-do-db=テスト

#ライブラリをスレーブと同期しない(複数の場合は複数行を記述)
#binlog-ignore-db=mysql #レプリケートされたデータベースを設定します #binlog-ignore-db=information_schema #レプリケートされたデータベースを無視するように設定します #15日前のログファイルを自動的にクリーンアップします expire_logs_days=15
#binlog_format=row #Binlog に記録される実際の操作の SQL を設定します。
#max_binlog_size=100m #ファイル サイズを設定#replicate_do_table=test #レプリケートするデータ テーブル#replicate_ignore_table=igoreTest #レプリケートするデータ テーブルを無視#replicate_wild_ignore_db=test #Replicate_Do_DB と同じ、ワイルドカードを使用できます#replicate_wild_ignore_db=igoreTest #Replicate_Ignore_DB と同じ、ワイルドカードを使用できます

ライブラリから:

# タイミングの悪い更新や再起動によって発生するマスター スレーブ レプリケーション エラーを回避するために設定します。
読み取り専用 = 1
マスター情報リポジトリ=テーブル
リレーログ情報リポジトリ=テーブル
リレーログ = スレーブリレービン

#メインライブラリのログ保存。
リレーログインデックス = スレーブリレービンインデックス

設定はコンテナの再起動後に有効になります。

docker マスターMysql を再起動
docker スレーブMysqlを再起動

コンテナのログを表示します。

docker ログ マスターMySQL

再起動に失敗した場合は、この操作で設定ファイルにエラーがないか確認できます。(3)方法2で設定ファイルを修正してからコンテナを起動します。

(5)コンテナのBinlog設定が成功しているかどうかを確認します。

#コンテナに入る docker exec -it masterMysql bash
#MySQLの登場
mysql -uroot -p123456 
#Binlog のステータスを確認します。
'%log_bin%' のような変数を表示します。
#log_binがオンになっていて、bin_logが/var/lib/mysql/master-binにあることがわかります。

![ファイル](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/61e52585e4aa4200a8c27204ef690234~tplv-k3u1fbpfcp-zoom-1.image)

(6)メインデータベースのMatserノードのBinlogステータスを確認し、ここで構成の位置値を取得します。

マスターステータスを表示します。

以前に有効にした Binlog が使用されていない場合は、新しい Binlog を生成するか、リセットしてクリアする必要があります。

#新しい Binlog ログ ファイルのフラッシュ ログを生成します。 
# Binlog ログ ファイルをリセットしてクリアします reset master;

ここで表示できるログ構成ファイルは、master-bin.000001 で、位置は 334 です。

4. スレーブ データベースとデータを同期するために使用するアカウントをマスター データベースに設定します。ここでのアカウントはslaveMysqlです。

'slaveMysql'@'%' というユーザーを作成し、'123456' で識別します。
'slaveMysql'@'%' に *.* のレプリケーション スレーブ、レプリケーション クライアントを許可します。

5. スレーブデータベースのMysqlにログインして実行します。実行して表示するには、Navicatに接続することをお勧めします。サーバー上で表示される形式は非常に乱雑です。

(1)マスターデータベース構成の同期を実行します。これは終了記号であることに注意してください。

マスターをmaster_host='172.18.0.2'に変更します。
 マスターユーザー='スレーブMysql',
 マスターパスワード='123456',
 マスターポート=3306、 
 マスターログファイル='mysql-bin.000001',
 マスターログ位置= 334、
 マスター接続再試行=30;

パラメータの詳細:

master を master_host=${コンテナが使用する IP} に変更します。これは、手順 2 で取得したものと同じ LAN 内にある必要があります。
master_port マスターのポート番号は、最初の手順で取得されたホストにマップされたポート番号ではなく、コンテナーの実行中のデータベースのポート番号を参照します。
master_user は、同期に使用するアカウントを設定します。4 列目の master_password は、同期に使用するアカウント パスワードを設定します。4 列目の master_log_file は、マスター データベースのどの構成ファイルから Binlog ログを読み取るかを指定します。3 列目 (6 列目) の master_log_pos は、読み取りを開始する位置、つまり上記の Position フィールドの値を指定します。3 列目 (6 列目) の master_connect_retry は、接続が失敗した場合の再試行間隔を秒単位で指定します。デフォルト値は 60 秒です。

(2)スレーブライブラリの設定を開きます。

スレーブを起動します。
#奴隷を止めろ。
#スレーブを停止します。

(3)マスタースレーブ同期の状態を確認する。 マスタースレーブ同期のステータスを確認します。

スレーブステータスを表示します。 

(4)エラーがないか確認する。

Last_Io_Error を表示すると、接続エラーを確認できます。 次の可能性のあるエラーを確認してください。 1> ネットワークが接続されておらず、ポートと LAN IP が接続されていません 2> 同期に使用されるアカウント パスワードは正常です 3> マスターの Binlog ファイル名と Pos 位置が間違っています。

6. マスターとスレーブが正常かどうかをテストします。

マスターデータベースはデータベースを作成し、スレーブデータベースも同期的に正常に作成されたかどうかを確認します。それだけです。

これで、Docker 環境で MySQL を実行し、Binlog を有効にしてマスター スレーブ同期を構成する方法についての説明は終了です。Docker Binlog MySQL マスター スレーブ同期の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLデータベースのタイムアウト設定を構成する方法の例
  • MySQL データベースのバックアップ設定 遅延バックアップ方式 (MySQL マスター スレーブ構成)
  • MySQLはパフォーマンスを最適化するためにインデックスを使用します
  • MySQLはステータスの表示と分析の説明を通じてデータベースのパフォーマンスを最適化します
  • MySQL データベースのパフォーマンス最適化の概要
  • GaussDB for MySQL パフォーマンス最適化の詳細な説明
  • mysql 構成接続パラメータ設定とパフォーマンスの最適化

<<:  HTML におけるいくつかの特殊属性タグの使用法の紹介

>>:  Vue プロジェクトに Electron を追加するための詳細なコード

推薦する

ファイル書き込みを使用して Linux アプリケーションをデバッグする方法

Linux ではすべてがファイルなので、Android システム自体は Linux + Java だ...

Linuxコマンドに基づいてフォルダー内の特定のファイルパスを抽出します

最近では、特定のフォルダ内の特定のファイルを自動的に検索する必要があり、ファイルパスとファイル名を別...

Linux システムのシャットダウンコマンドの違いと使い方の詳細な説明

Linux システムのシャットダウン コマンドは何ですか? Liangxu Tutorial Net...

MySQL チュートリアル: サブクエリの例の詳細な説明

目次1. サブクエリとは何ですか? 2. サブクエリはどこに表示されますか? 3. Whereサブク...

画像の下部の空白部分の問題を解決する

最近のプロジェクトに取り組んでいるとき、下の図に示すように、画像を参照すると常に下部に空白スペースが...

MySQLは文字列関数のSQL文をインターセプトします

1. left(name,4)は左の4文字をインターセプトしますリスト: SELECT LEFT(2...

この記事ではMySQLのNULLについて説明します。

目次序文MySQL の NULL 2 NULL占有長3 NULL値の比較4SQLはNULL値を処理す...

あまり使われていない、または誤解されている HTML タグ 10 個

ここでは、あまり使われていない、または誤解されている 10 個の HTML タグを紹介します。あまり...

CentOS6.8 中国語/英語環境切り替えチュートリアル図

1. はじめに英語に慣れていない人は、システムを英語から中国語に変更したいかもしれません。一方、クラ...

Linux 名前空間ユーザーの詳細な説明

ユーザー名前空間は Linux 3.8 で追加された新しい名前空間で、ユーザー ID やグループ I...

一般的な XHTML タグの使用方法の紹介

XHTML には多くのタグがありますが、頻繁に使用されるのはごくわずかであり、習得する必要があるのは...

Linux環境でIPV6接続をサポートするようにmysql5.6を設定する方法

導入:この記事では主に、Linux システムで IPV6 接続をサポートするように MySQL を構...

Docker を使用してスタンドアロン Pulsar とクラスター化された Redis をデプロイする方法 (開発アーティファクト)

目次1. はじめに: 2. ドッカー: 1 カスタムネットワーク2 展開を開始する3 ネットワークを...

MySQLは間違ったパスワードを入力する試行回数を制御します

1. 本番環境でMySQLのデッドロックを監視し、デッドロックの可能性を減らす方法まず、デッドロック...

MySQL 5.7 のユニオンオール使用法のブラックテクノロジーを 5 分で学ぶ

MySQL 5.6 での union all のパフォーマンスパート 1:MySQL 5.6.25 ...