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 レイアウト コード省略仕様

推薦する

Vueは右上隅の時間表示のリアルタイム更新を実装します

この記事の例では、右上隅の時間表示のリアルタイム更新を実現するためのVueの具体的なコードを紹介しま...

MySQL 最適化における B ツリー インデックスの知識ポイントのまとめ

SQL を最適化する必要があるのはなぜですか?当然ですが、SQL ステートメントを記述する場合、次の...

MySQL ロック関連知識のまとめ

MySQL のロックロックは、並行環境におけるリソースの競合を解決する手段です。その中でも、楽観的並...

Vue で円形プログレスバーを実装する例

データ表示は、常にあらゆる職業の人々が求めているものです。特にフロントエンド開発業界では、データを表...

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...

Vue+Element UIはドロップダウンメニューのカプセル化を実現します

この記事の例では、ドロップダウンメニューのカプセル化を実装するためのVue + Element UI...

Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル

目次1. Ubuntuソースの変更2. MySQLをインストールする3. 新しいユーザーを作成し、権...

HTML と埋め込み Flash の両方におけるスクロールバーの分析と処理

開発を行う際に、次のような状況に遭遇することがよくあります。 a.swf が Web ページに追加さ...

ウェブサイト開発におけるフロントエンド開発者とアーティストの知識の違い

概要: 多くの企業、特にインターネット Web サイトを主な事業とする企業のほとんどが、「アーティス...

Vue ベースの Excel 解析とエクスポートの詳細な説明

目次序文基本的な紹介コードの実装基本構造アップロード分析Excel にエクスポート基本構造Excel...

Docker Consul コンテナ サービスの更新と見つかった問題の概要

目次1. コンテナサービスの更新とDockerコンサルの検出1. サービス登録と検出とは何ですか? ...

Vue+webrtc (Tencent Cloud) ライブブロードキャスト機能の実装実践

目次1. 生放送効果2. ライブストリーミングを開始する手順2.1 Tencent Web(高速ライ...

Web ページのデザインを学ぶときに習得すべきコードは何ですか?

この記事では、Web ページ制作を学ぶ過程で習得すべきテクニックの一部を詳しく紹介します。これらの内...

CSS3+ベジェ曲線でスケーラブルな入力検索ボックス効果を実現

では、早速レンダリングを見てみましょう。 コア コードはtransition: cubic-bezi...

Linux で MySQL データベースのスケジュールされたバックアップを実装する簡単な方法

詳細な手順は次のとおりです。 1. ディスク容量を確認します。 [root@localhost バッ...