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 ファイル サーバーをインストールする詳細な例
目次前面に書かれた要件分析 v1アイデア1: インターセプションメソッドを使用して入力ボックスの入力...
オブジェクトの hasOwnProperty() メソッドは、オブジェクトに特定の独自の (継承され...
1. 問題の出現フラット リストを作成しました。リストの一部には、マウスをホバーすると表示されるポッ...
MySQL には、msi インストールと zip 解凍の 2 つのインストール方法があります。 zi...
1. ファイルの権限と所有権の概要1. アクセス権Read r: ファイルの内容を表示し、ディレクト...
<!--[if IE 6]> IE6 のみが認識可能 <![endif]-->...
ドロップダウン付きのテキストボックスを使用すると、ユーザーはドロップダウン リストから入力を選択した...
Linux システム管理者にとって、サービスがポートに正しくバインドされているか、またはポートをリッ...
目次序文プロトタイプチェーン継承コンストラクタの継承組み合わせ継承(プロトタイプチェーン継承とコンス...
1. Apache 静的リソースのクロスドメイン アクセスApache設定ファイルhttpd.con...
目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...
背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...
コードは次のようになります。 <!DOCTYPE html> <html> ...
最近、電子アーカイブに取り組んでおり、バックエンドではファイルの Huawei Cloud OSS ...
この記事では、Baidu News Navigation Barの効果を実現するための具体的なJSコ...