MySQL マスタースレーブレプリケーションの実践の詳細説明 - ログポイントに基づくレプリケーション

MySQL マスタースレーブレプリケーションの実践の詳細説明 - ログポイントに基づくレプリケーション

ログポイントベースのレプリケーション

1. マスターデータベースとスレーブデータベースに専用のレプリケーションアカウントを作成する

MariaDB [従業員]> '123456' によって識別される 'repl'@'172.%' のユーザーを作成します。

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

2. マスターデータベースとスレーブデータベースにレプリケーション権限を付与する

MariaDB [従業員]> *.* のレプリケーション スレーブを 'repl'@'172.%' に付与します。

3. メインデータベースを構成する

バイナリ ログを有効にするにはサービスを再起動する必要があります。server_id は、コマンド ラインや構成ファイルと組み合わせて再起動不要の永続的な構成を実現できる動的パラメーターです。server_id はクラスター内で一意であることに注意してください。

[mysqld]
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
binlog_format = 行
サーバーID = 101

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

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

オプション log_slave_update は、リレー ログ relay_log をローカル binlog に保存するかどうかを決定します。リンク レプリケーションが構成されている場合は、このオプションが必須です。server_id はクラスター内で一意であることに注意してください。

[mysqld]
# レプリケーション
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
サーバーID = 102
# 奴隷
リレーログ = /var/log/mysql/リレー-bin
リレーログインデックス = /var/log/mysql/リレー-bin.index
リレーログ情報ファイル = /var/log/mysql/リレービン.info
log_slave_updates = オン
読み取り専用

5. ライブラリからデータを初期化する

ここでは、mysqldump を使用してマスター データベースをバックアップします。本番環境では、ロックフリーのホット バックアップ (innodb エンジンに基づく) には xtrabackup を使用することをお勧めします。

従業員データベースのデータをメインデータベースにバックアップする

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

mysqldump --single-transaction --master-data=1 --triggers --routines --databases employees -u root -p >> backup.sql

バックアップファイルbackup.sqlをscpまたはdockerボリューム経由でスレーブサーバーにマウントし、スレーブライブラリにインポートします。

mysql -u ルート -p < バックアップ.sql

6. レプリケーションリンクを開始する

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

MariaDB [(なし)]> マスターを MASTER_HOST='master'、MASTER_USER='repl'、MASTER_PASSWORD='123456'、MASTER_LOG_FILE='mariadb-bin.000029'、MASTER_LOG_POS=516 に変更します。
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

スレーブでレプリケーションリンクを開始する

MariaDB [(なし)]> スレーブを起動します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

7. スレーブライブラリのスレーブステータスを確認する

Slave_IO_Running と Slave_SQL_Running は YES である必要があります。エラーが発生した場合は、Last_IO_Error または Last_SQL_Error のプロンプト情報を詳しく読んでください。

MariaDB [(なし)]> スレーブステータスを表示\G
************************** 1. 行 ****************************
        Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: マスター
         マスターユーザー: repl
         マスターポート: 3306
        接続再試行: 60
       マスターログファイル: mariadb-bin.000029
     読み取りマスターログ位置: 516
        リレーログファイル: リレーbin.000002
        リレーログ位置: 539
    リレーマスターログファイル: mariadb-bin.000029
       スレーブIO実行中: はい
      スレーブSQL実行中: はい
       レプリケート_Do_DB:
     レプリケート_無視_DB:
      テーブルの複製:
    無視テーブルを複製:
   Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
          最終エラー番号: 0
          最終エラー:
         スキップカウンタ: 0
     実行マスターログポジション: 516
       リレーログスペース: 831
       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: 101
        マスターSSL証明書:
      マスターSSLCrlパス:
          使用Gtid: いいえ
         Gtid_IO_Pos:
   ドメイン ID を複製:
 ドメイン ID を無視する複製:
        Parallel_Mode: 保守的
セット内の 1 行 (0.00 秒)

8. メインライブラリのダンプスレッドを確認する

binlogダンプスレッドが正しく開始されているかどうかを確認します

MariaDB [(なし)]> プロセスリストを表示 \G
************************** 1. 行 ****************************
   識別子: 7
  ユーザー: root
  ホスト: 172.20.0.1:41868
   db: 従業員
 コマンド: スリープ
  時間: 56
  州:
  情報: NULL
