MySQL双方向バックアップの実装方法

MySQL双方向バックアップの実装方法

MySQL 双方向バックアップはマスター-マスター バックアップとも呼ばれ、両方の MySQL サービスがマスターであり、いずれかのサービスが他のサービスのスレーブです。

準備する

サーバ

MySQL サーバーバージョンIPアドレス
マスターA 5.6.41 192.168.1.201
マスターB 5.6.41 192.168.1.202

注意: 異なるバージョンではバイナリ ログ形式に互換性がない可能性があるため、バックアップされた MySQL サーバーのバージョンは一貫性を保つ必要があります。

特定の操作

知らせ

操作中は両側のデータの一貫性に注意してください。 ! !

マスターA構成

マイ.cnf

[mysqld]
# サーバーの一意の識別子 server-id=1
# バイナリログファイル名 log-bin=mysql-bin

# バックアップが必要なデータベース。複数のデータベースは binlog-do-db=piumnl で区切られます。
# 複製が必要なデータベース。複数のデータベースは、replicate-do-db=piumnl で区切られます。
# リレーログファイル名 relay_log=mysqld-relay-bin
# 突然のダウンタイムによるデータログの非同期化を回避するために、同期サービスを手動で開始します skip-slave-start=ON
# 相互マスタースレーブの場合は、この行を追加する必要があります log-slave-updates=ON
# セキュリティリスクを防ぐためにシンボリックリンクを無効にします。symbolic-links=0 を追加する必要はありません。

# オプション# 解決 - [警告] スレーブ SQL: クラッシュが発生した場合、この構成ではリレー ログ情報の一貫性が保証されません。Error_code: 0
マスター情報リポジトリ = テーブル
リレーログ情報リポジトリ=テーブル
リレーログリカバリ=1

#オプション# DNS解決を無効にすると、認証時に使用されたドメイン名が無効になります skip-host-cache
名前解決をスキップ

sql_mode=NO_ENGINE_SUBSTITUTION、STRICT_TRANS_TABLES

マスターB構成

マイ.cnf

# 各設定項目の説明は不要になりました [mysqld]
サーバーID=2
ログ bin = mysql bin

binlog-do-db=piumnl
複製するDB=piumnl
リレーログ=mysqlリレービン
スレーブ開始をスキップ=ON
ログスレーブ更新=ON
シンボリックリンク=0

# 解決 - [警告] スレーブ SQL: クラッシュが発生した場合、この構成ではリレー ログ情報の一貫性が保証されません。Error_code: 0
マスター情報リポジトリ = テーブル
リレーログ情報リポジトリ=テーブル
リレーログリカバリ=1

ホストキャッシュをスキップする
名前解決をスキップ

sql_mode=NO_ENGINE_SUBSTITUTION、STRICT_TRANS_TABLES

バックアップユーザーを作成する

masterA と masterB の両方でバックアップ ユーザーを作成する必要があります。

create user 'rep'@'%' identified by 'rep'; # アカウントを作成します grant replication slave on *.* to 'rep'@'%'; # アカウントに任意のデータベースの任意のテーブルに対するマスタースレーブバックアップ権限を付与します

述べる:

  1. Linux の MySQL では、root@% ユーザーの grant_priv 権限が無効になっているため、リモートでログインすると認証が失敗します。
  2. ここでのバックアップ ユーザー アカウントとパスワードは一致していなくてもかまいません。操作を簡素化するために、ここでは同じアカウントとパスワードを使用します。

サーバーを再起動します

サーバーを再起動します

バックアップを有効にする

マスターA

マスターBのステータスを確認する

マスターステータスを表示\G;
# ここではファイルと位置の値に注意する必要があります

バックアップを有効にする

奴隷を停止します。

# master_log_file は、最初のステップ操作の File 値です。 # master_log_pos は、最初のステップ操作の位置値です。master を、master_host=<master_hostname>、master_user=<rep_username>、master_port=<master_port>、master_password=<rep_password>、master_log_file='mysql-log.000003'、master_log_pos=154 に変更します。
スレーブを起動します。

結果を見る

