MySQL の例 DTID マスタースレーブ原理の分析

MySQL の例 DTID マスタースレーブ原理の分析

1. GTIDの基本概念

MySQL 5.6.5 以降でサポートされているグローバル トランザクション識別子 (GTID (グローバル トランザクション ID)) は、ソース (プライマリ) サーバー上でコミットされた各トランザクションに作成され、関連付けられる一意の識別子です。
この識別子は一意であるだけでなく、特定のレプリケーション設定内のすべてのサーバー間でも一意です。
すべてのトランザクションとすべての GTID の間には 1 対 1 のマッピングがあります。
サーバーIDとトランザクションIDで構成されます。
このグローバル トランザクション ID は、元のサーバー上で一意であるだけでなく、マスターとスレーブの関係にあるすべての MySQL サーバー上でも一意です。
この機能のおかげで、MySQL のマスター/スレーブ レプリケーションがよりシンプルになり、データベースの一貫性がより信頼できるものになります。
GTID は、マスターとスレーブ間でデータの混乱や不整合を引き起こす可能性のある繰り返し実行を回避するために、サーバー上で 1 回だけ実行されます。

2. GTIDの利点

同じトランザクションがスレーブ上で 1 回だけ実行されるようにし、実行されていない gtid トランザクションは常に実行されるようにします。
binlog と座標はまったく必要ないため、従来のレプリケーションのように binlog 座標の精度を保証する必要はありません。
新しいマスターにフェイルオーバーするときに非常に便利で、多くのタスクが簡素化されます。
マスターとスレーブのデータが一致しているかどうかを簡単に判断できます。マスターで送信されたトランザクションがスレーブでも送信されている限り、一貫性が保たれている必要があります。

3. GTIDの仕組み

ここに画像の説明を挿入

1. トランザクションがマスター データベースで実行され、コミットされると、GTID が生成され、binlog ログに記録されます。
2. バイナリログがスレーブに転送され、スレーブのリレーログに保存された後、GTID の値が読み取られ、gtid_next 変数が設定され、次に実行される GTID 値がスレーブに通知されます。
3. SQL スレッドはリレー ログから GTID を取得し、スレーブ側のバイナリ ログと比較して GTID があるかどうかを確認します。
4. レコードが存在する場合、GTID のトランザクションが実行されたことを意味し、スレーブはそれを無視します。
5. レコードがない場合、スレーブは GTID トランザクションを実行し、GTID を自身のバイナリログに記録します。トランザクションを読み取って実行する前に、他のセッションが GTID を保持しているかどうかをチェックして、繰り返し実行されないようにします。
6. 解析プロセス中に、主キーがあるかどうかが判断されます。主キーがある場合は、セカンダリ インデックスが使用されます。主キーがない場合は、フル スキャンが使用されます。

4. 従来のレプリケーションに対するGTIDの利点

1. フェイルオーバーの実装が簡単になり、log_file、log_posを探す必要がなくなりました。

2. マスタースレーブレプリケーションの構築が容易

3. より安全

4.GTIDはギャップなく連続しているので、メインデータベースで競合が発生した場合は、空のイベントを追加することでスキップできます。

5. 起動方法

  • 方法1: 新しく構築したサーバーの場合は、直接起動するだけです
  • 方法2: サーバーが実行中の場合は、mysqlサーバーを再起動する必要があります

開始する前に、マスターの書き込みをオフにして、マスターとスレーブのデータが同期された状態を保つようにします。開始後に以前のレプリケーション プロトコルを使用しないようにするには、すべてのスレーブに構成パラメータ skip_slave_start=1 を追加する必要があります。

6.GTID(マスター1台とスレーブ1台)構成

6.1 環境:

centos8.0 IP: 192.168.136.239、データホスト名: mysql01

centos8.0 IP: 192.168.136.219 データなし ホスト名: mysql02

#バイナリインストールとmysql自動起動サービスは省略

6.2 マスター データベースでスレーブ データベースを承認します。

