MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要

MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要

MySQL フルバックアップ

1. バイナリログを有効にし、データベースから分離して別々に保存する

 vim /etc/my.cnf

に追加

log_bin=/data/bin/mysql-bin

/data/binフォルダを作成し、承認する

chown mysql.mysql /data/bin

2. バックアップデータベースを完了する

mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz

3. データベースの追加、削除、変更

 INSERT hellodb.students(生徒名、名前、性別、年齢) VALUE(27,'Lujunyi','M',30);

4. MySQLを停止する

 systemctl mariadb.service を停止します

5. バックアップファイルを解凍する

unxz /data/all.sql.xz

6. フルバックアップ中にバイナリログの場所を見つける

vim /data/all.sql 
  マスターを MASTER_LOG_FILE='mysql-bin.000001'、MASTER_LOG_POS=468 にハングアップします

7. バックアップが完了したらバイナリログをエクスポートします。

mysqlbinlog --start-position=468 /data/bin/mysql-bin.000001 > /data/inc.sql

8. データを復元する

mysql -e 'ソース /data/all.sql'
mysql -e 'ソース /data/inc.sql'

9. 検証が完了しました。

誤って削除した場合の回復

1. バイナリログを有効にし、データベースとは別に保存する

vim /etc/my.cnf

に追加

 log_bin=/data/bin/mysql-bin

/data/binフォルダを作成し、承認する

 chown mysql.mysql /data/bin

2. データベースの完全バックアップを実行する

mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz

3. データベースの追加、削除、変更

mysql -e "hellodb.students テーブルを削除します"
  mysql -e "hellodb.teachers 値 (5,'wangqi',50,'M') を挿入"

4. サービスを停止する

 systemctl mariadb.service を停止します

5. データベースを削除する

rm -rf /var/lib/mysql/*

6. バックアップファイルを解凍する

unxz /data/all.sql.xz

7. バックアップファイルを表示し、バイナリノードを見つける

 vim /data/all.sql
   -- MASTER を MASTER_LOG_FILE='mysql-bin.000004'、MASTER_LOG_POS=521902 に変更します。

8. バイナリログノードデータをエクスポートする

mysqlbinlog --start-position=521902 /data/bin/mysql-bin.000004 >/data/inc.sql

9. バイナリログノードデータでエラーの原因となったコマンドを削除します。

 vim /data/inc.sql
  DROP TABLE `hellodb`.`students` /* サーバーによって生成されました */

10. サービスを開始する

systemctl mariadb.service を開始します。

11. バイナリログをオフにする

mysql -e "SET sql_log_bin=off"

12. バックアップデータをインポートする

 mysql </data/all.sql 
 mysql </data/inc.sql 

13.検証が完了しました。

マスタースレーブレプリケーション

# プライマリサーバー

1. マスターサーバーでバイナリログを有効にし、バイナリディレクトリを変更する

 vim /etc/my.cnf
  log_bin=/data/bin/mysql-bin
  binlog 形式 = 行
  server-id=1 (マスターサーバーとスレーブサーバーは異なる必要があります)

上記のようにディレクトリを変更します

2. サービスを再起動する

サービスmysqlの再起動

3. データをコピーするためのアカウントを作成する

mysql -e '"centos" によって識別される "repluser"@"172.22.7.%" に *.* のレプリケーション スレーブを許可します

4. マスターサーバーで使用されているバイナリログを表示する

 マスターログを表示します。
  +------------------+-----------+
  | ログ名 | ファイルサイズ |
  +------------------+-----------+
  |mysql-bin.000001 | 14383 |
  +------------------+-----------+
  セット内の 1 行 (0.00 秒)

# サーバーから

5. その他の設定

 vim /etc/my.cnf
  サーバーID=2
  読み取り専用
  #log-bin=/data/bin/mysql-bin

6. サービスを開始する

サービスmysqlの再起動

7. メインサービスを関連付ける

 MariaDB [(なし)]>
 マスターを MASTER_HOST='172.22.7.70'、MASTER_USER='repluser'、MASTER_PASSWORD='centos'、MASTER_PORT=3306、MASTER_LOG_FILE='mysql-bin.000001'、MASTER_LOG_POS=14383 に変更します。

8. スレーブサーバーのステータスを確認する

スレーブステータスを表示\G;

9. スレッドを開始する