スレーブステータスを表示\G;
# 最も重要な 2 つの項目をチェックします。両方とも Yes である必要があります。1 つが No の場合は、エラー ログ ファイルをチェックして問題がどこにあるかを確認します。# Slave_IO_Running: Yes
# スレーブSQL実行中: はい

マスターB

マスターAの操作を逆に繰り返す

テスト

データをそれぞれ masterA と masterB に挿入し、他のサーバーに期待どおりのデータが時間内に存在するかどうかを確認します。

質問

MySQL スレーブがリレー ログを開けませんでした

これはリレーログの問題であるはずです。次の操作を試してください。

奴隷を停止します。
ログをフラッシュする。
スレーブを起動します。

バイナリ ログからデータを読み取っているときにマスターから致命的なエラー 1236 が発生しました

メイン データベースからログを取得したときに、メイン データベースの mysql_bin.index ファイルの最初のファイルが存在しないことが判明しました。

# リセットするには次の操作を実行します # バイナリ ログまたはリレー ログに他の機能がある場合は、次の操作を実行しないでください マスターをリセットします。
スレーブをリセットします。
ログをフラッシュする。

<データベース>.<テーブル>

挿入、更新、削除操作に <database>.<table> を使用すると、バックアップされません (これは大きな落とし穴です)。 ! !

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

以下もご興味があるかもしれません:
  • Windows で MySQL 双方向同期バックアップを実装する方法

<<:  ネイティブ JavaScript でシンプルな Gobang ゲームを実装する

>>:  docker-composeの詳細なインストールと使用方法

推薦する

Linux tac コマンドの実装例

1. コマンドの紹介tac (cat の逆順) コマンドは、ファイルの内容を行単位で逆順に出力します...

この記事ではCSSの組み合わせセレクターの使い方を説明します

CSS 組み合わせセレクターには、単純なセレクターのさまざまな組み合わせが含まれます。 CSS3 に...

Docker クリーニングの一般的な方法と問題点

大規模な開発に Docker を使用する場合でも、クリーンアップ戦略がなければ、ディスクがすぐにいっ...

ネイティブ JS 音楽プレーヤー

この記事の例では、音楽プレーヤーを実装するためのJSの具体的なコードを参考までに共有しています。具体...

HTML 選択タグにリンクを追加する 3 つの方法

最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...

JavaScript における継承の 3 つの方法

継承する1. 継承とは何か継承: まず、継承とは関係、つまりクラス間の関係です。JS にはクラスはあ...

MySQLデータベース移行におけるデータ文字化けの問題を解決する

リーダーの指示のもと、Java プロジェクトを引き継ぎ、リファクタリングを行う必要がありました。同時...

ログインと登録機能を実現するjs

この記事の例では、ログインと登録機能を実装するためのjsの具体的なコードを参考までに共有しています。...

Node.js を使用してパスワード ジェネレータを作成するための完全な手順

目次1. 準備2. コマンドラインの記述2.1 バージョンと説明を追加する2.2 パスワードの長さを...

MySQLへのJava接続の基礎となるカプセル化の詳細な説明

この記事では、Java接続MySQLの基礎となるカプセル化コードを参考までに紹介します。具体的な内容...

HTMLで細い線のテーブルを作成する簡単な例

この細線の表を作成する方法については、Baidu で検索すると、表に対して border="...

CentOS 7 での Docker プロキシの設定 (Linux での Systemd サービスの環境変数設定)

Docker デーモンは、 HTTP_PROXY 、 HTTPS_PROXY 、およびNO_PRO...

MySQL トランザクション分離はどのように実現されますか?

目次同時シナリオ書き込む読む読む読み取り-書き込みと書き込み-読み取りMySQL のロック行レベルロ...

Vueモバイル端末に最適な適応ソリューションについての簡単な説明

序文: 最近の医療モバイル プロジェクトに基づいて、Vue はさまざまな画面のさまざまな画面サイズに...

JavaScript配列についてさらに詳しく知るのに役立つ記事

目次1. 配列の役割: 2. 配列の定義: 1. コンストラクタを通じて配列を作成する2. リテラル...