MySQL マスタースレーブレプリケーションの実践の詳細説明 - GTID ベースのレプリケーション

MySQL マスタースレーブレプリケーションの実践の詳細説明 - GTID ベースのレプリケーション

GTIDベースのレプリケーション

導入

GTID ベースのレプリケーションは、MySQL 5.6 以降に追加された新しいレプリケーション方法です。

GTID(グローバル トランザクション識別子)はグローバル トランザクション ID であり、マスター データベースで送信された各トランザクションがクラスター内で一意の ID を持つことを保証します。

オリジナルのログベースのレプリケーションでは、スレーブは増分同期に使用するオフセットをマスターに伝える必要があります。指定が間違っていると、データが失われ、データの不整合が発生します。

GTID ベースのレプリケーションでは、スレーブ データベースは実行されたトランザクションの GTID 値をマスター データベースに通知し、マスター データベースは実行されていないすべてのトランザクションの GTID のリストをスレーブ データベースに返します。また、指定されたスレーブ データベースで同じトランザクションが 1 回だけ実行されることが保証されます。

実際の戦闘

1. マスターデータベースにレプリケーションアカウントを作成し、権限を付与する

GTID ベースのレプリケーションでは、スレーブで実行されていないトランザクションが自動的に再生されるため、他のスレーブに同じアカウントを作成しないでください。同じアカウントを作成すると、レプリケーション リンクでエラーが発生する可能性があります。

mysql> '123456' で識別される 'repl'@'172.%' のユーザーを作成します。

運用中のパスワードは、一定のパスワード強度を達成するために関連する仕様を満たす必要があり、マスター データベースにはスレーブ データベース上の特定のネットワーク セグメントからのみアクセスできる必要があることに注意してください。

mysql> *.* のレプリケーションスレーブを 'repl'@'172.%' に付与します。

ユーザーを表示

mysql> mysql.user からユーザーとホストを選択します。
+-----------+------------+
| ユーザー | ホスト |
+-----------+------------+
| プロンテラ | % |
| ルート | % |
| mysql.sys | ローカルホスト |
| ルート | ローカルホスト |
+-----------+------------+
セット内の 4 行 (0.00 秒)

承認を表示

mysql> repl@'172.%' の権限を表示します。
+--------------------------------------------------+
| repl@172.% の助成金 |
+--------------------------------------------------+
| *.* のレプリケーションスレーブを 'repl'@'172.%' に付与 |
+--------------------------------------------------+
セット内の 1 行 (0.00 秒)

2. マスターデータベースサーバーを構成する

[mysqld]
log_bin = /var/log/mysql/mysql-bin
log_bin_index = /var/log/mysql/mysql-bin.index
binlog_format = 行
サーバーID = 101
gtid_mode = オン
強制GTID一貫性 = オン
#log_slave_updates = オン

注: ログをデータから分離し、できれば異なるデータ パーティションに分けることをお勧めします。

強制_gtid_consistencyはGTIDの一貫性を強制します。有効にすると、次のコマンドは使用できません。

テーブルを作成...選択...

mysql> テーブル dept を作成し、 departments から * を選択します。
エラー 1786 (HY000): ステートメントが GTID 一貫性に違反しています: CREATE TABLE ... SELECT。

これらは実際には2つの独立したイベントであるため、最初にテーブルを作成し、そのテーブルにデータを挿入するために分割することしかできません。

一時テーブルを作成する

一時テーブルはトランザクション内では作成できません

mysql> 開始します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> 一時テーブル dept(id int) を作成します。
エラー 1787 (HY000): ステートメントが GTID の一貫性に違反しています: CREATE TEMPORARY TABLE および DROP TEMPORARY TABLE は、トランザクション コンテキスト外でのみ実行できます。関数とトリガーも複数ステートメントのトランザクションと見なされるため、これらのステートメントは関数またはトリガーでも許可されません。

同じトランザクションでトランザクションテーブルと非トランザクションテーブルを更新する (MyISAM)

mysql> テーブル `dept_innodb` を作成します (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT);
クエリは正常、影響を受けた行は 0 行 (0.04 秒)