スレーブを起動します。

#テスト

10. マスター サーバー上のデータを追加、削除、変更し、スレーブ サーバー上のデータが同期されているかどうかを確認します。

マスタースレーブレプリケーションエラーの解決策 - sql_slave_skip_counter

#マスターサービス IP=172.22.7.70

1. マスターサーバーでバイナリログを有効にし、バイナリディレクトリを変更する

 vim /etc/my.cnf
  log_bin=/data/bin/mysql-bin
  binlog 形式 = 行
  server-id=1 (マスターサーバーとスレーブサーバーは異なる必要があります)

上記のようにディレクトリを変更します

2. サービスを再起動する

サービスmysqlの再起動

3. データをコピーするためのアカウントを作成する

mysql -e '"centos" によって識別される "repluser"@"172.22.7.%" に *.* のレプリケーション スレーブを許可します

4. マスターサーバーで使用されているバイナリログを表示する

 mysql -e 'マスターログを表示;'
  +------------------+-----------+
  | ログ名 | ファイルサイズ |
  +------------------+-----------+
  |mysql-bin.000001 | 264 |
  |mysql-bin.000002 | 245 |
  +------------------+-----------+

#スレーブサービス IP=172.22.7.71

5. 設定ファイルを変更してサービスを開始する

 vim /etc/my.cnf
  [mysqld]
  サーバーID = 2
  読み取り専用
 systemctl で mariadb を起動します。

#構成エラー マスター サービス情報

6. 設定、マスターを

 マスターを変更 
 MASTER_HOST='172.22.7.77', 
 MASTER_USER='ワン',  
 MASTER_PASSWORD='lodman',
 マスターポート=3306、 
 MASTER_LOG_FILE=log-bin.001', 
 マスターログPOS=4、 
 MASTER_CONNECT_RETRY=10;

7. スレーブステータスを確認する

 mysql -e 'スレーブステータスを表示\G'
  スレーブ_IO_状態: 
    マスターホスト: 172.22.7.77
    マスターユーザー: wang
    マスターポート: 3306
   接続再試行: 10
   マスターログファイル: log-bin.001
  読み取りマスターログ位置: 4
   リレーログファイル: ct7m1-relay-bin.000001
   リレーログ位置: 4
 リレーマスターログファイル: log-bin.001
   スレーブIO実行中: いいえ
  スレーブSQL実行中: いいえ

       ・・・・・・・・・わずかに

8. コピースレッドを開始する

mysql -e 'スレーブを起動'

9.スレーブの状態を再度確認する

 mysql -e 'スレーブステータスを表示\G'
  スレーブ_IO_状態: 
    マスターホスト: 172.22.7.77
    マスターユーザー: wang
    マスターポート: 3306
   接続再試行: 10
   マスターログファイル: log-bin.001
  読み取りマスターログ位置: 4
   リレーログファイル: ct7m1-relay-bin.000001
   リレーログ位置: 4
 リレーマスターログファイル: log-bin.001
   Slave_IO_Running: 接続中
  スレーブSQL実行中: はい

       ・・・・・・・・・わずかに

10.マスターサービスがデータを追加、削除、変更する

11. スレーブ サービスが同期されているかどうかを確認します。失敗しました。

#エラーを解決する

12. スレーブレプリケーションスレッドサービスを停止してリセットする

 mysql -e 'スレーブを停止'
 mysql -e 'スレーブをリセット'

13. 正しい変更マスターを情報に設定する

 マスターをMASTER_HOST='172.22.7.70'に変更します。
 MASTER_USER='repluser',
 MASTER_PASSWORD='centos',
 マスターポート=3306、
 MASTER_LOG_FILE='mysql-bin.000002',
 マスターログPOS = 245;

14.スレーブステータスを確認する

スレーブステータスを表示\G;
   Slave_IO_State: マスターがイベントを送信するのを待機中
    マスターホスト: 172.22.7.70
    マスターユーザー: repluser
    マスターポート: 3306
   接続再試行: 10
   マスターログファイル:mysql-bin.000002
  読み取りマスターログ位置: 7382
   リレーログファイル: ct7m1-relay-bin.000002
   リレーログ位置: 540
 リレーマスターログファイル: mysql-bin.000002
   スレーブIO実行中: はい
  スレーブSQL実行中: いいえ

