GTIDベースのレプリケーション 導入 GTID ベースのレプリケーションは、MySQL 5.6 以降に追加された新しいレプリケーション方法です。 GTID(グローバル トランザクション識別子)はグローバル トランザクション ID であり、マスター データベースで送信された各トランザクションがクラスター内で一意の ID を持つことを保証します。 オリジナルのログベースのレプリケーションでは、スレーブは増分同期に使用するオフセットをマスターに伝える必要があります。指定が間違っていると、データが失われ、データの不整合が発生します。 GTID ベースのレプリケーションでは、スレーブ データベースは実行されたトランザクションの GTID 値をマスター データベースに通知し、マスター データベースは実行されていないすべてのトランザクションの GTID のリストをスレーブ データベースに返します。また、指定されたスレーブ データベースで同じトランザクションが 1 回だけ実行されることが保証されます。 実際の戦闘 1. マスターデータベースにレプリケーションアカウントを作成し、権限を付与する GTID ベースのレプリケーションでは、スレーブで実行されていないトランザクションが自動的に再生されるため、他のスレーブに同じアカウントを作成しないでください。同じアカウントを作成すると、レプリケーション リンクでエラーが発生する可能性があります。 mysql> '123456' で識別される 'repl'@'172.%' のユーザーを作成します。 運用中のパスワードは、一定のパスワード強度を達成するために関連する仕様を満たす必要があり、マスター データベースにはスレーブ データベース上の特定のネットワーク セグメントからのみアクセスできる必要があることに注意してください。 mysql> *.* のレプリケーションスレーブを 'repl'@'172.%' に付与します。 ユーザーを表示 mysql> mysql.user からユーザーとホストを選択します。 +-----------+------------+ | ユーザー | ホスト | +-----------+------------+ | プロンテラ | % | | ルート | % | | mysql.sys | ローカルホスト | | ルート | ローカルホスト | +-----------+------------+ セット内の 4 行 (0.00 秒) 承認を表示 mysql> repl@'172.%' の権限を表示します。 +--------------------------------------------------+ | repl@172.% の助成金 | +--------------------------------------------------+ | *.* のレプリケーションスレーブを 'repl'@'172.%' に付与 | +--------------------------------------------------+ セット内の 1 行 (0.00 秒) 2. マスターデータベースサーバーを構成する [mysqld] log_bin = /var/log/mysql/mysql-bin log_bin_index = /var/log/mysql/mysql-bin.index binlog_format = 行 サーバーID = 101 gtid_mode = オン 強制GTID一貫性 = オン #log_slave_updates = オン 注: ログをデータから分離し、できれば異なるデータ パーティションに分けることをお勧めします。 強制_gtid_consistencyはGTIDの一貫性を強制します。有効にすると、次のコマンドは使用できません。 テーブルを作成...選択... mysql> テーブル dept を作成し、 departments から * を選択します。 エラー 1786 (HY000): ステートメントが GTID 一貫性に違反しています: CREATE TABLE ... SELECT。 これらは実際には2つの独立したイベントであるため、最初にテーブルを作成し、そのテーブルにデータを挿入するために分割することしかできません。 一時テーブルを作成する 一時テーブルはトランザクション内では作成できません mysql> 開始します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> 一時テーブル dept(id int) を作成します。 エラー 1787 (HY000): ステートメントが GTID の一貫性に違反しています: CREATE TEMPORARY TABLE および DROP TEMPORARY TABLE は、トランザクション コンテキスト外でのみ実行できます。関数とトリガーも複数ステートメントのトランザクションと見なされるため、これらのステートメントは関数またはトリガーでも許可されません。 同じトランザクションでトランザクションテーブルと非トランザクションテーブルを更新する (MyISAM) mysql> テーブル `dept_innodb` を作成します (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT); クエリは正常、影響を受けた行は 0 行 (0.04 秒) mysql> テーブル `dept_myisam` を作成します (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE = `MyISAM`; クエリは正常、影響を受けた行は 0 行 (0.03 秒) mysql> 開始します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> dept_innodb(id) 値(1) に挿入します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> dept_myisam(id) に値(1) を挿入します。 エラー 1785 (HY000): ステートメントが GTID の一貫性に違反しています。非トランザクション テーブルへの更新は、自動コミット ステートメントまたは単一ステートメント トランザクションのいずれかでのみ実行でき、トランザクション テーブルへの更新と同じステートメントでは実行できません。 したがって、デフォルトのデータベース エンジンとして Innodb を選択することをお勧めします。 log_slave_updates このオプションは、MySQL 5.6 の GTID ベースのレプリケーションに必要ですが、スレーブ サーバーの IO 負荷が増加します。MySQL 5.7 では、このオプションは不要になりました。 3. スレーブサーバーを構成する master_info_repository と relay_log_info_repository MySQL 5.6.2 より前では、スレーブによって記録されたマスター情報とスレーブ アプリケーションの binlog の情報は、master.info と relay-log.info というファイルに保存されていました。バージョン 5.6.2 以降では、テーブルに記録できるようになりました。対応するテーブルは mysql.slave_master_info と mysql.slave_relay_log_info で、両方のテーブルは innodb エンジン テーブルです。 [mysqld] log_bin = /var/log/mysql/mysql-bin log_bin_index = /var/log/mysql/mysql-bin.index サーバーID = 102 # 奴隷 リレーログ = /var/log/mysql/リレー-bin リレーログインデックス = /var/log/mysql/リレー-bin.index リレーログ情報ファイル = /var/log/mysql/リレービン.info 強制GTID一貫性 = オン log_slave_updates = オン 読み取り専用 = オン マスター情報リポジトリ = テーブル リレーログ情報リポジトリ = テーブル 4. ライブラリデータから初期化する - [オプション] まずプライマリデータベースのデータをバックアップする 次のようにコードをコピーします。 mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases --events -u root -p > backup.sql --master-data=2 このオプションは、現在のサーバーのバイナリログの位置とファイル名を出力ファイル(マスターステータスを表示)に追加します。 1 の場合、オフセットは CHANGE MASTER コマンドにスプライスされます。 2 の場合、出力オフセット情報が注釈付けされます。 --all-databases GTID ベースのレプリケーションではすべてのトランザクションが記録されるため、完全なダンプを構築するにはこのオプションが推奨されます。 よくある間違い ライブラリからSQLをインポートするときに表示されます 次のようにコードをコピーします。 24 行目のエラー 1840 (HY000): @@GLOBAL.GTID_PURGED は、@@GLOBAL.GTID_EXECUTED が空の場合にのみ設定できます。 このとき、スレーブデータベースのMySQLコマンドラインを入力し、リセットマスターを使用します。 5. GTIDベースのレプリケーションを開始する [email protected]と[email protected]があり、データはmysqldumpを通じてスレーブに同期されています。次に、スレーブサーバーでレプリケーションリンクを構成します。 mysql> マスターを、master_host='master'、master_user='repl'、master_password='123456'、master_auto_position=1 に変更します。 クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.06 秒) レプリケーションを開始 mysql> スレーブを起動します。 起動が成功したら、スレーブのステータスを確認します mysql>スレーブステータスを表示\G ************************** 1. 行 **************************** Slave_IO_State: マスターイベントをリレーログにキューイング マスターホスト: マスター マスターユーザー: repl マスターポート: 3306 接続再試行: 60 マスターログファイル:mysql-bin.000002 読み取りマスターログ位置: 12793692 リレーログファイル: リレーbin.000002 リレーログ位置: 1027 リレーマスターログファイル: mysql-bin.000002 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログポジション: 814 リレーログスペース: 12794106 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: 5096 Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 0 最後のIOエラー: 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバーID: 101 マスター_UUID: a9fd4765-ec70-11e6-b543-0242ac140002 マスター情報ファイル: mysql.slave_master_info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: リレーログからイベントを読み取り中 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得済み_Gtid_Set: a9fd4765-ec70-11e6-b543-0242ac140002:1-39 実行されたGtidセット: a9fd4765-ec70-11e6-b543-0242ac140002:1-4 自動位置: 1 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: セット内の 1 行 (0.00 秒) Slave_IO_Running、Slave_SQL_RunningがYESの場合、 Slave_SQL_Running_State が Slave has read all relay log; wait for more update の場合、レプリケーション リンクは正常に確立されます。 6. まとめ アドバンテージ
欠点
以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 友達やグループを見つけるためのJavaScriptのLayim
>>: Win10の組み込み仮想マシンHyper-Vを使用してCentOS7をインストールする方法の詳細な説明
目次1. MHAの紹介1. MHAとは何ですか? 2. MHAの構成3. MHAの特徴2. MySQ...
データ整合性は、エンティティ整合性、ドメイン整合性、参照整合性に分けられます。参照整合性:参照整合性...
居住地を選択するためのドロップダウンボックスをjQueryで実装するための具体的なコードは参考までに...
フロントエンドの担当者であれば、面接でも仕事中でも、「CSS を使用して中央揃えにする」という効果に...
マイクロソフトIIS (Internet Information Server) は、Microso...
目次序文Vue 更新ビューパッチ同じVノードパッチVノード更新子供序文Vue は仮想 DOM を使用...
基本的なネットワーク構成Docker はイメージに基づいて複数のコンテナを「開く」ことができ、各コン...
序文最近、同社の業務の一部がコンピュータルームに移転し、ホストリソースの監視と管理をより便利に行うた...
エラーを報告するApache\Nginx サービスは正常に起動しましたが、MySQL は起動に失敗し...
手ぶれ防止: 繰り返しのクリックによるイベントのトリガーを防止まず、揺れとは何でしょうか? 震えるの...
目次1. イメージをプルする2. イメージを実行する3. コンテナ内でアプリケーションをテストする4...
これまでの記事はすべて私自身の学習記録であり、主に以前に遭遇した落とし穴を忘れないようにするためのも...
まずは投稿する前に! 「I Want to Study on My Own!」に改めて感謝します。た...
この記事では、効率を向上させ、時間を節約することを願って、最も効果的な 6 つの方法を紹介します。 ...
1: MySqlをダウンロードする公式サイトのダウンロードアドレス: https://dev.mys...