mysql> 'slave' によって識別される 'slave'@'192.168.136.219' に *.* 上のレプリケーション スレーブを許可します。
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
#両方のサーバーのファイアウォールをオフにします [root@mysql01 ~]# systemctl stop firewalld
[root@mysql01 ~]# setenforce 0
[root@mysql02 ~]# systemctl を停止します。firewalld
[root@mysql02 ~]# setenforce 0
ライブラリからの接続をテストします。
[root@mysql02 ~]# mysql -u スレーブ -p'スレーブ' -h192.168.136.239
ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。
マイSQL> 

6.3 データ一貫性操作の確保

1. メイン データベース テーブルをロックします。mysql> flush tables with read lock;
2. メインデータベースを準備します [root@mysql01 ~]# mysqldump -uroot -A > /clq/all-databases-20210519.sql
3. スレーブホストにコピーします [root@mysql01 ~]# scp /clq/all-databases-20210519.sql [email protected]:/backup/
[root@mysql02 バックアップ]# ll
-rw-r--r--。1 ルート ルート 873527 5月19日 16:40 all-databases-20210519.sql
4. データベース [root@mysql02 バックアップ]# mysql -uroot -pHuawei0917@ < all-databases-20210519.sql からマスターデータベースを復元します。 

6.4 メインライブラリの設定

[mysqld]
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /opt/data
ソケット = /tmp/mysql.sock
ポート = 3306
ユーザー = mysql
pid ファイル = /opt/data/mysql.pid
名前解決をスキップ
#許可テーブルをスキップする
log-bin = master_bin #マスターデータベースログを開く server-id = 10 #サービスの一意のID
gtid-mode = on #GTID モードをオンenforce_gtid_consistency = on #gtid モードの一貫性を強制log-slave-updates = 1 #スレーブ データベースは更新ログを許可し、操作ログを同期しますbinlog_format = row #binlog ログ形式は行形式で、デフォルトは混合モードですskip_slave_start = 1 #スレーブ データベースをスキップし、マスター データベースから開始します #systemctl を再起動します。restart mysqld 

6.5 スレーブライブラリを構成する

[root@mysql02 データ]# cat /etc/my.cnf
[mysqld]
ベースディレクトリ = /usr/local/mysql 
データディレクトリ = /opt/data 
ソケット = /tmp/mysql.sock 
ポート = 3306
ユーザー = mysql
pid ファイル = /opt/data/mysql.pid
名前解決をスキップ
#許可テーブルをスキップする 
gtid_mode=オン
強制GTID一貫性=オン
サーバーID=20
log-bin=slave_binlog #スレーブログを開く log_slave-updates=1 #スレーブの更新が許可される binlog_format=row #形式は行です skip-slave_start=1   
#systemctl restart mysqldを再起動します 

gtidステータスを確認する

mysql> '%gtid%' のような変数を表示します。
+----------------------------------+-----------+
| 変数名 | 値 |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery | オン |
| 強制GTID一貫性 | オン |
| gtid_executed_compression_period | 1000 |
| gtid_mode | オン |
| gtid_next | 自動 |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | オフ |
+----------------------------------+-----------+
セット内の行数は 8 です (0.00 秒)

6.6 マスタースレーブレプリケーションを構成する

#スレーブデータベースをルートとして設定する #help マスターを次のように変更する ヘルプドキュメントの例を参照できます。 mysql> マスターを次のように変更する
    -> マスターホスト='192.168.136.239',
    -> マスターユーザー='スレーブ'、
    -> マスターパスワード='スレーブ'、
    -> master_port = 3306、#マスターライブラリポート-> master_auto_position = 1; #位置#master_use_gtid = current_pos
クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.01 秒)
mysql> スレーブを起動します。  
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> スレーブステータスを表示します\G; 
Slave_IO_Running: 接続中
            スレーブIO実行中: はい
            スレーブSQL実行中: はい
システムの一貫性と認証の一貫性を確保する

