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

推薦する

txt ブックの内容を Web ページに表示するコード

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1...

MySQL 8.0.12 のインストールと設定のチュートリアル

この記事はMySQL 8.0.12のインストールと設定に関する詳細なチュートリアルを記録しています。...

Ubuntuサーバーの一般的なコマンドの概要

以下のコマンドのほとんどは、コンソール/ターミナル/シェルで入力する必要があります。 'su...

CentOS 7.0 (mysql-5.7.21) で複数の MySQL インスタンスを起動する方法

設定手順Linux システム: CentOS-7.0 MySQL バージョン: 5.7.21 Lin...

MySQL で固定されていない位置から文字列要素を抽出する方法

序文注: テストデータベースのバージョンはMySQL 8.0ですテストデータ: テーブルzqs(id...

Mybatis での動的 SQL ステートメント分析

この記事は主にMybatisでの動的SQL文の解析について紹介します。この記事のサンプルコードは非常...

JSscriptタグの属性は何ですか

JS スクリプト タグの属性は何ですか? charset : オプション。 src 属性で指定された...

Linux プロセス管理ツール スーパーバイザーのインストールと設定のチュートリアル

環境: CentOS 7公式ドキュメント: http://supervisord.org/インストー...

IDEA は MySQL への接続時にエラーを報告します。サーバーが無効なタイムゾーンを返します。タブに移動して serverTimezone プロパティを設定してください。

これからの道は常に困難で、棘だらけです。歯を食いしばって、乗り越えられると信じてください。さあ、さあ...

Javascript 共通高階関数の詳細

目次1. 一般的な高階関数1.1、フィルター1.2、地図1.3、減らすHigher Order fu...

Windows サーバー ポートを開きます (例としてポート 8080 を使用します)

ポートとは何ですか?私たちが通常参照するポートは、物理的な意味でのポートではなく、具体的には TCP...

シリアルポート使用時のvue-electronの問題解決

エラーは次のとおりです:キャッチされない TypeError: 未定義のプロパティ 'mod...

MySQL 8.0 のインストール中に発生した 3 つの小さなエラーの概要

序文これまで当社ではMySQLの5.7シリーズを使用していましたが、バージョン8.0のリリースに合わ...

Vue+Openlayer で select を使用して要素を選択する実装コード

効果画像: 実装コード: <テンプレート> <div id="map&q...