進捗: 0.000
************************** 2. 行 ****************************
   識別子: 10
  ユーザー: repl
  ホスト: 172.20.0.3:45974
   デシベル: NULL
 コマンド: Binlog ダンプ
  時間: 246
  状態: マスターはすべてのバイナリログをスレーブに送信しました。バイナリログが更新されるのを待機しています。
  情報: NULL
進捗: 0.000

2 行目でコマンド Binlog Dump が開始されていることがわかります。これは、レプリケーション スレッドが正常に開始されたことを証明しています。

9. まとめ

アドバンテージ

  1. 技術は成熟しており、バグも比較的少ない
  2. SQLクエリには制限はありません。たとえば、GTIDに基づいてレプリケーションする場合、すべてのSQLが使用できるわけではありません。

欠点

  1. フェイルオーバー中に新しいマスターのログ オフセットを再取得することは困難です。

1 マスター複数スレーブ環境では、古いマスターがクラッシュし、クラスター内で新しいマスターが選出された場合、他のスレーブは新しいマスターと再同期する必要があります。各 DB のバイナリログは独立して存在するため、同期を開始するログ ポイントを見つけるのは困難です。

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

以下もご興味があるかもしれません:
  • pt-heartbeat を使用して MySQL レプリケーションの遅延を監視する方法の詳細な説明
  • MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明
  • MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例
  • MySQL マスタースレーブレプリケーションの実践の詳細説明 - GTID ベースのレプリケーション
  • MySQL 5.7 スレーブノードからマルチスレッド マスター スレーブ レプリケーションを構成する方法の詳細な説明
  • MySQLのレプリケーションの詳細な分析

<<:  Linux がますます人気になっている 10 の理由

>>:  Vue2.0の双方向データバインディング原則を手動で実装する

推薦する

vscodeで保存した後のHTML自動フォーマットの問題を解決する

vsCode のバージョンは最近更新され、現在のバージョン番号は 1.43 です。実際、vsCode...

Flinkのフォールトトレラントメカニズムに関する簡単な説明:ジョブ実行とデーモン

目次1. ジョブ実行のフォールトトレランス1.1 タスクフェイルオーバー戦略1.2 ジョブ再開戦略2...

VUEはトークンログイン認証を実装

この記事では、トークンログイン認証を実装するためのVUEの具体的なコードを例として紹介します。具体的...

CSS の一部のプロパティの前には「*」または「_」が付きます。

CSS の一部のプロパティの前には「*」または「_」が付きます。さまざまなブラウザを識別する例えば...

単一テーブルのMySQLバックアップとリストアに関する簡単な説明

A. MySQLバックアップツールxtrabackupのインストール1. Percona 公式 xt...

ウェブページでコンテンツを引用するためによく使われるHTMLタグをマスターする

長い引用には blockquote を、短い引用には q を、参考文献には cite を使用します。...

MySQL トリガーの使用シナリオとメソッドの例

トリガー:トリガーの使用シナリオと対応するバージョン:トリガーは次の MySQL バージョンで使用で...

Mysql5.7 サービスを開始できません。グラフィカル ソリューション チュートリアル

p>「サービス」で手動で起動すると、 コンソールから起動します: 次に、...\MySQL S...

MySQL の InnoDB ストレージ ファイルの詳細な説明

物理的に言えば、InnoDB テーブルは、共有テーブルスペース ファイル (ibdata1)、排他テ...

MySql 自動切り捨て例の詳細な説明

MySql 自動切り捨て例の詳細な説明友人が質問しました。プロジェクト内で挿入または更新ステートメン...

Ubuntu 18.04 Server に静的 IP を設定する方法

1. 背景Netplan は、Ubuntu システムのネットワーク設定を簡単に管理および構成できるよ...

MySql インデックス使用戦略の分析

MySql インデックスインデックスの利点1. 一意のインデックスまたは主キー インデックスを作成す...

ウェブサイトにダークモード切り替え機能を持たせるための純粋なCSSフリー実装コード

序文ダーク モードの概念は、 MacOS系統のMojaveに由来し、ユーザーが選択できる 2 つのス...

Vue3.0はvue-grid-layoutプラグインを使用してドラッグレイアウトを実装します。

目次1. プラグイン2. 幕間3. 実装4. 検証機能1. プラグインまず、私たちが選んだプラグイン...

MySQLがファントムリードを解決する方法の詳細な説明

1. ファントムリーディングとは何ですか?トランザクションにおいて、複数のクエリの後に結果セットの数...