(マスター GTID 1 つとスレーブ GTID 1 つ) テスト:

テストと表示のためにメインライブラリにデータベーステストを作成します

テスト用のライブラリからデータベースtest02を作成する

# メイン データベースにテスト データベースを作成します。mysql> create database test;
mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| テスト |
+--------------------+
# データベースからの同期ステータスを確認します。mysql> show databases;
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| テスト |
+--------------------+
セット内の 6 行 (0.00 秒)

#ライブラリから test02 データベースを作成しますmysql> create database test02;
クエリは正常、1 行が影響を受けました (0.00 秒)
# メインデータベースの表示mysql> show databases;
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
| sys | #test02 ライブラリがありません | test |
+--------------------+
セット内の行数は 5 です (0.00 秒)

概要: マスター データベース上のデータ操作はスレーブ データベースに同期されますが、スレーブ データベース上のデータ操作はマスター データベースと接続されていません。

7.GTID(マスター1台とスレーブ2台)

3番目のMySQLが接続されている場合、それに応じて設定します

3番目のmysql、バージョン: centos8、IP: 192.168.136.230、ホスト名: mysql03

[root@mysql03 ~]# cat /etc/my.cnf 
[mysqld]
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /opt/data
ソケット = /tmp/mysql.sock
ポート = 3306
ユーザー = mysql
pid ファイル = /opt/data/mysql.pid
名前解決をスキップ
#許可テーブルをスキップする
# レプリケーション設定
ログビン = master_bin
server-id = 21 #idは前のものと異なる必要があります gtid-mode = on
強制GTID一貫性 = オン
ログスレーブ更新 = 1
binlog 形式 = 行
スレーブ開始をスキップ = 1
#gtid ステータスを確認するmysql> show variables like '%gtid%';
+----------------------------------+-----------+
| 変数名 | 値 |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery | オン |
| 強制GTID一貫性 | オン |
| gtid_executed_compression_period | 1000 |
| gtid_mode | オン |
| gtid_next | 自動 |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | オフ |
+----------------------------------+-----------+
#これまでは1つのIPアドレスのみが許可されていたため、mysql01マスターデータベースで別のIPアドレスを許可します
mysql> 'slave' によって識別される 'slave'@'192.168.136.230' に *.* 上のレプリケーション スレーブを許可します。
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
#接続テスト [root@mysql ~]# mysql -uslave -pslave -h192.168.136.239
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは17です
サーバーバージョン: 5.7.33-log MySQL コミュニティサーバー (GPL)
Copyright (c) 2000、2021、Oracle およびその関連会社。
OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。
ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。
マイSQL> 
#mysql03 はデータベースから root ユーザーに接続し、対応する構成を実行します [root@mysql03 ~]# mysql -uroot -p1
mysql>マスターを次のように変更します
    -> master_host='192.168.136.239'、#マスターデータベースIP
    -> master_user='slave', #マスターデータベースによって承認された通常のユーザー-> master_password='slave',
    -> master_port=3306、#マスター データベース ポート-> master_auto_position=1; #位置の同期は 1 から始まります#構成のヘルプも表示できますmysql> help change master to;
マスターを変更
  MASTER_HOST='source2.example.com',
  MASTER_USER='レプリケーション'、
  MASTER_PASSWORD='パスワード',
  マスターポート=3306、
  MASTER_LOG_FILE='source2-bin.001',
  マスターログPOS=4、
  MASTER_CONNECT_RETRY=10;
URL: https://dev.mysql.com/doc/refman/5.7/en/change-master-to.html

#mysql を開いて、スレーブを起動します。
mysql> スレーブステータスを表示します\G;
************************** 1. 行 ****************************
               Slave_IO_State: マスターがイベントを送信するのを待機中
                  マスターホスト: 192.168.136.239
                  マスターユーザー: スレーブ
                  マスターポート: 3306
                接続再試行: 60
              マスターログファイル: master_bin.000002
          読み取りマスターログ位置: 2172
               リレーログファイル:mysql-relay-bin.000002
                リレーログ位置: 2387
        リレーマスターログファイル: master_bin.000002
             スレーブIO実行中: はい
            Slave_SQL_Running: Yes # 2 つの yes が表示された場合、操作は成功です。
