MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明

MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明

1. 複製原理

マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追跡するためにファイルのインデックスを維持します。これらのログには、スレーブ サーバーに送信された更新が記録されます。スレーブがマスターに接続すると、スレーブがログで読み取った最後の正常な更新の場所がマスターに通知されます。スレーブは、その時点から発生するすべての更新を受信し、その後ブロックして、マスターからの新しい更新の通知を待機します。

MySQL は、レプリケーション機能を実行するために 3 つのスレッドを使用します (マスターに 1 つ、スレーブに 2 つ)。START SLAVE が発行されると、スレーブは I/O スレッドを作成してマスターに接続し、バイナリ ログに記録されたステートメントを送信します。マスターは、バイナリ ログの内容をスレーブに送信するスレッドを作成します。

このスレッドは、プライマリ サーバー上の Binlog Dump スレッドです。スレーブ サーバーの I/O スレッドは、マスター サーバーの Binlog Dump スレッドによって送信されたコンテンツを読み取り、そのデータをスレーブ サーバーのデータ ディレクトリ内のローカル ファイル (リレー ログ) にコピーします。 3 番目のスレッドは SQL スレッドであり、リレー ログを読み取り、ログに含まれる更新を実行するためにスレーブ サーバーによって作成されます。

2. サーバーの準備

オペレーティング システムのバージョン: Red Hat Enterprise Linux Server リリース 6.7 (Santiago)

マスター IP: 172.16.115.245 ホスト名: mysql2 server_id: 245

スレーブ IP: 172.16.115.247 ホスト名: mysql3 server_id: 247

MySQL 5.7.18がマスターサーバーとスレーブサーバーの両方にインストールされました

3. マスタースレーブレプリケーションの実装の詳細

1. マスター サーバー上のサーバーの接続アカウントを設定し、REPLICATION SLAVE 権限を付与します。

'repl@20170509' によって識別される 'repl'@'%' に *.* のレプリケーション スレーブを許可します。

2. マスター設定ファイルmy.cnfを変更する

サーバーID = 245
log_bin = /data/mysqllog/3306/bin_log/binlog

これら 2 つの値を設定する必要があります。設定後、MySQL を再起動します。

3. マスター上の全データをバックアップする

mysqldump -uroot -p'password' --master-data=2 --single-transaction -R --triggers -A > /backup/all.sql

例:

--master-data=2 は、バックアップ時のマスターの Binlog 位置と位置を記録することを意味します。
--single-transaction は一貫性のあるスナップショットを取得することを意味します
-Rはストアドプロシージャと関数のバックアップを意味します
--triggres はバックアップトリガーを意味します
-Aはすべてのライブラリをバックアップすることを意味します

4. メインライブラリをバックアップするときに、binlogの名前と場所を確認します。

マスターステータスを表示します。
mysql> マスターステータスを表示します。
+---------------+----------+-------------+------------------+-------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+-------------+------------------+-------------------+
| binlog.000004 | 79394496 | | | |
+---------------+----------+-------------+------------------+-------------------+

または、バックアップしたデータベースファイルに移動して確認します: vi all.sql

5. スレーブライブラリ構成ファイルmy.cnfを変更する

server-id = 247 (一意、メインデータベースと同じにすることはできません。通常はサーバー IP の最後の 3 桁に設定されます)
log_bin = /data/mysql/logdir/3306/bin_log/binlog
innodb_file_per_table = オン
スキップ名解決 = オン
リレーログ = /data/mysql/logdir/3306/リレーログ/リレー.log
binlog 形式 = 行
ログスレーブ更新 = true

read_only=ON (読み取り専用モード)

設定後、MySQLを再起動します。

6. スレーブサーバーでマスターバックアップを復元する

mysql -u root -p 'パスワード' < all.sql

7. スレーブ ライブラリを停止し、マスター/スレーブ パラメータを構成して、スレーブ ライブラリを開きます。

mysql> stop slave; #スレーブを停止mysql>CHANGE MASTER TO MASTER_HOST='172.16.115.245',MASTER_USER='repl', MASTER_PASSWORD='repl@20170509',MASTER_LOG_FILE='binlog.000004',MASTER_LOG_POS=154;
mysql> start slave; #レプリケーションを開始mysql> show slave status\G
************************** 1. 行 ****************************
Slave_IO_State: マスターがイベントを送信するのを待機中
マスターホスト: 172.16.115.245
マスターユーザー: repl
マスターポート: 3306
接続再試行: 60
マスターログファイル: binlog.000004
読み取りマスターログ位置: 104634190
リレーログファイル: relay.000003
リレーログ位置: 104632819
リレーマスターログファイル: binlog.000004
スレーブIO実行中: はい
スレーブSQL実行中: はい
レプリケート_Do_DB: 
レプリケート_無視_DB: 
テーブルの複製: 
無視テーブルを複製: 
Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
最終エラー番号: 0
最終エラー: 
スキップカウンタ: 0
実行マスターログ位置: 104634190
リレーログスペース: 104634713
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: 245
マスター_UUID: 4f545573-3170-11e7-b903-000c29462d8c
マスター情報ファイル: /data/mysql/datadir/3306/data/master.info
SQL_遅延: 0
SQL_残り遅延: NULL
Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。
マスター再試行回数: 86400
マスターバインド: 
最終IOエラータイムスタンプ: 
最終SQLエラータイムスタンプ: 
マスターSSL証明書: 
マスターSSLCrlパス: 
取得済み_Gtid_Set: 
実行されたGtidセット: 
自動位置: 0
Replicate_Rewrite_DB: 
チャンネル名: 
マスター TLS バージョン:

8. マスターとスレーブ関連のプロセスを表示する

マスター Binlog ダンプ スレッド:

mysql> プロセスリストを表示 \G
************************** 1. 行 ****************************
識別子: 13
ユーザー: repl
ホスト: 172.16.115.247:44602
デシベル: NULL
コマンド: Binlog ダンプ
時間: 76514
状態: マスターはすべてのバイナリログをスレーブに送信しました。さらに更新を待機しています。
情報: NULL

スレーブ IO/SQL スレッド:

mysql> プロセスリストを表示 \G
************************** 1. 行 ****************************
識別子: 10
ユーザー: システムユーザー
ホスト: 
デシベル: NULL
コマンド: 接続
時間: 81148
状態: マスターがイベントを送信するのを待機中
情報: NULL
************************** 2. 行 ****************************
識別子: 12
ユーザー: システムユーザー
ホスト: 
デシベル: NULL
コマンド: 接続
時間: 5
状態: リレーログからイベントを読み取り中
情報: NULL

9. この時点で、マスター スレーブ構成は完了です。マスター サーバーでデータベース、テーブル、その他の操作を作成し、スレーブ データベースが同期されているかどうかを確認できます。

要約する

上記は、編集者が紹介した MySQL 5.7.18 マスタースレーブレプリケーション (マスター 1 台とスレーブ 1 台) の構築方法に関する詳細なチュートリアルです。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。

以下もご興味があるかもしれません:
  • MySQLマスタースレーブデータベース構築方法の詳細な説明
  • Docker コンテナを使用して MySql マスター スレーブ レプリケーションを構築する
  • MySQL 5.7 Docker のマスタースレーブレプリケーションアーキテクチャの構築に関するチュートリアル
  • MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明
  • Docker ベースの MySQL マスタースレーブレプリケーション環境を構築するための実装手順
  • MySQL マスタースレーブ構築(複数のマスターと 1 つのスレーブ)の実装アイデアと手順

<<:  Nginx の add_header ディレクティブに注意する必要があるのはなぜですか?

>>:  Linux で誤って削除したメッセージ ファイルを復元する方法

推薦する

Uniapp WeChatアプレット: キー障害の解決策

ユニアプリコード <テンプレート> <表示> <image v-for...

MySQLのロックについて理解しておくべきこと

1. はじめにMySQL ロックは、その範囲に応じて、グローバル ロック、テーブル ロック、行ロック...

データベース接続のURLの詳細な説明と概要

データベース接続のURLの詳細な説明と概要JDBC URL = プロトコル名 + サブプロトコル名 ...

HTML 基本要約推奨事項 (タイトル)

HTML: タイトル見出しは <h1> - <h6> などのタグによって定...

jsで照明スイッチを制御する

参考までに、jsを使用して照明スイッチを制御します。具体的な内容は次のとおりです。トピック: js ...

JavaScript ステートメントの一般的な for ループの詳細な説明

JavaScript には、for、for in、for of、forEach ループなど、多くのル...

Docker プライベート ウェアハウスを構築する (自己署名方式)

作成したイメージを一元管理し、サービスの展開を容易にするために、プライベート Docker リポジト...

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を...

Mac で Docker を使用して Oracle をデプロイする方法

Mac で Docker を使用して Oracle をデプロイする方法まずdockerをインストール...

SQLクエリの実行順序をゼロから学ぶ

SQL クエリ ステートメントの実行順序は次のとおりです。 (7)選択 (8) DISTINCT &...

Docker で MySQL を起動したときに SQL 文を自動的に実行する方法

Docker で MySQL コンテナを作成する場合、コンテナの起動後にデータベースとテーブルが自動...

Ubuntuのソースリスト(ソースリスト)を変更する方法詳細説明

導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...

dockerコマンドの使用にはsudoは必要ありません

docker デーモンは通常の TCP ポートではなくホストの Unix ソケットにバインドする必要...

VMWare に CentOS 7.3 をインストールするグラフィカル チュートリアル

CentOS 7.3のインストール手順を図解しました。具体的な内容は次のとおりです。この記事では、v...

MySQLセグメンテーション関数substring()の具体的な使用法

MySQL には、主に left()、right()、substring()、substring_i...