1. データベースのマスター/スレーブ分類:マスタースレーブには、従来のマスタースレーブ/GTIDマスタースレーブの2種類があります。 2. MySQLマスタースレーブ導入の起源現実世界では、データは極めて重要です。データベースを保存する方法はたくさんありますが、データベースには隠れた危険が潜んでいます。 データベースを使用してデータを保存する場合、データベースサーバーがクラッシュするとデータが失われます。データが多すぎてアクセス数が多い場合は、1 つのサーバーではサービスの品質を保証できません。 そこで、マスタースレーブデータベースが誕生した。 3. マスタースレーブ機能フェイルオーバー、読み取りと書き込みの分離を実現、クエリサービスデータベース管理システムバックアップ(DBSM)を提供、ビジネスへの影響を回避 4. マスタースレーブ複製の原理
5. マスタースレーブレプリケーション構成(データが整合している場合)ステップ:
環境要件: 2 つの MySQL サーバー、1 つのマスター サーバー (書き込み機能) と 1 つのスレーブ サーバー (読み取り機能) メインデータベース(centos8) IPアドレス:192.168.136.145 centos8.0/mysql5.7 同じデータ 5.1 マスターサーバーとスレーブサーバーにそれぞれmysql5.7をインストールする関連するチュートリアルチュートリアル(非常に詳細)をご覧いただけます: https://www.jb51.net/article/221946.htm #バイナリインストール: https://blog.csdn.net/qq_47945825/article/details/116848970?spm=1001.2014.3001.5501 #またはネットワークリポジトリからインストールします: (通常はバイナリインストール) https://blog.csdn.net/qq_47945825/article/details/116245442?spm=1001.2014.3001.5501 5.2 マスターデータベースのデータはスレーブデータベースのデータと一致している[root@mysql01 ~]# mysql -uroot -e 'データベースを表示;' +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ [root@mysql02 ~]# mysql -uroot -e 'データベースを表示;' +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ 5.3 マスターデータベースに同期アカウントを作成し、スレーブデータベースでの使用を許可する
mysql> 'vvv'@'192.168.136.191' を作成し、'vvv0917' で識別します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> *.* のレプリケーションスレーブを 'vvv'@'192.168.136.191' に付与します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> 権限をフラッシュします。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) 5.4 スレーブでの接続をテストする[root@mysql02 ~]# mysql -uvvv -vvv0917 -h192.168.136.145 mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | +--------------------+ セット内の 1 行 (0.00 秒) 5.5 マスターデータベースを構成する[root@mysql01 ~]# cat /etc/my.cnf [mysqld] ベースディレクトリ = /usr/local/mysql データディレクトリ = /opt/data ソケット = /tmp/mysql.sock ポート = 3306 pid ファイル = /opt/data/mysql.pid ユーザー = mysql 名前解決をスキップ log-bin=mysql_bin #binlog を開始 log server-id=10 #データベース サーバーの一意の識別子。ID はスレーブ データベースより小さくする必要があります #サービスを再起動します (この再起動方法では、mysqld.service ファイルが設定されている必要があります) [root@mysql01 ~]# systemctl mysqldを再起動します プライマリ データベースのステータスを確認します。 mysql> マスターステータスを表示します。 +------------------+----------+--------------+------------------+------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+------------------+ | mysql_bin.000004 | 962 | | | | +------------------+----------+--------------+------------------+--- 5.6 スレーブデータベースを構成する[root@mysql02 ~]# cat /etc/my.cnf [mysqld] ベースディレクトリ = /usr/local/mysql データディレクトリ = /opt/data ソケット = /tmp/mysql.sock ポート = 3307 ユーザー = mysql pid ファイル = /opt/data/mysql.pid 名前解決をスキップ #許可テーブルをスキップする server-id=20 #サーバーID、プライマリデータベースIDより大きい relay-log=mysql_relay_log #リレーログを開始 #log-bin=mysql-bin #サービスを再起動します: [root@mysql02 ~]# systemctl mysqldを再起動します 5.7 マスタースレーブレプリケーション機能の設定と起動(mysql02スレーブデータベース)[root@slave02 ~]# mysql -uroot -p mysql>マスターを次のように変更します -> マスターホスト='192.168.136.145', -> マスターユーザー='vvv', -> マスターパスワード = 'vvv0917', -> マスターログファイル='mysql_bin.000004'、 -> マスターログ位置 = 962; クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.01 秒) mysql> start slave; #stop slave を実行してシャットダウンします クエリは正常です。0 行が影響を受けました (0.01 秒) #構成ステータスを表示します。 mysql> スレーブステータスを表示します\G; Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.136.145 マスターユーザー: vvv マスターポート: 3306 接続再試行: 60 マスターログファイル: mysql_bin.000004 読み取りマスターログ位置: 962 リレーログファイル: mysql_relay_log.000002 リレーログ位置: 320 リレーマスターログファイル: mysql_bin.000004 スレーブIO実行中: はい スレーブSQL実行中: はい #ここでは両方ともyesである必要があります。これは構成が成功したことを意味し、そうでない場合は失敗します 5.8 テスト:メインライブラリ:mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ ライブラリから:mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ メインライブラリはデータベース clq を作成し、データを追加します。mysql> データベース clq を作成します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> テーブル clq01(id int(11)not null primary key auto_increment,name varchar(100)not null,age tinyint(4)); を作成します。 mysql> clq01(名前、年齢) の値 ('A'、20)、('B'、21)、('C'、22) を挿入します。 クエリは正常、3 行が影響を受けました (0.00 秒) ギャラリーからの眺め:mysql> clq01 から * を選択します。 +----+------+------+s | ID | 名前 | 年齢 | +----+------+------s+ | 1 | A | 20 | | 2 | B | 21 | | 3 | C | 22 | +----+------+------+ #マスタースレーブレプリケーションが完了しました! 6. マスタースレーブ構成(データが不一致の場合)6.1 一般的に、完全にバックアップされたマスターデータベースでは、データベースに読み取りロックを追加するために別のターミナルを開く必要があります(読み取り専用、書き込み不可)他の人がデータを書き込むことで生じる差異を回避する 読み取りロック付きのテーブルをフラッシュする: quit: 終了してロックを解除します (バックアップ完了後にロックを解除します) 6.2 マスターデータベースのデータがスレーブデータベースのデータと同じであることを確認する#まずメインデータベースを準備します [root@mysql01 ~]# mysqldump -uroot -A > all-databases.sql #スレーブデータベースにデータをコピーします [root@mysql01 ~]# ls /clq すべてのデータベース.sql [root@mysql01 ~]# scp /clq/all-databases.sql [email protected]:/clq/ ホスト「192.168.136.193 (192.168.136.193)」の信頼性を確立できません。 ECDSA キーのフィンガープリントは SHA256:XIAQEoJ+M0vOHmCwQvhUdw12u5s2nvkN0A4TMKLaFiY です。 本当に接続を続行しますか (はい/いいえ/[指紋])はい [email protected]のパスワード: すべてのデータベース.sql 100% 853KB 115.4MB/秒 00:00 [root@mysql02 clq]# ll 合計使用量 896 #データベースから表示 -rw-r--r--。 1 ルート ルート 873266 5月17日 19:36 all-databases.sql 6.3 一貫性を保つために、スレーブライブラリ上のマスターライブラリにあるライブラリを確認する[root@mysql02 clq]# mysql -uroot -pHuawei0917@ < all-databases.sql mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 [root@mysql02 clq]# mysql -uroot -pHuawei0917@ -e 'データベースを表示;' mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | | クリック | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ メインライブラリ: mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | | クリック | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ 6.4 2つのライブラリの設定ファイルが対応するファイルで設定されていることを確認する[root@mysql01 ~]# cat /etc/my.cnf [mysqld] ベースディレクトリ = /usr/local/mysql データディレクトリ = /opt/data ソケット = /tmp/mysql.sock ポート = 3306 pid ファイル = /opt/data/mysql.pid ユーザー = mysql 名前解決をスキップ log-bin=mysql_bin #ログファイル server-id=10 #サービスIDの一意の識別子 [root@mysql02 ~]# cat /etc/my.cnf [mysqld] ベースディレクトリ = /usr/local/mysql データディレクトリ = /opt/data ソケット = /tmp/mysql.sock ポート = 3307 ユーザー = mysql pid ファイル = /opt/data/mysql.pid 名前解決をスキップ #許可テーブルをスキップする server-id=20 #サービスIDを一意に識別します(メインデータベースより大きい) relay-log=mysql_relay_log #リレーログ#log-bin=mysql-bin この後の手順は 5.5 以降とまったく同じです。 まとめ: マスター データベースがデータを変更すると、スレーブ データベースのデータもそれに応じて変更されます。 データベースで実行されているコマンドプロセスを表示する mysql> プロセスリストを表示します。 +----+------+------------------------+------+------------+------+---------------------------------------------------------------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+------+------------------------+------+------------+------+---------------------------------------------------------------+------------------+ | 5 | repl | 192.168.136.219:39788 | NULL | バイナリログダンプ | 1575 | マスターはすべてのバイナリログをスレーブに送信しました。さらに更新を待機しています | NULL | | 7 | root | localhost | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | +----+------+------------------------+------+------------+------+---------------------------------------------------------------+------------------+ セット内の 2 行 (0.00 秒) 上記は、MySQL データベースのマスタースレーブレプリケーションの原理と機能の詳細な分析です。MySQL データベースのマスタースレーブレプリケーションの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: docker compose を使用して FastDfs ファイル サーバーをインストールする詳細な例
データの初期化 `test_01` が存在する場合はテーブルを削除します。 テーブル「test_01...
目次TypeScript環境の構築ステップ1: Taobaoミラーをダウンロードするステップ2: T...
1. コマンド方式作成された Swarm クラスターで nginx サービスを実行し、--repli...
1. QTからJSへのデータフロー1. QTはJS関数を呼び出し、JSはパラメータを通じてQTの値を...
IE8.0の正式版をインストールしたので、基本的なCSS HACKをいくつかまとめてみました。We...
1. 背景最近、独立した開発者がUIデザインを行うのを支援するために、uideaというWebサイト...
1. 基本環境1. オペレーティングシステム: CentOS 7.3 2. MySQL: 8.0.1...
この記事は「Attribution 4.0 International (CC BY 4.0)」ライ...
1. 約束の説明Promise は、非同期操作の最終状態 (失敗または正常完了) とその結果の値を...
1. テーブルとパーティションを分割する必要があるのはなぜですか?日常の開発では、大きなテーブルに遭...
目次導入js のイテレータはどのように見えるか反復プロトコル反復可能なプロトコルイテレータプロトコル...
<br />ブログを始めて 1 年、私はブログの内外で多くのことを個人的に学びました。ま...
背景このバグは滾動條占據空間ことで発生していました。いくつかの情報を確認して、ようやく解決しました。...
この記事ではMySQL 5.7.16のインストールと設定方法を記録します。具体的な内容は以下のとおり...
以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...