#mysql03 データベースを確認すると、データベースの内容も正常に同期されています。mysql> show databases;
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| テスト |
+--------------------+
セット内の行数は 5 です (0.00 秒)

8.GTID(マスター2台とスレーブ1台)

1. 最新の環境

バージョンipホスト名身元
セントロス8 192.168.136.239マスター01メインライブラリ
セントロス8 192.168.136.219マスター02メインライブラリ
セントロス8 192.168.136.230奴隷図書館から

2. すべてのサーバーのファイアウォールがオフまたは有効になっている

[root@master01 ~]# systemctl 停止firewalld
[root@master01 ~]# systemctl ファイアウォールを無効にする
[root@master02 ~]# systemctl を停止します。firewalld
[root@master02 ~]# systemctl ファイアウォールを無効にする
[root@slave ~]# systemctl stop firewalld
[root@slave ~]# systemctl は、firewalld を無効にする

3. 承認された接続

master01ライブラリは一般ユーザーを認証します

mysql> 'user'@'192.168.136.%' に 'user' で識別されるレプリケーション スレーブを *.* に付与します。

スレーブが接続

[root@slave ~]# mysql -uuser -p'user' -h192.168.136.239
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは5です
サーバーバージョン: 5.7.33 MySQL コミュニティサーバー (GPL)
Copyright (c) 2000、2021、Oracle およびその関連会社。
OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。
ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

master02は一般ユーザーを承認する

mysql> 'app'@'192.168.136.%' に 'app' で識別されるレプリケーション スレーブを *.* に付与します。
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.01 秒)
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

スレーブが接続

[root@スレーブ ~]# mysql -uapp -papp -h192.168.136.219
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは3です
サーバーバージョン: 5.7.33 MySQL コミュニティサーバー (GPL)
Copyright (c) 2000、2021、Oracle およびその関連会社。
OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。
ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。
マイSQL> 

4. 設定ファイルを個別に変更する

#master01 ホスト:
[root@master01 ~]# cat /etc/my.cnf 
[mysqld]
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /opt/data
ソケット = /tmp/mysql.sock
ポート = 3306
ユーザー = mysql
pid ファイル = /opt/data/mysql.pid
名前解決をスキップ
スキップ許可テーブル
ログビン = master_bin
サーバーID = 10
gtidモード = オン
強制GTID一貫性 = オン
ログスレーブ更新 = 1
binlog 形式 = 行
スレーブ開始をスキップ = 1
#master02 ホスト [mysqld]
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /opt/data
ソケット = /tmp/mysql.sock
ポート = 3306
ユーザー = mysql
pid ファイル = /opt/data/mysql.pid
名前解決をスキップ
                      #レプリケーション設定
ログビン = master_bin
サーバーID = 11
gtidモード = オン
強制GTID一貫性 = オン
ログスレーブ更新 = 1
binlog 形式 = 行
スレーブ開始をスキップ = 1
#スレーブホスト [mysqld]
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /opt/data
ソケット = /tmp/mysql.sock
ポート = 3306
ユーザー = mysql
pid ファイル = /opt/data/mysql.pid
名前解決をスキップ
ログビン = スレーブビン
サーバーID = 13
gtidモード = オン
強制GTID一貫性 = オン
ログスレーブ更新 = 1
binlog 形式 = 行
スレーブ開始をスキップ = 1

5. 個別に再起動する

[root@master01 ~]# systemctl mysqldを再起動します
[root@master02 ~]# systemctl mysqldを再起動します
[root@slave ~]# systemctl mysqldを再起動します

6. GTIDの複数のマスターと1つのスレーブを設定する前に、概念を紹介しましょう

