web-dev-qa-db-ja.com

マスターをダンプせずにMySQLレプリケーションを再構築するにはどうすればよいですか?

MySQLデータベースはかなり大きくなり、マスターレプリケーションで実行しています。レプリケーションが壊れています。 mysqldumpを実行する際に、最初のマスターをフリーズせずに2番目のマスターを再構築しようとしています。データベースは、ダンプに数時間かかるほどの大きさであり、その間データベースをオフラインにすることはできません。

マスターをダンプせずにMySQLレプリケーションを再構築するにはどうすればよいですか?

6
Chris Edwards

Percona Toolkit を見てください。 pt-table-checksumは、同期していないテーブルを見つけるのに役立ち、pt-table-syncその後。

5
quanta

@quantaの回答に加えて、レプリケーションを比較して修復しようとして運がなかった場合は、 percona xtra-backup ツールに付属のinnobackupexツールを使用して、の高速コピーを作成できます。マスター。スレーブに復元できます。 (実行には時間がかかりますが、mysqldumpよりもはるかに短い時間でテーブルをロックします)

基本的に、innobackupexはinnodbテーブルとmyisamテーブルの両方で機能し、基盤となる実装を利用してエクスポート時間を大幅に改善し、最小限のロック時間で一貫したバックアップを作成します。

サイトのマスターからスレーブを作成するウォークスルーの例があります。 http://www.percona.com/doc/percona-xtrabackup/howtos/setting_up_replication.html

3
Tom H

トムHの提案も素晴らしいです。 Xtraを動作させることができれば、それは非常に素晴らしいことです。この場合、何が最善かわからないので、知っておくと役立ちます。

MySQLのバージョンすべてInnoDB?すべてのMyISAM?または混合? InnoDBの場合、テーブルごとのファイルを使用していますか?どれくらいの大きさですか? (50GB対500GB?)

何らかの理由でXtrabackupが機能しない場合、またはptツールで@quantaのアドバイスが得られない場合は、古い学校に行ってmysqlを停止し、データディレクトリをスレーブにコピーして、それに応じて調整し、replのバックアップを開始する必要があります。あなたが数百GBを扱っていて、ネットワーク経由でコピーを行う必要があり、マルチコア/ CPUがある場合、コピーにpigzを使用することを検討する必要があるかもしれません http://zlib.net/pigz / これは、ダンプファイルORディレクトリをコピーするのに4.5時間かかっていた場所で、2時間に短縮することで役立ちました。

幸運なことに、これがどれほどストレスになるか知っています。

2
sxw123

MysqlパーティションがLVM上にある場合、 mylvmbackup を使用できます。スナップショットを撮り、座標も保存します。 mysqlを再構築する最速の方法は、データディレクトリのバックアップを使用することです。次に、optimizeを実行して最適化できます。

LVMがなく、mysqlサーバーをシャットダウンできる場合。
1。マスターで読み取りロックを実行し、位置を書き留めます。
2。 mysqlをシャットダウンする
3。データディレクトリをターゲットマシンにコピーします。データディレクトリのローカルコピーを作成できます。これは通常、ネットワーク転送よりも高速で、mysqlのダウンタイムを最小限に抑えます。
4。 mysqlを起動
5。ターゲットマシンで、ib_logfileの設定がマスターの設定と同じであることを確認します。そうしないと、mysqlが問題を報告します。

まれにデータのコピーが正常に行われないため、再試行する必要がある場合があります。

1
Sameer

これはmysqlのドキュメントに書かれています-> http://dev.mysql.com/doc/refman/5.5/en/replication-howto-rawdata.html

0
samlabs821