15. スレーブステータスに Slave_SQL_Running: No が見つかりました。次のコマンドを実行して YES に変更します。

 MariaDB [(なし)]> スレーブを停止します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MariaDB [(なし)]> GLOBAL SQL_SLAVE_SKIP_COUNTER=1 を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MariaDB [(なし)]> スレーブを起動します。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

MariaDB [(なし)]> スレーブステータスを表示します\G;
************************** 1. 行 ****************************
   Slave_IO_State: マスターがイベントを送信するのを待機中
    マスターホスト: 172.22.7.70
    マスターユーザー: repluser
    マスターポート: 3306
    接続再試行: 10
   マスターログファイル:mysql-bin.000002
  読み取りマスターログ位置: 7382
   リレーログファイル: ct7m1-relay-bin.000003
    リレーログ位置: 540
  リレーマスターログファイル: mysql-bin.000002
   スレーブIO実行中: はい
   スレーブSQL実行中: はい
        ・・・・・・・・・わずかに

16.スレーブサービスデータが同期されているかどうかを確認する

17. 同期が完了しました。

MySQL カスケードレプリケーション

実稼働環境では、マスター ノードが最初にデータを中間スレーブ ノードに同期し、次にスレーブ ノードがデータを後続のスレーブ ノードにコピーするマスター スレーブ レプリケーション方式が採用されています。このレプリケーション方式は、カスケード レプリケーションと呼ばれます。

カスケード レプリケーションの利点は、プライマリ ノードへの負荷を大幅に軽減できることです。

カスケード レプリケーションでは、構成時に中間ノードで log_slave_updates オプションを有効にする必要があります。

#環境 サーバー マスター スレーブ スレーブ
 システム centos7 centos7 centos7
 172.22.7.70 172.22.7.70 172.22.7.71

#マター

1. マスターサーバーでバイナリログを有効にし、バイナリディレクトリを変更する

 vim /etc/my.cnf
  log_bin=/data/bin/mysql-bin
  binlog 形式 = 行
  server-id=1 (マスターサーバーとスレーブサーバーは異なる必要があります)

上記のようにディレクトリを変更します

2. サービスを再起動する

サービスmysqlの再起動

3. データをコピーするためのアカウントを作成する

mysql -e '"centos" によって識別される "repluser"@"172.22.7.%" に *.* のレプリケーション スレーブを許可します

4. マスターサーバーで使用されているバイナリログを表示する

 mysql -e 'マスターログを表示;'
  +------------------+-----------+
  | ログ名 | ファイルサイズ |
  +------------------+-----------+
  |mysql-bin.000001 | 264 |
  |mysql-bin.000002 | 7488 |
  | mysql-bin.000003 | 402 |
  +------------------+-----------+

 
#奴隷

5. 設定ファイルを変更し、バイナリログディレクトリを作成する

 vim /etc/my.cnf
  [mysqld]
  ログ bin = /data/bin/mysql-bin
  binlog 形式 = 行
  読み取り専用
  ログスレーブ更新
  サーバーID=2

ディレクトリの変更は上記を参照

6. サービスを開始する

 systemctl で mariadb を再起動します。

7. 変更マスターを情報に設定する

 マスターを MASTER_HOST='172.22.7.70'、MASTER_USER='repluser'、MASTER_PASSWORD='centos'、MASTER_PORT=3306、MASTER_LOG_FILE='mysql-bin.000003'、MASTER_LOG_POS=402 に変更します。

8. スレーブスレッドを開始する

 mysql -e 'スレーブを起動'

9. スレーブステータスを確認する

 スレーブステータスを表示\G;
 ************************** 1. 行 ****************************
   Slave_IO_State: マスターがイベントを送信するのを待機中
    マスターホスト: 172.22.7.70
    マスターユーザー: repluser
    マスターポート: 3306
   接続再試行: 60
   マスターログファイル: mysql-bin.000003
  読み取りマスターログ位置: 7539
   リレーログファイル: ct7m1-relay-bin.000002
   リレーログ位置: 7677
 リレーマスターログファイル: mysql-bin.000003
   スレーブIO実行中: はい
  スレーブSQL実行中: はい
   レプリケート_Do_DB:

10. マスター上のデータを追加、削除、変更してテストし、表示する

#奴隷1

11.スレーブ上のデータをスレーブにコピーする

 mysqldump -A --single-transaction -F --master-data=1 > /data/all.sql
 scp /data/all.sql 172.22.7.72:/data