channel : 各チャネルは、IO_THREAD と SQL_THREAD を持つ独立したスレーブ サービスです。原理は通常のレプリケーションと同じですが、スレーブを区別するために、change master to ステートメントの後に FOR Channel を使用する必要があります。

チャネルを使用する場合は、スレーブ ライブラリの master-info-repository と relay-log-info-repository をテーブルに設定する必要があります。そうしないと、エラーが報告されます。

情報リポジトリをテーブル形式に設定する

方法1(mysqlでの設定):
グローバル master_info_repository='table' を設定します。
グローバルrelay_log_info_repositoryを'table'に設定します。
方法 2 (/etc/my.cnf で設定):
3. my.cnfでmaster_info_repository = TABLEを設定します。 
リレーログ情報リポジトリ = テーブル   
# 変更が成功したかどうかを確認しますmysql> show variables where variable_name in ('relay_log_info_repository','master_info_repository');
+---------------------------+-------+
| 変数名 | 値 |
+---------------------------+-------+
| マスター情報リポジトリ | テーブル |
| リレーログ情報リポジトリ | テーブル |
+---------------------------+-------+

7.スレーブはルートユーザーとしてログインし、GTIDを設定します。

#slaveは2つのマスターライブラリを設定します。スレーブライブラリのGTIDレプリケーションmysql>マスターを次のように変更します。
    -> master_host='192.168.136.219'、#mysql02 マスター データベース IP
    -> master_user='app'、#mysql02 マスター データベースによって承認された通常のユーザー-> master_password='app'、#mysql02 マスター データベースによって承認された通常のユーザー パスワード-> master_port=3306、#マスター データベース ポート-> チャネル 'master01' の master_auto_position=1; #位置の同期は 1 から始まり、最初のスレーブの名前は master01 になります
mysql>マスターを次のように変更します
    -> master_host='192.168.136.239'、#mysql01 マスター データベース IP
    -> master_user='ユーザー',              
    -> マスターパスワード='ユーザー'、          
    -> master_port=3306、#マスターライブラリポート-> チャネル 'master02' の master_auto_position=1; #位置同期は 1 から始まり、最初のスレーブの名前は master01 になります
# 2 つのスレーブのステータスを確認しますmysql> show slave status\G;
************************** 1. 行 ****************************
               スレーブ_IO_状態: 
                  マスターホスト: 192.168.136.219
                  マスターユーザー: アプリ
                  マスターポート: 3306
                接続再試行: 60
              マスターログファイル: 
          読み取りマスターログ位置: 4
               リレーログファイル: slave02-relay-bin-master1.000001
                リレーログ位置: 4
        リレーマスターログファイル: 
             スレーブIO実行中: いいえ
            Slave_SQL_Running: いいえ #すべて閉じています Replicate_Do_DB: 
          レプリケート_無視_DB: 
           テーブルの複製: 
       無視テーブルを複製: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   最終エラー番号: 0
                   最終エラー: 
                 スキップカウンタ: 0
          実行マスターログ位置: 0
              リレーログスペース: 154
              Until_Condition: なし
               ログファイルまで: 
                ログ位置まで: 0
           マスターSSL許可: いいえ
           マスターSSLCAファイル: 
           マスターSSLCAパス: 
              マスターSSL証明書: 
            マスターSSL暗号: 
               マスターSSLキー: 
        マスターより遅れている秒数: NULL
Master_SSL_Verify_Server_Cert: いいえ
                最終IOエラー番号: 0
                最後のIOエラー: 
               最終SQLエラー番号: 0
               最後のSQLエラー: 
  Replicate_Ignore_Server_Ids: 
             マスターサーバー ID: 0
                  マスターUUID: 
             マスター情報ファイル: mysql.slave_master_info
                    SQL_遅延: 0
          SQL_残り遅延: NULL
      スレーブSQL実行状態: 
           マスター再試行回数: 86400
                  マスター_バインド: 
      最終IOエラータイムスタンプ: 
     最終SQLエラータイムスタンプ: 
               マスターSSL証明書: 
           マスターSSLCrlパス: 
           取得済み_Gtid_Set: 
            実行されたGtidセット: b4326a77-0a31-11ec-a991-000c298d3571:1-2、
