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 位置と位置を記録することを意味します。 4. メインライブラリをバックアップするときに、binlogの名前と場所を確認します。 マスターステータスを表示します。 mysql> マスターステータスを表示します。 +---------------+----------+-------------+------------------+-------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000004 | 79394496 | | | | +---------------+----------+-------------+------------------+-------------------+ または、バックアップしたデータベースファイルに移動して確認します: 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 台) の構築方法に関する詳細なチュートリアルです。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。 以下もご興味があるかもしれません:
|
<<: Nginx の add_header ディレクティブに注意する必要があるのはなぜですか?
>>: Linux で誤って削除したメッセージ ファイルを復元する方法
以前、プロジェクトを開発しているときに、flex レイアウトと position:absolute/...
目次charとvarcharの違いcharとvarcharの違い上記は、MySQL における cha...
この記事は主にDockerによるKafkaのデプロイとSpring Kafkaの実装について紹介しま...
Linuxユーティリティcertbotを使用してhttps証明書を生成するこのツールは Let...
目次1. React.Children.map 2. React.Children.forEach ...
開発の背景:最近、私はバッチ データを MySQL データベースにインポートする機能に取り組んでいま...
この記事では、シャトルボックス機能を実現するためのjQueryの具体的なコードを参考までに紹介します...
Web アプリケーションが 1 台のマシンでのみ実行される場合、パフォーマンスを向上させるのは非常に...
メタ タグは、ファイル情報を定義し、検索エンジンによる検索を容易にするために Web ページ ファイ...
目次序文iframeはサンドボックスを実装しますdiffメソッドを使用したサンドボックスの実装プロキ...
コード効果を異なるブラウザで表示することはよくあることなので、異なるショートカットキーを使用して対応...
1. Docker 起動時の異常なパフォーマンス: 1. ステータスが繰り返し再起動している場合は、...
Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮...
目次複数の条件文複数属性オブジェクトスイッチステートメントを置き換えるデフォルトパラメータとデストラ...
社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...