Mysql データベースのマスタースレーブ同期構成

Mysql データベースのマスタースレーブ同期構成

Mysql マスタースレーブ同期構成

構成の準備:

  • 2つのデータベースが必要です
  • mysql可視化ツール、もちろんコマンドラインも使用できます
  • ここでは、docker を使用して 2 つの mysql コンテナを起動する方法を説明します。バージョンが同じであれば、2 つの mysql コンテナをインストールすることもできます。

1. 2つのmysqlをインストールする

  • msyqlマウントディレクトリを作成する
[root@localhost /]# mkdir -p /opt/docker/mysql1/conf/
[root@localhost /]# mkdir -p /opt/docker/mysql1/logs/
[root@localhost /]# mkdir -p /opt/docker/mysql1/data/
  • 最初のmysqlを起動し、対応するファイルディレクトリポートをマウントします: 6894
[root@localhost /]# docker run -d -p 6894:3306 --name mysql1 \
                    ディレクトリは/etc/mysql/ です。
                    -v /opt/docker/mysql1/logs:/logs \
                    -v /opt/docker/mysql1/data:/var/lib/mysql \
                    --privileged=true \
                    -e MYSQL_ROOT_PASSWORD=qtykGhC29eP4Smpmysql:5.7
  • 2番目のmysqlをコピーすることで

コピーした mysql の /opt/docker/mysql2/data/auto.cnf ディレクトリに、削除する必要がある auth.cnf ファイルがあることに注意してください。

[root@localhost docker]# cp -r /opt/docker/mysql1/ /opt/docker/mysql2/
  • auth.cnfファイルを削除する
[root@localhost docker]# rm -f /opt/docker/mysql2/data/auto.cnf
  • 2番目のmysqlを起動する
[root@localhost docker]# docker run -d -p 6895:3306 --name mysql2 \
                    ディレクトリは/etc/mysql/ です。
                    -v /opt/docker/mysql2/logs:/logs \
                    -v /opt/docker/mysql2/data:/var/lib/mysql \
                    --privileged=true \
                    -e MYSQL_ROOT_PASSWORD=qtykGhC29eP4Smpmysql:5.7

2. MySQL設定ファイルを書く

  • メインライブラリのmy.cnfファイル
[root@localhost docker]# vim /opt/docker/mysql1/conf/my.cnf
  • my.cnfファイルの内容
[mysqld]
# マスターデータベースの構成 server-id=1 # サービス ID の一意性 log-bin=mysql1-log # バイナリログを有効にする binlog-format=ROW # ログモード replicate-do-db=db_docker # 複製するデータの名前 # replicate-ignore-db=db_docker # 複製する必要のないデータの名前
  • ライブラリのmy.cnfファイルから
[root@localhost docker]# vim /opt/docker/mysql2/conf/my.cnf
  • my.cnfファイルの内容
[mysqld]
# ライブラリから設定 server-id=2 # サービス ID の一意性 log-bin=mysql2-log # バイナリ ログを有効にする binlog-format=ROW # ログ モード binlog-do-db=db_docker # コピーするデータの名前 # binlog-ignore-db=db_docker # コピーする必要のないデータの名前
  • docker mysqlコンテナを再起動します
[root@localhost docker]# docker を再起動してmysql1
[root@localhost docker]# docker を再起動してmysql2を実行します

3. データを初期化する

  • 2つのmysqlは次のSQL文を実行してデータベースとテーブルを作成します。
