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 を追加するための詳細なコード

推薦する

Web デザインにおける Less と More について語る (写真)

Less is More は多くのデザイナーのキャッチフレーズです。これは建築界の巨匠ルートヴィヒ...

CSS3 は、跳ねるボール効果を実現する Web アニメーションを作成します。

基本的な準備この実装には、クラス名が ball である単純な div が必要です。 HTMLコード:...

ページキャッシュを無効にするいくつかの方法を共有する

本日、開発中に、顧客からページをキャッシュしないように要求される方法に遭遇しました。調べたところ、ペ...

jsは、州、市、地区の3レベルのリンクの非選択ドロップダウンボックスバージョンを実現します。

インターネットで3レベルリンクを検索したところ、すべてオプションで書かれていました。突然、別の方法で...

MySQLの一般的なバックアップコマンドとシェルバックアップスクリプトの共有

複数のデータベースをバックアップするには、次のコマンドを使用できます。 mysqldump -uro...

Linux で測位バックグラウンド サービスが時々クラッシュする問題の解決方法

問題の説明最近のバックグラウンドサービスでは、特定の命令の要求データをディスクに保存する新しい機能が...

3列レイアウトを実現するCSS3フレキシブルボックスフレックス

タイトルの通り、高さは既知で、左と右の列の幅は 300 ピクセル、中央は適応型です。弾性ボックス自体...

MySQLは集計関数を使用して単一のテーブルをクエリします

集計関数データセットに作用し、そのデータセットの値を返します。 count: 統計結果のレコード数。...

HTML タイトルに二重引用符を追加する方法

<a href="https://www.jb51.net/" title...

WeChatミニプログラムユーザー認証による携帯電話番号の取得(getPhoneNumber)

序文ミニプログラムには、ユーザーを取得するための非常に便利な API があり、getPhoneNum...

js における浅いコピーと深いコピーの詳細な説明

目次1. jsメモリ2. 譲渡3. 浅いコピー4. ディープコピー序文:以下の記事を読む前に、記憶に...

node.js チュートリアルの Util モジュールの例の詳細な説明

目次タイプ判定から始める厳格な平等エラーファーストと約束デバッグと出力タイプ判定から始めるJavaS...

HTMLドキュメントタイプの詳細な説明

私のは: <!DOCTYPE html>ブログガーデン: <!DOCTYPE HT...

MySQL count(1)、count(*)、count(field)の違い

目次1. COUNTの初見2. COUNT(フィールド)、COUNT(定数)、COUNT(*)の違い...

HTML フォームタグチュートリアル (5): テキストフィールドタグ

<br />このタグは、さらにテキストを入力できる複数行のテキスト フィールドを作成する...