mysql> テーブル `dept_myisam` を作成します (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE = `MyISAM`;
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

mysql> 開始します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> dept_innodb(id) 値(1) に挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> dept_myisam(id) に値(1) を挿入します。
エラー 1785 (HY000): ステートメントが GTID の一貫性に違反しています。非トランザクション テーブルへの更新は、自動コミット ステートメントまたは単一ステートメント トランザクションのいずれかでのみ実行でき、トランザクション テーブルへの更新と同じステートメントでは実行できません。

したがって、デフォルトのデータベース エンジンとして Innodb を選択することをお勧めします。

log_slave_updates このオプションは、MySQL 5.6 の GTID ベースのレプリケーションに必要ですが、スレーブ サーバーの IO 負荷が増加します。MySQL 5.7 では、このオプションは不要になりました。

3. スレーブサーバーを構成する

master_info_repository と relay_log_info_repository

MySQL 5.6.2 より前では、スレーブによって記録されたマスター情報とスレーブ アプリケーションの binlog の情報は、master.info と relay-log.info というファイルに保存されていました。バージョン 5.6.2 以降では、テーブルに記録できるようになりました。対応するテーブルは mysql.slave_master_info と mysql.slave_relay_log_info で、両方のテーブルは innodb エンジン テーブルです。

[mysqld]
log_bin = /var/log/mysql/mysql-bin
log_bin_index = /var/log/mysql/mysql-bin.index
サーバーID = 102
# 奴隷
リレーログ = /var/log/mysql/リレー-bin
リレーログインデックス = /var/log/mysql/リレー-bin.index
リレーログ情報ファイル = /var/log/mysql/リレービン.info
強制GTID一貫性 = オン
log_slave_updates = オン
読み取り専用 = オン
マスター情報リポジトリ = テーブル
リレーログ情報リポジトリ = テーブル

4. ライブラリデータから初期化する - [オプション]

まずプライマリデータベースのデータをバックアップする

次のようにコードをコピーします

mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases --events -u root -p > backup.sql

--master-data=2 このオプションは、現在のサーバーのバイナリログの位置とファイル名を出力ファイル(マスターステータスを表示)に追加します。 1 の場合、オフセットは CHANGE MASTER コマンドにスプライスされます。 2 の場合、出力オフセット情報が注釈付けされます。

--all-databases GTID ベースのレプリケーションではすべてのトランザクションが記録されるため、完全なダンプを構築するにはこのオプションが推奨されます。

よくある間違い

ライブラリからSQLをインポートするときに表示されます

次のようにコードをコピーします

24 行目のエラー 1840 (HY000): @@GLOBAL.GTID_PURGED は、@@GLOBAL.GTID_EXECUTED が空の場合にのみ設定できます。

このとき、スレーブデータベースのMySQLコマンドラインを入力し、リセットマスターを使用します。

5. GTIDベースのレプリケーションを開始する

[email protected][email protected]があり、データはmysqldumpを通じてスレーブに同期されています。次に、スレーブサーバーでレプリケーションリンクを構成します。

mysql> マスターを、master_host='master'、master_user='repl'、master_password='123456'、master_auto_position=1 に変更します。
クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.06 秒)

レプリケーションを開始

mysql> スレーブを起動します。

起動が成功したら、スレーブのステータスを確認します

mysql>スレーブステータスを表示\G
************************** 1. 行 ****************************
    Slave_IO_State: マスターイベントをリレーログにキューイング
     マスターホスト: マスター
     マスターユーザー: repl
     マスターポート: 3306
    接続再試行: 60
    マスターログファイル:mysql-bin.000002
   読み取りマスターログ位置: 12793692
    リレーログファイル: リレーbin.000002
    リレーログ位置: 1027
  リレーマスターログファイル: mysql-bin.000002
    スレーブIO実行中: はい
   スレーブSQL実行中: はい
    レプリケート_Do_DB:
   レプリケート_無視_DB:
   テーブルの複製:
  無視テーブルを複製:
  Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
     最終エラー番号: 0
     最終エラー:
     スキップカウンタ: 0
   実行マスターログポジション: 814
    リレーログスペース: 12794106
    Until_Condition: なし
    ログファイルまで:
    ログ位置まで: 0
   マスターSSL許可: いいえ
   マスターSSLCAファイル:
   マスターSSLCAパス:
    マスターSSL証明書:
   マスターSSL暗号:
    マスターSSLキー:
  マスターより遅れている秒数: 5096
Master_SSL_Verify_Server_Cert: いいえ
    最終IOエラー番号: 0
    最後のIOエラー:
    最終SQLエラー番号: 0
    最後のSQLエラー:
 Replicate_Ignore_Server_Ids:
    マスターサーバーID: 101
     マスター_UUID: a9fd4765-ec70-11e6-b543-0242ac140002
    マスター情報ファイル: mysql.slave_master_info
     SQL_遅延: 0
   SQL_残り遅延: NULL
  Slave_SQL_Running_State: リレーログからイベントを読み取り中
   マスター再試行回数: 86400
     マスターバインド:
  最終IOエラータイムスタンプ:
  最終SQLエラータイムスタンプ:
    マスターSSL証明書:
   マスターSSLCrlパス:
   取得済み_Gtid_Set: a9fd4765-ec70-11e6-b543-0242ac140002:1-39
   実行されたGtidセット: a9fd4765-ec70-11e6-b543-0242ac140002:1-4
    自動位置: 1
   Replicate_Rewrite_DB:
     チャンネル名:
   マスター TLS バージョン:
セット内の 1 行 (0.00 秒)

Slave_IO_Running、Slave_SQL_RunningがYESの場合、

Slave_SQL_Running_State が Slave has read all relay log; wait for more update の場合、レプリケーション リンクは正常に確立されます。

6. まとめ

アドバンテージ

  1. ログオフセットを手動で設定する必要がないため、フェイルオーバーを簡単に実行できます。
  2. log_slave_updatesが有効になっている場合、スレーブはマスターで行われた変更を失うことはありません。

欠点

  1. 実行されるSQLには一定の制限がある
  2. MySQL 5.6以降のバージョンのみがサポートされており、5.6より前のバージョンは推奨されません。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションの GTID モードの詳細な紹介
  • MYSQL データベース GTID はマスタースレーブレプリケーションを実現します (超便利)
  • MySQL5.6 GTIDモードで同期レプリケーションエラーをスキップできない問題の解決方法
  • MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例
  • GTID に基づく MySQL 5.6 マスタースレーブ レプリケーション
  • MySQL での GTID レプリケーション プロトコルと停止プロトコルの使用に関するチュートリアル
  • MySQL レプリケーションにおける GTID レプリケーションの具体的な使用法

<<:  友達やグループを見つけるためのJavaScriptのLayim

>>:  Win10の組み込み仮想マシンHyper-Vを使用してCentOS7をインストールする方法の詳細な説明

推薦する

MySQL MHA の高可用性構成とフェイルオーバーの詳細な導入手順

目次1. MHAの紹介1. MHAとは何ですか? 2. MHAの構成3. MHAの特徴2. MySQ...

MySQL: データの整合性

データ整合性は、エンティティ整合性、ドメイン整合性、参照整合性に分けられます。参照整合性:参照整合性...

jQueryは居住地を選択するためのドロップダウンボックスを実装します

居住地を選択するためのドロップダウンボックスをjQueryで実装するための具体的なコードは参考までに...

CSS3は水平方向の中央揃え、垂直方向の中央揃え、水平方向と垂直方向の中央揃えのサンプルコードを実装しています。

フロントエンドの担当者であれば、面接でも仕事中でも、「CSS を使用して中央揃えにする」という効果に...

Win10でIIS10を構成し、ASPプログラムのデバッグをサポートする手順

マイクロソフトIIS (Internet Information Server) は、Microso...

Vue diffアルゴリズムの完全な分析

目次序文Vue 更新ビューパッチ同じVノードパッチVノード更新子供序文Vue は仮想 DOM を使用...

Docker コンテナのネットワーク設定によく使われるコマンドの詳しい説明

基本的なネットワーク構成Docker はイメージに基づいて複数のコンテナを「開く」ことができ、各コン...

Centos7 に Zabbix3.0 をインストールするための非常に詳細な手順

序文最近、同社の業務の一部がコンピュータルームに移転し、ホストリソースの監視と管理をより便利に行うた...

WindowsシステムでPhPStudy MySQLの起動に失敗する問題を解決する

エラーを報告するApache\Nginx サービスは正常に起動しましたが、MySQL は起動に失敗し...

Vue で手ぶれ補正を実装するためのサンプルコード

手ぶれ防止: 繰り返しのクリックによるイベントのトリガーを防止まず、揺れとは何でしょうか? 震えるの...

Dockerコンテナを使用する簡単な例

目次1. イメージをプルする2. イメージを実行する3. コンテナ内でアプリケーションをテストする4...

react+antdプロジェクトをゼロから構築する方法を教えます

これまでの記事はすべて私自身の学習記録であり、主に以前に遭遇した落とし穴を忘れないようにするためのも...

ウェブページ(ウェブサイト)のデザインと制作に関する考えや経験の共有

まずは投稿する前に! 「I Want to Study on My Own!」に改めて感謝します。た...

HTML と CSS を書くための 6 つの最も効果的な方法

この記事では、効率を向上させ、時間を節約することを願って、最も効果的な 6 つの方法を紹介します。 ...

MySQLのダウンロードとインストールのプロセスの詳細な説明

1: MySqlをダウンロードする公式サイトのダウンロードアドレス: https://dev.mys...