MySQL - MySQL マスター/スレーブ レプリケーション リストに新しいデータベースを追加する方法の詳細な紹介
MySQL マスター/スレーブ レプリケーション 通常、同期する必要があるデータベースをセットアップします。オプションの binlog-do-db は、マスターで同期する必要があるデータベースを指定し、replicate-do-db でデータの観点から同期する必要があるデータベースを指定します。 (通常、マスターの binlog-do-db のみが設定され、両方を同時に設定する必要はありません。念のため、スレーブに replicate-ignore-db を追加することもできます)。
今日、私が遭遇した問題は、新しいデータベースがマスターに追加されたということです。新しく追加されたデータベースを MySQL のマスター/スレーブ レプリケーション チェーンに追加するにはどうすればよいですか? (つまり、ライブラリ全体を再レプリケーションせずにマスター/スレーブ レプリケーションをリセットします)。
まず、マスター/スレーブ レプリケーションの基本的な手順を列挙しましょう (まず、MySQL マスター/スレーブをそれぞれのサーバーで構成する必要があります)。
mysqldump --master-data --single-transaction -R --databases [db_name] | gzip -9 - | pv > all-db-with-master-data.sql.gz
注: innodb は –single-transaction を使用し、myisam は –lock-all-tables を使用する必要があります。
pv < all-db-with-master-data.sql.gz | zcat | mysql
slave start
注: メインに切り替えるステートメントは、エクスポートされた SQL ステートメントに既に含まれています。注意深く確認してください。マスターを master_log_file=’(relay_master_log_file の binlog 名)’、master_log_pos=(exec_master_log_pos 番号) に変更します。
それでは、既存のマスター/スレーブ レプリケーション構造に新しいデータベースを追加するにはどうすればよいでしょうか?たとえば、マスター サーバーにデータベース (例: newdb という名前のデータベース) を追加するとします。具体的な操作は以下の通りです:
stop slave;
mysqldump --master-data --single-transaction -R --databases newdb > newdb.sql
メインサーバーで、my.cnf ファイルを変更し、新しいライブラリを binlog-do-db パラメーターに追加し、mysql を再起動します。
エクスポートされた newdb.sql で現在のログ ファイルと場所を見つけます (マスターを... に変更します)
次に、スレーブ サーバーをこの場所で実行します。
start slave until MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=1222220;
ここで、MASTER_LOG_FILE と MASTER_LOG_POS は、エクスポートされたデータベース newdb.sql の先頭にあります。
mysql < newdb.sql
start slave
さらに重要なのは、マスターサーバーに新しいライブラリをエクスポートするときのログの位置 (位置 A) です。この点を境界線として使用してください。新しい図書館。
この方法は、特定のデータベースまたは特定のデータテーブルが同期していない状況にも適用できます。たとえば、マスター/スレーブデータベース内のテーブルに何らかの理由でデータの不整合がある場合、上記の方法は削除するだけで済みます。データベースを再起動する手順、その他の操作は基本的にすべて同じです
以上がMySQL - MySQL マスター/スレーブ レプリケーション リストに新しいデータベースを追加する方法の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。