12. スレーブはデータをコピーするためのアカウントを作成する

 mysql -e '"centos" によって識別される "repluser"@"172.22.7.%" に *.* のレプリケーション スレーブを許可します

13. スレーブ1の設定を変更する

 vim /etc/my.cnf
  [mysqld]
  読み取り専用
  サーバーID=3

14. サービスを開始する

 systemctl で mariadb を起動します。

15. スレーブサーバーのバイナリログを表示する

 mysql -e 'マスターログを表示'
  +------------------+-----------+
  | ログ名 | ファイルサイズ |
  +------------------+-----------+
  |mysql-bin.000001 | 351 |
  |mysql-bin.000002 | 351 |
  |mysql-bin.000003 | 351 |
  |mysql-bin.000004 | 25552 |
  |mysql-bin.000005 | 586 |
  +------------------+-----------+

16. all.sqlファイルを開き、変更マスターの情報を変更します。

 マスターを MASTER_HOST='172.22.7.71'、MASTER_USER='repluser'、MASTER _PASSWORD='centos'、MASTER_PORT=3306、MASTER_LOG_FILE='mysql-bin.000005'、MASTER_LOG_POS=586 に変更します。  

17. スレーブデータのインポート

mysql < /data/all.sql

18. スレッドを開始する

 mysql -e "スレーブを開始"

19. スレーブステータスを確認する

mysql -e "スレーブステータスを表示\G;"

20. マスターオブジェクトを追加、削除、変更して同期されているかどうかを確認します。

21. 同期が完了しました。

MySQL 半同期

非同期レプリケーションとは、ユーザーがレコードを書き込むときに、データが最初にマスターノードに書き込まれ、次に書き込み成功メッセージがユーザーに返信され、その後データが後ろの他のスレーブノードにゆっくりとコピーされることを意味します。これの利点は、効率が比較的高いことですが、欠点も非常に明白です。マスターサーバーとスレーブサーバー間の遅延が大きすぎると、マスターサーバーが突然故障し、データ損失が発生します。

同期レプリケーションとは、ユーザーがレコードを書き込むと、マスター ノードがデータをデータベースに書き込み、そのデータを背後にある他のスレーブ ノードにコピーすることを意味します。すべてのスレーブ ノードがデータが正常にコピーされたというメッセージを返すと、マスター ノードはデータが正常にアクセスされたことをユーザーに応答します。この方法の利点は、データのセキュリティが確保されることですが、効率性が犠牲になります。

半同期レプリケーションは、同期レプリケーションと非同期レプリケーションの中間のレプリケーション方法です。その動作原理は次のとおりです。ユーザーが書き込み操作を実行すると、マスターノードはデータを背後にある他のスレーブノードに送信します。1 つのスレーブノードがレプリケーション成功のメッセージを返す限り、マスターノードは直接書き込み成功を返します。マスターノードの背後にあるスレーブノードがレプリケーション成功メッセージを返さない場合は、タイムアウト期間が発生します。タイムアウト期間に達すると、マスターノードはまずレプリケーションが成功したことをユーザーに通知するメッセージを返し、その後、スレーブノードへのデータのレプリケーションを続行します。

#マスタースレーブレプリケーションを構成します。手順については上記を参照してください。

#半同期の設定

##マスター

1. プラグインを有効にするために設定ファイルを変更する

 vim /etc/my.cnf
  [mysqld]
  ログ bin = /data/bin/mariadb-bin
  binlog 形式 = 行
  サーバーID=1
  rpl_semi_sync_master_enabled 

2. サービスを再起動します。

 systemctl で mariadb を再起動します。

3. プラグインが起動しているかどうかを確認する

 '%semi%' のようなグローバル変数を表示します。
  +------------------------------------+-------+
  | 変数名 | 値 |
  +------------------------------------+-------+
  | rpl_semi_sync_master_enabled | オン |
  | rpl_semi_sync_master_timeout | 3000 |
  | rpl_semi_sync_master_trace_level | 32 |
  | rpl_semi_sync_master_wait_no_slave | オン |
  +------------------------------------+-------+
  セット内の 4 行 (0.00 秒)

4. タイムアウト期間を設定する

 グローバル rpl_semi_sync_master_timeout=3000 を設定します。
 クエリは正常、影響を受けた行は 0 行 (0.00 秒)