d68b404d-0a35-11ec-9df1-000c29581959:1
                自動位置: 1
         Replicate_Rewrite_DB: 
                 チャンネル名: master1
           マスター TLS バージョン: 
************************** 2. 行 ****************************
               スレーブ_IO_状態: 
                  マスターホスト: 192.168.136.239
                  Master_User: ユーザー
                  マスターポート: 3306
                接続再試行: 60
              マスターログファイル: 
          読み取りマスターログ位置: 4
               リレーログファイル: slave02-relay-bin-master2.000001
                リレーログ位置: 4
        リレーマスターログファイル: 
             スレーブIO実行中: いいえ
            スレーブSQL実行中: いいえ
              レプリケート_Do_DB: 
          レプリケート_無視_DB: 
           テーブルの複製: 
       無視テーブルを複製: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   最終エラー番号: 0
                   最終エラー: 
                 スキップカウンタ: 0
          実行マスターログ位置: 0
              リレーログスペース: 154
              Until_Condition: なし
               ログファイルまで: 
                ログ位置まで: 0
           マスターSSL許可: いいえ
           マスターSSLCAファイル: 
           マスターSSLCAパス: 
              マスターSSL証明書: 
            マスターSSL暗号: 
               マスターSSLキー: 
        マスターより遅れている秒数: NULL
Master_SSL_Verify_Server_Cert: いいえ
                最終IOエラー番号: 0
                最後のIOエラー: 
               最終SQLエラー番号: 0
               最後のSQLエラー: 
  Replicate_Ignore_Server_Ids: 
             マスターサーバー ID: 0
                  マスターUUID: 
             マスター情報ファイル: mysql.slave_master_info
                    SQL_遅延: 0
          SQL_残り遅延: NULL
      スレーブSQL実行状態: 
           マスター再試行回数: 86400
                  マスターバインド: 
      最終IOエラータイムスタンプ: 
     最終SQLエラータイムスタンプ: 
               マスターSSL証明書: 
           マスターSSLCrlパス: 
           取得済み_Gtid_Set: 
            実行されたGtidセット: b4326a77-0a31-11ec-a991-000c298d3571:1-2、
d68b404d-0a35-11ec-9df1-000c29581959:1
                自動位置: 1
         Replicate_Rewrite_DB: 
                 チャンネル名: master2
           マスター TLS バージョン: 
セット内の 2 行 (0.00 秒)
#スレーブを2つ開く
mysql> スレーブを起動します。
# ステータスを再度確認する

GTID (マスター 2 台とスレーブ 1 台) テスト:

#master01 メインライブラリはテストデータベースを作成しますmysql> create database test;
クエリは正常、1 行が影響を受けました (0.00 秒)
mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| テスト |
+--------------------+
セット内の行数は 5 です (0.00 秒)
#mysql> show databases で master02 データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
| sys | #コンテンツなし+--------------------+
セット内の 4 行 (0.00 秒)
#ライブラリからのスレーブビューmysql> show databases;
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| test | #テストライブラリが同期されました+--------------------+
セット内の行数は 5 です (0.00 秒)
#mysql02 メイン データベースに RHCA データベースを作成します。mysql> create database RHCA;
クエリは正常、1 行が影響を受けました (0.01 秒)
mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|RHCA|
|mysql |
| パフォーマンススキーマ |
|システム|
+--------------------+
セット内の行数は 5 です (0.00 秒)
#slave ライブラリから mysql> show databases;
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|RHCA|
|mysql |
| パフォーマンススキーマ |
| sys | #mysql01 メインライブラリのテストライブラリと mysql02 の RHCA ライブラリを使用 | test |
+--------------------+
セット内の 6 行 (0.00 秒)

スレーブ関連コマンド:

show slave status; //すべてのスレーブステータスを表示