-- データベースを作成します CREATE DATABASE `db_docker`;
db_docker を使用します。
-- テーブルを作成する CREATE TABLE `t_docker` (
    `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) デフォルト NULL,
     主キー ( `id` )
) エンジン = INNODB AUTO_INCREMENT = 0 デフォルト文字セット = utf8;

メインライブラリのバイナリログを表示します。

  • メインライブラリは次のコマンドを実行してバイナリログファイルのステータス情報を出力します。
mysql> マスターステータスを表示します。
+------------------+----------+--------------+------------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------+
| mysql-bin.000001 | 2223 | | | |
+------------------+----------+--------------+------------------+------------------+

スレーブバイナリログを構成する

  • スレーブは、レプリケーション マスターへの接続、マスターのバイナリ ログの読み取り、スレーブのリレー ログの読み取りに使用されるパラメータを変更します。
マスターを変更
MASTER_HOST="192.168.101.59", # ホストアドレス メインサーバーのIP
Master_Port=6894、# ポート MASTER_USER="root", # アカウント MASTER_PASSWORD="qtykGhC29eP4Smp", # パスワード MASTER_LOG_FILE="mysql-bin.000001", # メインライブラリバイナリファイル名は実際の状況に応じて記入されます MASTER_LOG_POS=377; # メインライブラリバイナリファイルの位置は実際の状況に応じて記入されます
  • ライブラリから実行してレプリケーションを開始します
mysql>スレーブを起動します。

スレーブ ライブラリ スレッドの基本パラメータのステータス情報。 MySQL 8.0.22 以降では、非推奨となった SHOW SLAVE STATUS の代わりに SHOW REPLICA STATUS を使用してください。 MySQL 8.0.22 より前のバージョンでは、 SHOW SLAVE STATUS を使用します。このステートメントには、 REPLICATION CLIENT 権限 (または非推奨の SUPER 権限) が必要です。

次の 2 つのパラメータが yes の場合、構成は成功したことを意味します。それ以外の場合は、構成に問題があります。 Slave_IO_Running: はい Slave_SQL_Running: はい

上記の2つのパラメータのいずれかがNoでない場合は、エラーが発生していることを意味します。次の2つのフィールドを確認してください。Last_Errno Last_Error

エラーの内容は Last_Error フィールドに記録され、エラーの内容に応じて変更されます。

mysql> スレーブステータスを表示 \G;
************************** 1. 行 ****************************
               Slave_IO_State: マスターがイベントを送信するのを待機中
                  マスターホスト: 192.168.101.59
                  マスターユーザー: ルート
                  マスターポート: 6894
                接続再試行: 60
              マスターログファイル:mysql-bin.000001
          読み取りマスターログ位置: 2223
               リレー ログ ファイル: 98394ee2fb48-relay-bin.000004
                リレーログ位置: 320
        リレーマスターログファイル: mysql-bin.000001
             スレーブIO実行中: はい
            スレーブSQL実行中: はい
              レプリケート_Do_DB: 
          レプリケート_無視_DB: 
           テーブルの複製: 
       無視テーブルを複製: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   最終エラー番号: 0
                   最終エラー: 
                 スキップカウンタ: 0
          実行マスターログ位置: 2223
              リレーログスペース: 534
              Until_Condition: なし
               ログファイルまで: 
                ログ位置まで: 0
           マスターSSL許可: いいえ
           マスターSSLCAファイル: 
           マスターSSLCAパス: 
              マスターSSL証明書: 
            マスターSSL暗号: 
               マスターSSLキー: 
        マスターより遅れている秒数: 0
Master_SSL_Verify_Server_Cert: いいえ
                最終IOエラー番号: 0
                最後のIOエラー: 
               最終SQLエラー番号: 0
               最後のSQLエラー: 
  Replicate_Ignore_Server_Ids: 
             マスターサーバーID: 1
                  マスター_UUID: aa58ab20-f500-11eb-aa65-0242ac110002
             マスター情報ファイル: /var/lib/mysql/master.info
                    SQL_遅延: 0
          SQL_残り遅延: NULL
      Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。
           マスター再試行回数: 86400
                  マスターバインド: 
      最終IOエラータイムスタンプ: 
     最終SQLエラータイムスタンプ: 
               マスターSSL証明書: 
           マスターSSLCrlパス: 
           取得済み_Gtid_Set: 
            実行されたGtidセット: 
                自動位置: 0
         Replicate_Rewrite_DB: 
                 チャンネル名: 
           マスター TLS バージョン:

4. その他のMySQL関連コマンド

  • メインデータベースのデータ更新操作を停止する
mysql>読み取りロック付きのテーブルをフラッシュします。
  • メインデータベースのロックを解除する
mysql>テーブルのロックを解除します。
  • データベースから実行し、レプリケーションを停止します。スレーブデータベース構成バイナリログが失敗した場合は、レプリケーションを停止するか、リセットして再構成してからレプリケーションを開始する必要があります。
mysql> スレーブを停止します。
  • ライブラリから実行してレプリケーションをリセットする
mysql> スレーブをリセットします。

MySQL ノート

  • 異なるバージョンに対応するコマンドと設定ファイルは異なる場合があります
  • デモではMySQL 5.7を使用します
  • コマンドや設定が機能しない場合は、公式ウェブサイトをご覧ください。
  • 実際のアプリケーションでは、攻撃に対して脆弱であるため、デフォルトのポート 3306 を使用しないようにしてください。

mysql コンテナ:

コンテナに入る

docker exec -it mysql2 /bin/sh
#mysql2 コンテナ名はコンテナ ID にもできます

mysqlにログイン

mysql -u ルート -pqtykGhC29eP4Smp
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは9です
サーバーバージョン: 5.7.35-log MySQL コミュニティサーバー (GPL)

Copyright (c) 2000、2021、Oracle およびその関連会社。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。
マイSQL>

my.cnf 設定の説明

[mysqld]
# メイン データベース構成 # 一意のサーバー ID を指定します。0 にすることもできますが、サーバーによって拒否されるため、有効な値は 1 ~ 4294967295 です。デフォルト値 1
# 公式サイト https://dev.mysql.com/doc/refman/5.7/en/replication-options.html
サーバーID=1
# バイナリ ログを有効にします。バイナリ ファイル名はパスにすることができます (例: /logs/mysql/log)。ただし、ディレクトリ ファイルに権限を付与する必要があります。付与しないと、MySQL に書き込み権限がないため、エラーが発生します。
ログ bin = mysql1 ログ
# ログ記録モードは 3 つあります # STATEMENT では、ログ記録はステートメントベースになります。
# ROW は行ベースでログ記録を行います。これがデフォルト設定です。
# MIXED を指定すると、ログ記録に混合形式が使用されます。最初の 2 つのモードの間# 公式ウェブサイト https://dev.mysql.com/doc/refman/5.7/en/binary-log-setting.html
binlog 形式 = ROW 
# コピーするデータベースの名前。複数のデータベースを指定するには、このオプションの複数のインスタンスを使用する必要があります。
# データベース名にはカンマを含めることができるため、カンマ区切りのリストを指定すると、そのリストは単一のデータベースの名前として扱われます。
# 複数のインスタンス:
# レプリケートするdb=db_docker1 
# レプリケートするdb = db_docker2 
レプリケートするdb=db_docker 
#複製する必要のないデータ名。上記と同じ設定 # replicate-ignore-db=db_docker #複製する必要のないデータ名

[mysqld]
# スレーブデータベースの構成は上記と同じです。 server-id=2 # サービス ID の一意性 log-bin=mysql2-log # バイナリログを開く binlog-format=ROW # ログモード binlog-do-db=db_docker # コピーするデータの名前 # binlog-ignore-db=db_docker # コピーする必要のないデータの名前

auth.cnf ファイル

ファイル内容サーバUUID

  • ここでの UUID も一意である必要があり、起動時に自動的に生成されます。 mysqlデータディレクトリをコピーしてデータベースを作成した場合は、ファイルを削除する必要があります。
[自動]
サーバーUUID=aa58ab20-f500-11eb-aa65-0242ac110002
  • UUIDが同じ場合は、次のエラーが報告されます。
致命的なエラー: マスターとスレーブの MySQL サーバー UUID が同じであるため、スレーブ I/O スレッドが停止します。レプリケーションが機能するには、これらの UUID が異なる必要があります。

公式サイトのバイナリログ設定: https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html

MySQL マスタースレーブ同期設定の詳細に関するこの記事はこれで終わりです。MySQL マスタースレーブ同期設定の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MYSQLデータベースのマスタースレーブ同期設定の実装手順
  • MySQL マスタースレーブレプリケーション 準同期レプリケーション
  • MySQL マスタースレーブ同期の原理と応用
  • この記事では、MySQLのマスタースレーブ同期の原理を説明します。
  • MySQLはマスタースレーブ同期を構築して操作を実装します

<<:  JavaScript プロトタイプの詳細

>>:  docker compose helloworld を使い始めるための詳細なプロセス

推薦する

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

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

JavaScript プリミティブデータ型シンボルの詳細な説明

目次導入説明名前の競合私有財産要約する導入シンボル変数を作成する最も簡単な方法は、Symbol() ...

Windows Server のインストール後にワイヤレスとオーディオが機能しない問題を解決する

1. ワイヤレスPowerShell を実行し、次のコマンドを入力します。 install-wind...

MySQL で not in を使用して null 値を含める問題を解決する

知らせ! ! ! uid が (a,b,c,null) に含まれないユーザーから * を選択します。...

MySQL データベースは SQL ステートメントを知っている必要があります (拡張バージョン)

拡張版です。質問とSQL文は以下の通りです。ユーザー テーブルを作成し、id、name、gender...

Vueでシングルサインオンを実装する方法のまとめ

最近プロジェクトが中断され、RageFrame の研究は一時的に終了しました。この記事では、シングル...

JavaScript で簡単な計算機を実装する

この記事の例では、参考までに簡単な計算機を実装するためのJavaScriptの具体的なコードを共有し...

MySQL レプリケーション問題の 3 つのパラメータの分析

目次01 sql_slave_skip_counter パラメータ02 スレーブスキップエラーパラメ...

ico ミラー コードを HTML に追加します (favicon.ico はルート ディレクトリに配置されます)

コード:コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC &...

Tomcat maxPostSize設定実装プロセス分析

1. maxPostSize を設定する理由は何ですか? tomcat コンテナには送信データのサイ...

Node.js の TCP 接続処理のコア プロセス

数日前、友人と Node.js の epoll とリクエスト処理に関する知識を交換しました。今日は、...

jsのディープコピーを理解しましょう

目次js ディープコピーデータ保存方法浅いコピー/深いコピーとは何か一般的なディープコピーの実装1....

レンダリング関数を使用して、拡張性の高いコンポーネントをカプセル化する

必要:バックグラウンド管理では、次のようなレイアウトでデータを表示する必要があることがよくあります。...

MySQL のテーブルリターンとインデックスカバレッジの例の詳細な説明

目次インデックスタイプインデックス構造非クラスター化インデックスクエリインデックスカバー要約するイン...

Vue3 の SetUp 関数のプロパティとコンテキスト パラメータの詳細な説明

1. setUp関数の最初のパラメータpropsセットアップ(プロパティ、コンテキスト){}最初のパ...