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の双方向データバインディング原則を手動で実装する

推薦する

背景画像の配置におけるbackground-position属性の自己理解

最近、プロジェクトではラベルやボタンなどの断片的な画像をたくさん使用する必要があります。また、CSS...

ユーザーエクスペリエンスの76の経験ポイントの要約

ウェブサイト体験の分類1. 感覚体験:快適性を重視した視聴覚体験をユーザーに提供します。 2. イン...

初心者がHTMLタグを学ぶ(2)

関連記事:初心者が学ぶ HTML タグ (1)初心者は、いくつかの HTML タグを理解することで ...

クリーンなコードのための Web デザインの 12 の法則 [グラフィック]

美しいコードは美しい Web サイトの基礎です。優れた CSS は、同様に優れた HTML の上にの...

CSS3を使用してプログレスバー効果を実現し、動的にパーセンテージを追加する

プロジェクト中、プログレスバーを実装するために js の requestAnimationFrame...

HTML ブロックレベルタグとインラインタグの違い

1. ブロックレベル要素: 独立して存在できる能力を指します。通常、ブロックレベル要素は改行によって...

マスタークラスタに再参加する k8s ノードの実装

1. ノードを削除するkubectl delete node node01を実行します。 2. この...

フロントエンドインタビューに必要なホモロジーとクロスドメインの詳細な説明

序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...

MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

MySQL 5.7.27のインストールチュートリアルは以下のように記録され、皆さんと共有されています...

Mysql と Oracle でよく使用される複数テーブルの変更ステートメントの概要

今日、SQLトレーニングの質問バンクでこの質問を見ました。これは、非常に代表的なマルチテーブル変更の...

MySQL バイナリログデータ復旧: 誤ってデータベースを削除した場合の詳細な説明

MySQL Binログデータの回復: 誤ってデータベースを削除した場合前書き: テスト マシンで誤っ...

Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL 環境構築チュートリアル

準備1. 環境の説明:オペレーティング システム: Windows Server 2019 PHP ...

MySQLとSpringの自動コミットの詳細な説明

1 MySQLの自動コミット設定MySQL はデフォルトで自動的にコミットします。つまり、各 DML...

航空機戦争ゲームを実装するためのJavaScript

この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...

Vue3 がデータ監視を実装するためにプロキシを使用する理由の分析

Vue データの双方向バインディング原則ですが、この方法には欠点があり、配列とオブジェクトの部分的な...