MySQL マスタースレーブレプリケーションの実装手順

MySQL マスタースレーブレプリケーションの実装手順

mysql マスタースレーブレプリケーション

もともとシャーディングに取り組んでいたのですが、終わった後にデータベースのマスタースレーブレプリケーションが行われていないことに気づいたので、設定後にいくつか記録を残しました。

MySQL マスタースレーブレプリケーション方式

MySQL マスター スレーブ レプリケーションには、ログベース (binlog) と GTID ベース (グローバル トランザクション識別子) の 2 つの方法があります。このブログ投稿では、ログベース (binlog) レプリケーションを使用します。

MySQL マスタースレーブレプリケーションの原理

1.マスターは、MySQL 構成ファイル my.cnf の log-bin で指定されたファイルであるバイナリ ログにデータを記録します。これらの記録はバイナリ ログ イベントと呼ばれます。
2.スレーブには 2 つのスレッド (I/O スレッド 1 つと SQL スレッド 1 つ) があります。 I/O スレッドは、取得した binlog ログをリレー ログ ファイルに書き込むようにマスターに要求します。
3. SQL スレッドはリレー ログ ファイル内のログを読み取り、それを特定の操作に解析して、マスターとスレーブの操作の一貫性、そして最終的にはデータの一貫性を実現します。

這里寫圖片描述

MySQL マスタースレーブ構成の具体的な実装

1.マスター構成

(1) MySQL の my.cnf 設定ファイルを変更します。ここで注意しなければならないのは、私が使用している MySQL バージョンには my.cnf 設定ファイルがなく、my-default.cnf さえ存在しないことです。一般的に、my.cnf は /etc ディレクトリにあり、my-default.cnf は /usr/local/mysql/support-files にあります。最後に、インターネットから my.cnf ファイルをコピーし、/etc に配置しました (友人は自分でオンラインで見つけることができます。そのような友人はたくさんいます)。
(2) my.cnf で変更する必要がある構成には、主に、ログ機能の有効化、server_id を設定してその一意性を確保すること (スレーブ データベースと同じにすることはできません)、およびバックアップする必要があるデータベースのフィルタリングが含まれます。

bash-3.2# vim /etc/my.cnf
# server_id を設定します。これは繰り返すことはできません。通常は、メイン データベースの IP アドレスに設定できます。
サーバーID=81
# バックアップフィルタ: バックアップが必要なデータベース、出力バイナリログ
binlog-do-db = デモ ds_master
# バックアップフィルター: バックアップする必要のないデータベースは出力されません binlog-ignore-db=mysql
# バイナリログを有効にし、mysql-binで始まるログファイルにマスターデータベースデータを記録します(カスタマイズ可能)          
ログ bin = mysql bin
# トランザクション処理中にバイナリログキャッシュを保存するために使用される各セッションのメモリを設定します。binlog_cache_size=1M
# マスタースレーブレプリケーション形式 (混合、ステートメント、行、デフォルトはステートメント)
binlog_format=混合
# バイナリログが自動的に削除/期限切れになるまでの日数。デフォルト値は 0 で、自動削除されないことを意味します。expire_logs_days=7
# マスタースレーブレプリケーションで発生したすべてのエラーまたは指定されたエラータイプをスキップして、スレーブターミナルを回避するために使用されます # 1062: 主キーの競合 (特定のパラメータはオンラインで確認できます)
スレーブスキップエラー=1062

(3)マスターデータベースサービスを開始/再起動し、データベースにログインし、データ同期ユーザーを作成し、承認する。

#このマシンにメイン データベースのデータをバックアップする権限を付与します。mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'192.168.31.60' identified by 'password';
#次に権限を更新します。mysql> flush privileges;
#設定されたマスターデータベース情報を表示します。mysql> show master status; 

這里寫圖片描述

(4)マスターデータベースとスレーブデータベース間のデータの一貫性を確保するためのマスターデータベースデータのバックアップ

# テーブルを一時的にロックし、読み取り専用権限を設定します。mysql> flush tables with read lock;
# データベースをバックアップしますbash-3.2# mysqldump -uroot -p --add-drop-table demo_ds_master_1 > /tmp/demo_ds_master_1.sql;
# テーブルのロックを解除しますmysql> unlock table;

2. スレーブ構成

(1)スレーブデータベースmysqlのmy.cnf設定ファイルを変更し、スレーブデータベースのリレーログ設定を追加します。

