MySQL レプリケーションの詳細な説明と簡単な例 マスタースレーブレプリケーション技術は、MySQL で広く使用されており、主に 1 つのサーバー上のデータを複数のスレーブサーバーに同期するために使用されています。負荷分散、高可用性、フェイルオーバーの実現、バックアップの提供などに使用できます。 MySQL は、一方向、半同期、非同期レプリケーションなどのさまざまなレプリケーション テクノロジや、データベース レベル、テーブル レベル、データベース間同期などのさまざまなレベルのレプリケーションをサポートしています。この記事では、基本的なマスター スレーブ レプリケーションについて簡単に説明し、例を示します。 1. 複製の基本原理(手順) a. マスターデータベースに記録されたデータ変更のバイナリログ 2. 設定ファイルにコピー項目を追加する # この記事のデモンストレーションは、同じサーバー上のマルチインスタンス環境に基づいており、ポート 3406 がマスター ライブラリとして使用され、ポート 3506 がスレーブ ライブラリとして使用されます。 # マルチインスタンス展開の詳細については、以下を参照してください。 # MySQL マルチインスタンス構成 (I) http://blog.csdn.net/leshami/article/details/40339167 # MySQL マルチインスタンス構成 (パート 2) http://blog.csdn.net/leshami/article/details/40339295 # 3406 と 3506 は両方とも新しくインストールされ、デフォルトのライブラリが含まれているため、この記事では、プライマリ ライブラリからスタンバイ ライブラリにデータを移行する手順と、プライマリ ライブラリ上の構成ファイルは説明しません。# my3406.cnf の詳細 [mysqld] ソケット = /tmp/mysql3406.sock ポート = 3406 pid ファイル = /data/inst3406/data3406/my3406.pid ユーザー = mysql ログエラー=/data/inst3406/data3406/inst3406.err データディレクトリ=/data/inst3406/data3406 ベースディレクトリ=/app/soft/mysql5 #### マスターアイテムの場合 #### サーバーID=3406 log_bin=/data/inst3406/log/bin/inst3406bin innodb_flush_log_at_trx_commit=1 同期バイナリログ=1 b. ライブラリの設定ファイルから# more my3506.cnf [mysqld] socket = /tmp/mysql3506.sock # 作者: Leshami port = 3506 # ブログ: <a target="_blank" href="http://blog.csdn.net/leshamipid-file" rel="external nofollow" >http://blog.csdn.net/leshami pid ファイル = /data/inst3506/data3506/my3506.pid ユーザー = mysql ログエラー=/data/inst3506/data3506/inst3506.err データディレクトリ=/data/inst3506/data3506 ベースディレクトリ=/app/soft/mysql5 #### スレーブアイテムの場合 #### サーバーID=3506 リレーログ=/data/inst3506/log/リレー/リレー-bin 読み取り専用=1 3. コピーアカウントを作成する #ポート3406でインスタンスを起動し、アカウント[mysql@app ~]を追加します$ mysqld_safe --defaults-file=/data/inst3406/data3406/my3406.cnf & [mysql@app ~]$ mysql -P3406 #3406にログイン master@localhost[(none)]> 'server_id'のような変数を表示します。 +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | サーバーID | 3406 | +---------------+-------+ #レプリケーション用のアカウントを作成します。master@localhost[(none)]> grant replication slave,replication client on *.* -> 'repl' で識別される repl@'192.168.1.177' へ; #メインデータベースのログファイルを初期化し、ビルド環境ではリセットを慎重に使用してください master@localhost[(なし)]> マスターをリセットします。 クエリは正常、影響を受けた行は 0 行 (0.01 秒) #メインデータベースのステータスを確認し、ログを 000001 に初期化します。 master@localhost[(none)]> マスターステータスを表示、位置は120 +--------------------+----------+--------------+------------------+-------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +--------------------+----------+--------------+------------------+-------------------+ | inst3406bin.000001 | 120 | | | | +--------------------+----------+--------------+------------------+-------------------+ 4. マスタースレーブ同期を構成する #ポート3506でインスタンスを起動します [mysql@app ~]$ mysqld_safe --defaults-file=/data/inst3506/data3506/my3506.cnf & [mysql@app ~]$ msyql -P3506 slave@localhost[(none)]> 'server_id'のような変数を表示します。 +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | サーバー ID | 3506 | +---------------+-------+ セット内の 1 行 (0.00 秒) #スレーブ データベースのマスター データベースを指す関連構成情報を追加します。このコマンドは、スタンバイ データベースの master.info ファイルと relay-log.info ファイルを生成して変更します。slave@localhost[(none)]> CHANGE MASTER TO MASTER_HOST='192.168.1.177', -> MASTER_USER='repl'、 -> MASTER_PASSWORD='repl', -> マスターポート=3406、 -> MASTER_LOG_FILE='inst3406bin.000001'、 -> MASTER_LOG_POS=0; クエリは正常、影響を受けた行は 0 行、警告は 2 個 (0.04 秒) #2つの警告が表示されました。slave@localhost[(none)]> show warnings を確認してください \G ************************** 1. 行 **************************** レベル: メモ コード: 1759 メッセージ: SSL/TLS を使用せずにプレーンテキストでパスワードを送信することは、非常に安全ではありません。 ************************** 2. 行 **************************** レベル: メモ コード: 1760 メッセージ: MySQL ユーザー名またはパスワード情報を master.info リポジトリに保存することは安全ではないため、推奨されません。 この問題と可能な代替案の詳細については、MySQL マニュアルを参照してください。 セット内の 2 行 (0.00 秒) #この時点でスレーブのステータス情報を確認します。slave@localhost[(none)]> show slave status \G ************************** 1. 行 **************************** スレーブ_IO_状態: マスターホスト: 192.168.1.177 マスターユーザー: repl マスターポート: 3406 接続再試行: 60 マスターログファイル: inst3406bin.000001 読み取りマスターログ位置: 4 リレーログファイル: リレーbin.000001 リレーログ位置: 4 リレーマスターログファイル: inst3406bin.000001 Slave_IO_Running: いいえ #IO スレッドは実行されていません Slave_SQL_Running: いいえ #SQL スレッドは実行されていません...................... マスター情報ファイル: /data/inst3506/data3506/master.info slave@localhost[(none)]> start slave; #スレーブを起動 クエリは正常、影響を受けた行は 0 行 (0.01 秒) #意味は以下のとおりです。thread_typeオプションなしのSTART SLAVEは両方のスレーブスレッドを開始します。I/Oスレッドは読み取ります。 マスターサーバーからイベントを読み取り、リレーログに保存します。SQLスレッドは、 リレーログを出力して実行します。 # スレーブのステータスを再度確認します robin@localhost[(none)]> show slave status\G ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.1.177 マスターユーザー: repl マスターポート: 3406 接続再試行: 60 マスターログファイル: inst3406bin.000001 読み取りマスターログ位置: 120 リレーログファイル: リレーbin.000002 リレーログ位置: 285 リレーマスターログファイル: inst3406bin.000001 Slave_IO_Running: はい #IO スレッドは実行状態です Slave_SQL_Running: はい #SQL スレッドは実行状態です............. 実行マスターログ位置: 120 リレーログスペース: 452 ............ マスターサーバー ID: 3406 マスター_UUID: 32f53a0a-63ef-11e4-93d9-8c89a5d108ae マスター情報ファイル: /data/inst3506/data3506/master.info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレー ログを読み取りました。スレーブ I/O スレッドがそれを更新するのを待機しています。#重要なプロンプト情報#スレーブ ライブラリには 2 つのスレッドがあります。1 つは I/O スレッド用で、マスター ライブラリに接続してマスター ライブラリに binlog の送信を要求するために使用されます。もう 1 つは SQL を実行するための SQL スレッドです。 スレーブ@localhost[(なし)]> プロセスリストを表示\G ************************** 1. 行 **************************** 識別子: 4 ユーザー: システムユーザー ホスト: デシベル: NULL コマンド: 接続 時間: 510993 状態: マスターがイベントを送信するのを待機中 情報: NULL ************************** 2. 行 **************************** 識別子: 5 ユーザー: システムユーザー ホスト: デシベル: NULL コマンド: 接続 時間: 333943 状態: スレーブはすべてのリレーログを読み取りました。スレーブ I/O スレッドがそれを更新するのを待機しています。 情報: NULL 5. 同期を確認する #次に、マスター データベースでいくつかの操作を実行して、スレーブ データベースの同期ステータスを確認します。master@localhost[(none)]> show variables like 'server_id'; +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | サーバーID | 3406 | +---------------+-------+ セット内の 1 行 (0.00 秒) #マスターデータベースの Binlog Dump スレッドは、binlog ログファイルをスレーブデータベースに送信するために使用されます。次のクエリは、master@localhost[(none)]> show processlist\G です。 ************************** 1. 行 **************************** 識別子: 12 ユーザー: repl ホスト: 192.168.1.177:57440 デシベル: NULL コマンド: Binlog ダンプ 時間: 511342 状態: マスターはすべてのバイナリログをスレーブに送信しました。バイナリログが更新されるのを待機しています。 情報: NULL # メインライブラリにデータベースとテーブルを作成します。master@localhost[(none)]> create database tempdb; クエリは正常、1 行が影響を受けました (0.01 秒) master@localhost[(なし)]> tempdbを使用する データベースが変更されました master@localhost[tempdb]> information_schema.enginesからselect *としてテーブルtb_enginesを作成します。 クエリは正常、9 行が影響を受けました (0.02 秒) 記録: 9 重複: 0 警告: 0 #以下はスレーブライブラリから確認した結果です。slave@localhost[(none)]> select count(*) from tempdb.tb_engines; +----------+ | カウント(*) | +----------+ | 9 | +----------+ 読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: vue3.0 でカルーセル コンポーネントをカプセル化する手順
>>: Linuxでブーストライブラリをインストールするための完全な手順
目次Vue の keep-alive 組み込みコンポーネントの使用でもこのアルゴリズムが使用されます...
要件は次のとおりです。ドメイン名の下に複数のサーバーがあります。現在、特定の地域をテストしています。...
何人かの学生は、マスターとスレーブの間の不一致の問題に遭遇したと述べました。一般的な状況としては、m...
目次Docker-Maven-プラグインMavenプラグインの自動デプロイメント手順1. ホストマシ...
成果を達成する実装コードhtml <ヘッダー> <h1><em>...
目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...
MySQL には次のログ ファイルがあります。 1: 再実行ログ2: ロールバックログ(元に戻すログ...
ナビゲーション バー、固定トップ ナビゲーション バー、およびセカンダリ メニューの実装効果図の実装...
前回の記事では、docker サービスをインストールしました。引き続き、Web プロジェクトのデプロ...
コンセプト紹介: 1. px (ピクセル):仮想的な長さの単位で、コンピュータ システムのデジタル画...
この記事では、2番目のキルカウントダウンコンポーネントを実装するためのVueの具体的なコードを参考ま...
目次現在の問題解決プロセス具体的な手順解決した事件現在の問題MySQL コマンド プロンプトに複数行...
mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理...
js のイベント ループJavaScript はシングルスレッドなので、同じイベントで実行できるメソ...
Bステーションでパスワードを入力するときに目を覆っているこの画像を見たことがある人もいると思いますこ...