2

約30,000行のMySQLデータベースがあります。このデータベースを毎晩リモートサーバーに更新しますが、一度に50行を超えて更新されることはありません。データベースを更新するのは私だけです。CHANGED行のみをリモートサーバーにエクスポートする方法を開発したいと思います。

データベースのスペースを節約し、リモートサーバーにエクスポートする時間を節約するために、更新されなくなり、ローカルデータベースに存在しないレコードを使用して(リモートサーバー上に)「アーカイブ」テーブルを作成しました。しかし、このデータを複数のテーブルに分割することは悪い設計であり、テーブルの構造を変更する必要がある場合に問題が発生する可能性があることを私は知っています。

したがって、データベースを再構築して、同様のテーブル構造を持つすべてのレコードが1つのテーブルに含まれるようにします(データベースがはるかに小さい場合のように)。結果のテーブルのサイズ(すべてのアーカイブレコードを含む)は80,000行を超え、データベースパッケージ全体にエクスポートするには非常に大きくなります。

これを行うには、(1)行が追加または変更されたときに各行の「最終更新」タイムスタンプを更新します(2)「最終更新」タイムスタンプがタイムスタンプより大きい場合にエクスポートするテーブルの行のみを選択します最後のエクスポート操作の例(3)新しい行と更新された行のみを含むエクスポート.sqlファイルを作成するクエリを記述します(4)次のエクスポート中に比較に使用されるエクスポート操作のタイムスタンプを更新します

誰かがこれをしたことがありますか?もしそうなら、私はこれを達成する方法についてのいくつかのガイダンスに感謝します。

スティーブ

4

2 に答える 2

2

timestampたとえば、データ型の列を追加すると、行が変更されるたびlast_updated timestampに自動的に更新されます。now()

その後、毎日早めに、昨日の変更を送信するだけです。

select * from mytable
where last_updated between subdate(CURDATE(), 1) and CURDATE()
于 2013-01-02T03:34:58.563 に答える
0

リモートサーバーをレプリケーションスレーブとしてセットアップしないのはなぜですか?MySQLは、その状況でのみ更新された行を送信し、その時点で非常に迅速かつ効率的に送信します。

一般に、独自の複製戦略を使用するのではなく、公式の複製戦略を使用することをお勧めします。作業する例がたくさんあり、問題が発生した場合に何が起こっているのかを理解している人もたくさんいます。

于 2013-01-02T02:58:31.800 に答える