[root@develop など]# vim my.cnf
# server_id を設定します。これは繰り返すことはできません。スレーブ データベースの IP アドレスがここで設定されます。
サーバーID=60
# データベースからのリレー ログを有効にし、マスター データベースの binlog をリレー ログに書き込みます。リレー ログは hehe-mysql-relay-bin (カスタマイズ可能) で始まります。
リレーログ=hehe-mysql-リレービン
# マスターとスレーブのデータ間の不整合を防ぐため、スレーブデータベースを読み取り専用権限に設定します。read_only=1

(2)スレーブデータベースを別のデータベースのマスターデータベースとして機能させる必要がある場合は、マスターに設定情報を追加し、log_slave_updates=1を追加して、マスターのバイナリログを自分のバイナリログに記録する必要があります。

這里寫圖片描述

(3)スレーブデータベースを再起動し、マスターデータベースのデータを同期する

# マスターデータベースのバックアップデータベースを実行します [root@develop etc]# mysql -uroot -p demo_ds_master_1 < /tmp/demo_ds_master_1.sql
# スレーブデータベースにログイン [root@develop など]# mysql -uroot -p
# スレーブノードのマスターノードを設定しますmysql> マスターを master_host='192.168.31.80'、master_user='root'、master_password='password' に変更します。
マスターポート=3306、
マスターログファイル='mysql-bin.000001',
マスターログ位置=154;
# マスタースレーブ同期を有効にする mysql> start slave;
# マスターとスレーブの同期ステータスを確認しますmysql> show slave status\G;
# マスタースレッドとスレーブスレッドのステータスを表示します。mysql> show processlist\G; 

這里寫圖片描述

次の図は、マスター スレーブ レプリケーションが構成されていることを示しています。これで、マスター データベースにデータを挿入すると、スレーブ データベースによるマスター データベース データの自動レプリケーションが実現できます。

  • Slave_IO_State: マスターがイベントを送信するのを待機中
  • スレーブIO実行中: はい
  • スレーブSQL実行中: はい

これで、MySQL マスタースレーブ レプリケーションの実装手順に関するこの記事は終了です。MySQL マスタースレーブ レプリケーションに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブ同期の原理と応用
  • MySQLデータベースのマスタースレーブレプリケーションの原理と機能の分析
  • mysql5.6 マスタースレーブ設定と非同期の問題の詳細な説明

<<:  Vue + 要素の動的複数ヘッダーと動的スロット

>>:  表には表示したい境界コードが表示されます

推薦する

Ubuntu で VIM を C++ 開発エディタとして設定する

1. 設定ファイルをユーザー環境にコピーし、新しい.vimフォルダを作成し、バンドルサブフォルダを作...

HTML の基礎必読 - CSS スタイルシートの包括的な理解

CSS (カスケーディング スタイル シート) は、HTML Web ページを美しくするために使用さ...

JavaScript が Xiaomi のカルーセル効果を模倣

この記事は、透明度を変えてカルーセルにするXiaomiカルーセルを真似て書いたものです。初心者なので...

見栄えの良い CSS カスタム スタイル (タイトル h1 h2 h3)

レンダリングBlog Gardenでよく使われるスタイル /*タイトル h1 h2 h3 スタイル*...

VMware vSAN 入門概要

1. 背景1. vSphere の共有ストレージの背景を簡単に紹介するvSphere の重要な機能は...

UIエンジニアのキャリアについての私たちの考え

私は長い間落ち込んでいます、なぜでしょうか?以前、お客様から、提供されたソフトウェアが正常に動作しな...

コード標準では、SQL ステートメントに結合が多すぎないようにする必要があるのはなぜですか?

無料ポイントインタビュアー:Linuxを使ったことはありますか?私:はいインタビュアー:メモリ使用量...

ウェブデザイナーもウェブコーディングを学ぶ必要がある

多くの場合、Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼らは...

CocosCreatorゲームにおける魚群アルゴリズムの詳細な説明

序文最近CocosCreatorを学びたいと思ったので、エディターをダウンロードして起動しました。誰...

js は axios 制限リクエスト キューを実装します

目次背景は次のとおりです。何が起こるでしょうか?背景は次のとおりです。実際の開発では、ネットワークの...

シンプルなHTMLとCSSの使い方の詳細な説明

HTML と CSS を含む JD.com のホームページの静的ページ効果を 3 日間で完成させます...

HTMLはマウスをホバーしたときにテキストを表示するためにtitle属性を使用します。

コードをコピーコードは次のとおりです。 <a href=# title="ここに表示...

React Native環境のインストールプロセス

react-native インストールプロセス1.npx react-native init Awe...

INS と DEL を使用してドキュメントの変更をマークする方法の詳細な説明

ins と del は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、...

Dockerサーバーのストレージリソースプール不足問題の解決

目次1. 問題の説明2. 問題分析3. 問題解決1. Dockerのディスク使用量を確認する2. 再...