##奴隷

5. プラグインを有効にするために設定ファイルを変更する

 vim /etc/my.cnf
  [mysqld]
  ログ bin = /data/bin/mariadb-bin
  binlog 形式 = 行
  サーバーID=2
  rpl_semi_sync_master_enabled

6. サービスを再起動します。

systemctl で mariadb を再起動します。

7. プラグインが起動しているかどうかを確認する

 '%semi%' のようなグローバル変数を表示します。
  +------------------------------------+--------------+
  | 変数名 | 値 |
  +------------------------------------+--------------+
  | rpl_semi_sync_master_enabled | オン |
  | rpl_semi_sync_master_timeout | 1000 |
  | rpl_semi_sync_master_trace_level | 32 |
  | rpl_semi_sync_master_wait_no_slave | オン |
  | rpl_semi_sync_master_wait_point | AFTER_COMMIT |
  +------------------------------------+--------------+
  セット内の行数は 5 です (0.00 秒)

8. コピースレッドを開始する

mysql -e "スレーブを開始";

9. テストと検査

10. 同期が完了しました

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL 半同期レプリケーションの原理構成と導入の詳細な説明
  • MySQL の準同期レプリケーションについての簡単な説明
  • MySQL の半同期レプリケーションの原理とトラブルシューティング
  • 半同期および非同期のMySQLマスタースレーブレプリケーション構成の詳細な分析
  • MySQLの半同期の詳細な説明

<<:  VMware に Centos8 をインストールする詳細なチュートリアル

>>:  登録ページを実装するためのJS、CSS、HTML

推薦する

ReactのuseEffectクロージャの落とし穴についての簡単な説明

問題コードuseEffectによって発生したクロージャの問題コードを見てみましょう 定数 btn =...

Idea で Tomcat のソースコードデバッグを開始し、デバッグのために Tomcat に入る方法

idea 開発ツールを使用してコードをデバッグする場合、Java Web プロジェクトで、Web コ...

レスポンシブレイアウトの概要(推奨)

レスポンシブレイアウト開発の基礎知識この章は主に以下の部分に分かれています• レスポンシブデザインを...

vue3 統合 API における vue2 の $refs の代替方法についての簡単な説明

vue2 プロジェクト開発の経験があれば、$refs に精通しているでしょう。 vue3 の急激なア...

Zabbix redis 自動ポート検出スクリプトは json 形式を返します

自動検出を行う際には、ポートなどの情報を取得してjson形式で返すスクリプトが必ず存在します。Red...

クロスオリジン画像リソース権限(CORS 対応画像)

HTML 仕様書では、画像の crossorigin 属性が導入されています。適切なヘッダー情報 ...

MySQL における識別子の大文字と小文字の区別の問題の詳細な分析

MySQL では、テーブル名の大文字と小文字の区別の問題が発生する可能性があります。実際、これはプラ...

MySQL をクリーンにアンインストールする方法 (テスト済みで効果的)

Mysql を完全にアンインストールするにはどうすればいいですか?以下の手順に従って実行してくださ...

Vueのフロントエンドシステムとフロントエンドとバックエンドの分離の詳細な説明

目次概要フロントエンド知識システムフロントエンドの3つの要素プレゼンテーション層 (CSS)動作レイ...

HTMLページが3秒後に自動的にジャンプする3つの一般的な方法

実際には、N 秒後にページを自動的にジャンプさせるにはどうすればよいかという問題によく遭遇します。私...

Docker を使用してコンテナ内のルート パスワードを変更する方法

1. dockerfileを作成するときにsshパスワードを設定するには、次のコマンドを使用します。...

シンプルなフロントエンドのページング効果を実現する js

比較的シンプルな業務のプロジェクトもありますが、フロントエンドのページングを多用します。プラグインの...

mysql 5.7.20 win64 のインストールと設定方法

mysql-5.7.20-winx64.zipインストール手順のないインストール パッケージ: ht...

アルバムと写真をアルバムに保存するためのWeChatアプレット

私は現在、Xiao Nian Gao に似たビデオおよびツール アプリを開発しています。ユーザーが作...

Hyper-V インストール CentOS 8 の問題の分析

CentOS 8 がリリースされてから随分経ちました。Linux 仮想マシンをいじっている人間として...