2

フォールト トレラントな MySQL レプリケーションを取得する方法はありますか? 私は、多くのネットワークの問題がある環境にいます。レプリケーションでエラーが発生し、停止したようです。動作を継続し、これらの障害から回復するために必要です。レプリケーションの状態をチェックし、ログの位置が失われた場合に再起動するラッパー ソフトウェアがいくつかあります。代替手段はありますか?

注: レプリケーションは、MySQL 4.1 を搭載した組み込みコンピューターから MySQL 5.0.45 を搭載した外部コンピューターに行われます。

4

4 に答える 4

2

レプリケーション エラーが発生するのは、データベースが何らかの形で同期しなくなった場合のみです。サーバーを単純に続行すると、データベースの一貫性が失われます。

私の経験では、このようなエラーが発生するのは、マスター サーバーの 1 つがクエリを完了せず、スレーブがそれに気付いた場合のみです。

いずれにせよ、何らかの cron ジョブを介してスレーブを継続させたい場合は、常に数分ごとにクエリを実行してスレーブに問い合わせることができSHOW SLAVE STATUSますSTOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER; START SLAVE;. しかし、代わりに mysql でエラーが発生したときに管理者に電子メールを送信する方がおそらくはるかに適切です。そうすれば、管理者は問題の原因を調査し、データベースが実際に同期していることを確認できます。データベースがますます同期しなくなるにつれて、近い将来、より多くのエラーが発生します。

于 2009-06-08T12:28:13.310 に答える
2

どのようなエラーが発生していますか? また、使用しているレプリケーション スキームや Mysql のバージョンについても説明していません。あなたが得ているエラーも重要です。

レプリケーションは通常、マスターとマスターのレプリケーションでプライマリ キーと一意のキーの競合が発生すると停止します。典型的なマスター/スレーブ レプリケーション セットアップ以外では、ネットワークの問題によって問題が発生することはありません。

5.0 でのレプリケーションはステートメントベースであり、Master-Master セットアップで問題を引き起こすため、またはストアド プロシージャを使用している場合は、Mysql 5.1 以降を使用してみてください。

(また、Mysql Cluster から離れてください... 別のコメントのアドバイスに気づきました)。

于 2009-06-08T06:37:18.057 に答える
1

通常、MySQL レプリケーションは問題を検出して再接続し、中断したところから続行します。

レプリケーション エラーが発生する場合は、ソースが別のものである可能性があります。MySQL レプリケーションは、クエリ ログに対して "tail -f" を効果的に実行し、それをスレーブで再生します (それよりも少しスマートですが、それほどではありません)。

データベースが同期しなくなった場合、MySQL レプリケーションはこれを検出も修復もしませんが、スレーブ上の競合するデータのために後続の更新を続行できないため、最終的には破損する可能性があります。

レプリケーション スレーブのデフォルトのタイムアウトは長すぎます。数時間 (または何か) 待機します。これを減らす必要があります。

データが同期しなくなることを回避することは困難です。軽減手順は次のとおりです。

  • Maatkit の mk-table-checksum などを使用してレプリケーションを監視する
  • レプリケーションで安全でないクエリのすべてのコードを監査する
  • 5.1 を使用している場合は、この問題が発生しにくい行ベースのレプリケーションに切り替えます。
于 2009-06-08T06:46:58.757 に答える