5

2 台のマシンに 2 つの mysql データベースがあります。最初が本番データベースで、2 番目が同一のクローンであるとしましょう。私のphpアプリは、デフォルトで本番データベースを使用しています。しかし、両方のデータベースを同時に同一にする必要があります。これは、実稼働データベースが利用できない場合 (接続エラーなど) の解決策が必要であることを意味するため、2 つ目のデータベースを手動で設定するだけで、アプリは通常どおり実行されます。「故障しにくい」にしたい。

どうすればいいですか?毎分ダンプを作成することを考えていますが、データベースが多くのデータで複雑な場合、それは良い解決策ではありません...

4

1 に答える 1

1

これらの回答は、何らかの理由で、標準のレプリケーションがオプションではないことを前提としています。

bash次のオプションは、よく知られている手動データ同期の既存の方法であり、必要に応じて特定のテーブルを指定するロジックを使用して、必要に応じて cronjob などのスクリプト言語にラップするときに組み合わせるとよいでしょう。安全であることを保証します。プロダクションボックスで負荷などを考慮して実行します。

オプション 1: pt-table-sync

pt-table-syncPercona MySQL ツールキットのツールを使用すると、既存のレプリケーション スキームでオンデマンドでマスター - マスター、マスター - スレーブの同期を行うことができます。または、関係のない 2 つのサーバーを同期するために使用できます。

Percona のドキュメントはこちら

例に従って、一方向の同期を行います。

pt-table-sync --execute h=sourcehost1,u=msandbox,p=msandbox h=desthost d=yourdb t=yourtables

さらに、次の機能が存在します。

  1. ドライラン モード (--dry-run) - プログラムは接続し、同期を計画し、競合を分析し、同期を解決する方法を通知します。これは、この強力なツールを正しく使用するための鍵です。
  2. 競合分析 - データがどのように比較されるかを確認します。これをスクリプトにフィードバックして潜在的な問題を検出するか、違いがない場合は時間を節約するために同期を実行しないでください。

私が理解しているように、マスターとスレーブの関係は必ずしも存在する必要はありませんが、データの比較により効率的なチェックサムアルゴリズムを使用できるため、存在する場合は同期がより効率的になります。

オプション 2: XtraDb を使用したホット/ストリーミング バックアップ または、ホスト モードで無料の Percona XtraBackup などを使用streamingして、バックアップ ファイルを同期させ、必要に応じて開発ボックスに復元することもできます。

XtraBackup は、Percona Server、MySQL、MariaDB、および Drizzle のすべてのバージョンの MySQL ホット バックアップを作成します。ストリーミング、圧縮、および増分の MySQL バックアップを実行します。

オプション C: LVM スナップショット LVM スナップショットは、短時間のロック/IO の問題により、何らかの頻度で取得する必要がある場合、実稼働ボックスにはおそらく最適なオプションではありませんが、それでもここでは、LVM スナップショットを使用した MySQL バックアップを説明します。

これらのツールはすべて、一方向または双方向でデータを移動します。そのため、データの損失を防ぐには、ツールの使用方法を完全に理解することが重要です。

于 2013-08-11T22:17:31.557 に答える