チャネル 'naem' のスレーブ ステータスを表示します。 // 単一のスレーブのステータスを表示します。

スレーブをリセット; #すべてのスレーブをリセット

チャネル 'master1' のスレーブをリセットします。# 単一のスレーブをリセットします

チャネル 'master1' のスレーブを停止します。# 単一のスレーブを停止します

チャネル 'master1' のスレーブを起動します。# 単一のスレーブを起動します

プロセス中にエラーは発生しませんでしたが、最も一般的なエラーは次のとおりです。

設定後、スレーブを起動するとエラーが発生する

mysql> スレーブを起動します。
エラー 1872 (HY000): スレーブがリポジトリからのリレー ログ情報構造の初期化に失敗しました

問題を解決する

mysql.slave_relay_log_info テーブルには以前のレプリケーション情報が保持されているため、新しいスレーブ ライブラリを起動したときに、対応するファイルが見つかりません。この場合、テーブル内のレコードをクリアできます。

mysql> スレーブをリセットします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

上記は、MySQL サンプル DTID マスタースレーブ原理の分析の詳細な内容です。MySQL サンプル DTID マスタースレーブ原理の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Mysqlマスタースレーブ同期の実装原理
  • MySQL マスタースレーブ構成の解釈とその原理分析 (マスタースレーブ)
  • MySQL マスタースレーブレプリケーションの役割と動作原理の詳細な説明
  • MySQL マスタースレーブの原理と構成の詳細
  • MySQL マスタースレーブ同期原理の紹介
  • MySQL マスタースレーブレプリケーションの原理と実践の詳細な説明

<<:  Minio 軽量オブジェクト ストレージ サービスのインストールとブラウザの使用チュートリアル

>>:  CSS コード省略 div+css レイアウト コード省略仕様

推薦する

生年月日を年齢に変換し、グループ化して人数を数えるMySQLの例

データベースのクエリ `学生`から*を選択 クエリ結果id名前誕生日1張三1970-10-01 2李...

Vue3.0 は虫眼鏡効果のケーススタディを実装します

達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示さ...

Linuxファイルの基本属性の知識ポイントのまとめ

Linux システムは典型的なマルチユーザー システムです。異なるユーザーは異なる立場にあり、異なる...

MySQL で期限切れのデータレコードを定期的に削除する簡単な方法

1. MySQL に接続してログインしたら、まず MySQL でイベント機能が有効になっているかどう...

js の getBoundingClientRect() メソッドの詳細な説明

1. getBoundingClientRect() 分析getBoundingClientRect...

UbuntuはPythonスクリプトのサンプルコードを定期的に実行する

オリジナルリンク: https://vien.tech/article/157序文この記事では、Ub...

dockerfile-maven-plugin 使用ガイドの概要

目次pom 構成Setting.xml 構成ログインステータスログインが必要ですログインは必要ありま...

MAC 上の MySQL の初期パスワードを忘れた場合の対処方法

MACでMySQLの初期パスワードを忘れた場合の解決策を参考までに共有します。具体的な内容は次のとお...

Nginx SSL証明書設定エラーの解決策

1. はじめにWeb プロジェクトを Linux サーバーで公開する場合、SSL 証明書を構成する必...

イメージを再構築せずにDockerにポートを動的に追加する方法

操作中に Docker コンテナの公開ポートを変更または追加する必要がある場合がありますが、実行中の...

innerHTML を理解する

<br />関連記事: innerHTML HTML DOM insertRow() メ...

Nginxはリバースプロキシを使用して負荷分散プロセス分析を実装します

導入dockerコンテナとdocker-composeに基づいて、Linux環境でのdockerの基...

Linux の vsftpd サービス構成の簡単な分析 (匿名、ユーザー、仮想ユーザー)

vsftpd の概要vsftpd は「very secure FTP daemon」の略称で、セキ...

MySQLマスタースレーブデータベース構築方法の詳細な説明

この記事では、MySQL マスター/スレーブ データベースの構築方法について説明します。ご参考までに...