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 で誤って削除したメッセージ ファイルを復元する方法
ダウンロードhttp://nginx.org/en/download.html解凍ダウンロードしたn...
Vue3プロジェクトのカプセル化サイドナビゲーションテキストスケルトン効果コンポーネント-グローバル...
概要ビルダー パターンは比較的単純なデザイン パターンであり、作成パターンに属します。定義: 複雑な...
チャレンジ:文字列内の文字 &、<、>、" (二重引用符)、および &...
前回は、JavaScript の charAt() メソッドの使い方を紹介しました。今日は、最も多く...
最近MySQLを5.7にアップグレードしましたが、WordPressでデータのインポート時にエラーが...
目次1. データベース操作2. データ型3. バックアップとリカバリ3. 操作4. 上級5. 知識補...
以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...
目次ログはどこに保存されますか?コンテナ内のアプリケーションからのログを表示するDockerデーモン...
Dockerのインストール手順をスキップする1. postgresqlイメージを取得する docke...
Ubuntu 15.04 は MySQL リモート ポート 3306 を開きます。以下の操作はすべて...
環境準備:複数のコンテナに基づいてホストに lnmp をデプロイします。 nginx サービス: 1...
textarea の形式は保存時にデータベースに保存できますが、表示時には /n と相互に変換できな...
最近、MySQL を使っています。Linux での mysql-installation という記事...
時々、データベース テーブルに重複したデータが大量に保存されます。これらの重複データはリソースを浪費...