MySQLサーバーから先月の値を抽出し、それらの値から新しいデータベースを構築することは可能ですか?


8

開発仮想マシンテンプレートを作成する割り当てがあります。

新しい開発者が製品ごとに開発できるように、会社の製品ごとにMySQLデータベースをサーバーに追加する必要があります。

ほとんどのデータベースは1GB未満です。

しかし、巨大なデータベース(160G前後)がいくつかありますが、作成しようとしているテンプレートのサイズには制限があり、そこに160GBのDBを追加することは妥当ではありません。

したがって、この巨大なデータベースから先月の値を抽出してサーバーに追加する適切な方法を見つけようとしているので、開発者はこのデータベースでの作業を「感じる」ことができます。

そのようなことを行うことは可能ですか?それはどのように行われますか?ありがとう!

編集:

残念ながら、すべての開発データベースを保持する別のメインDBサーバーのオプションはありません。また、データを定期的に更新する必要はありません。本番サーバーと同じデータを(ランダムな期間で)提示するだけです。新しい開発者のためのサンドボックス環境。

回答:


8

私が正しく理解していれば、開発環境ごとに個別のDBコピーを作成することを計画しています。

これは小さなデータベースでは実現可能かもしれませんが、大きなDBではうまく機能しません。したがって、環境ごとに個別のDBをセットアップする正当な理由がない限り、開発データベースの単一のコピーを用意し、それを使用するようにすべての開発環境を設定することを検討することをお勧めします。

このアプローチにより、定期的に最新のデータで開発DBを更新することができ、誰かがそれを台無しにした場合は、もう一度更新することができます。

また、開発者が新しいテーブルの作成を必要とするいくつかの新しいプロジェクトに取り組み始める状況を想像してください。開発用DBのコピーが1つしかない場合、あなた(または開発者)はこれらのテーブルを作成し、テストデータを1回だけ入力する必要があります。ここで、開発者が初期のテーブル構造が最適ではなく、変更する必要があることに気付いたとします。繰り返しになりますが、これは、おそらく数十の環境ではなく、単一のDBで行う必要があります。

これは、何度も何度も大きなプロジェクトで使用されていると私が見たアプローチであり、ほとんどの場合、それはかなりうまくいきます。


2
私が働いている店では、すべての開発者が独自のデータベースのコピーを持っているので、他の人がつま先を踏むことはありません。これは非常にうまくいきました。データベースを最初から再構築し、開発に必要なテストデータを入力するスクリプトがあります。単一のデータベースは、いくつかのデータベース領域で作業している人々が他の人々のためにそれを壊すという問題を抱えていることがよくあります。そして、大きなdbが復元されている間、誰もが停止します。したがって、単一のデータベースを持つことは優れたソリューションではありません。(TBHもそうではありません。状況によって
異なり

同意した。好奇心から、DBのサイズはどれくらいですか?これが160GBのDBでどのように機能するかわかりません。
grekasius 14

もちろん、開発データベースは意図的に小さくなり、開発者が取り組んでいるものをテストするために必要なデータのサブセットのみが含まれます。パフォーマンステストなどの目的で、別の(より大きな)インスタンスが使用されます。
Andrew Savinykh 2014

データを定期的に更新する必要はありません。このテンプレートに一度だけ配置するだけです。
Itai Ganot 2014

現在のDBから小さなサンプルデータセットを作成できるかどうかを確認してください。残念ながら、ここでは簡単な答えはありません。何をする必要があるかは、持っているデータと、その開発用DBにどのデータを入れるかによって異なります。
grekasius

4

これは、データベース内のデータの種類に大きく依存します。場合によっては、

select * from table where date > ....

他の場合では、データの構造のためにこれを分離することは不可能です。結局のところ、それは混合であり、正しく理解するのが非常に難しいでしょう。


2
具体的には、一部のデータベースには、古いエントリ(たとえば、1か月以上)のレコードを参照する新しいエントリ(たとえば、1か月未満)がある場合があります。それらに対処する方法は、これらの参照の設定方法に完全に依存しており、最も基本的なものを除いてすべて実行不可能です。
ボブは

0

最近、お客様がデータベースの過去30日間を抽出したいという状況がありました。すべてのテーブルに同じ属性があり、日時を定義できる場合は、

mysqldump --where = 'datetimefield> "2014-06-28"'

しかし、彼は古いデータと新しいデータで異なるテーブルを混ぜたかったのです。これは彼にとって解決策ではありませんでしたが、あなたのための解決策かもしれませんか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.