0

2つのデータベースがあります。1つは開発システム用で、もう1つは生産システム用です。

両方のシステム間の構造変化を検出することは可能ですか?(データなし、構造の変更のみを検出する必要があります)

現時点では、テーブルストアドプロシージャの構造変更をすべて含むテキストファイルを更新しています。たとえば、デプロイシェルスクリプトでこれを自動的に実行したいと思います。

以下は、この問題を解決するための試みです。問題は、実行できる完全なSQLステートメントを取得できないことです。

mysqldump --skip-comments --no-data --routines --host=sql.test.de --user=root --password=123 bim_stage > /home/deploybackups/stagestructure.sql 
mysqldump --skip-comments --no-data --routines --host=sql.test.de --user=root --password=123 bim_dev > /home/deploybackups/devstructure.sql

diff /home/deploybackups/stagestructure.sql /home/deploybackups/devstructure.sql > /home/deploybackups/diffstructure.sql
4

3 に答える 3

1

SQLyogなどのMySQLGUIツールを使用して、簡単に実行できます。SQlyogのスキーマ同期ウィザードは、必要なことを実行できます。つまり、構造の変更をチェックして同期することができます。添付のスクリーンショットを参照してください。

スキーマ同期SQLyog

于 2012-09-14T14:18:45.707 に答える
1

いくつかのテキストまたはGUI比較ツールでほとんどの問題を修正できると確信しています。ただし、フォーマットが変更されたり、誰かがあなたの基準に従わなかったりするたびに、すべてが変わったように見えます。どこかで、空白のカウントなどの奇妙なエラーを修正していることに気付くでしょう。

私が得ているのは、私の経験では、これがこれを行うための完全に最良の方法ではないということです。何年にもわたって、この更新の問題を解決する方法について、いくつかの異なる試みを見てきました。

  • Visual Studioは、すべての変更をある種のバージョンログに保持するデータベースプロジェクトを作成することにより、これに1つの角度を持っています。詳細については完全にはわかりません。Syncとtadaを押すだけです!それは動作しますが、私に言わせれば非常に包括的で遅いです。

このIMOを処理する最も簡単な方法は、すべての構造上の変更をバージョンログ/テーブルに加えることです。いわば。

基本データベースに新しいテーブルが必要だとします。エディターに移動して(GUIまたはコードを使用して)追加し、[保存]を押すと完了です。

代わりに、ExtractSQLを押します。保存を押さないでください。

私が今提案しているのはこれです:

大きな入力ボックスと送信ボタンを備えた小さな内部Webインターフェイスを構築します。送信ボタンを押すと、ローカル開発データベースに対して入力ボックスからSQLが実行され、結果が返されます。

DBが成功を返すと、SQL文字列がchangeLogSQLVersionThingyTableに少なくとも3つの列で追加されます。

1)自動インクリメントバージョン(整数)2)SQL(テキスト)3)タイムスタンプ(timedate)4)開発者ID ??

以前のテーブルの追加など、DBに変更を加えた場合は、代わりにこのツールを使用してください。

これで、データベースに対するすべての変更が適切なバージョンリストに追加されました。データベースを更新するには、changeLogSQLVersionThingyTableのすべての行を、その特定のデータベースが最後に更新されたバージョンから実行するだけです。

少し努力すれば、データベースを以前の時点に再構築することもできます。新しいデータベースを作成し、目的のバージョンポイントまですべての行を実行するだけです。

于 2012-09-14T14:34:02.100 に答える
1

それが実際に壊れているプロセスであるときに、あなたは技術的な解決策を作ろうとしています。ステージング、QA、および開発にまったく同じSQLを適用するように手配せずに、本番環境に元の変更を加えたのは誰ですか?

そうは言っても、「通常の」サイズのデータ​​ベースがあり、これらの変更が「まれに」発生する場合は、diffメソッドを使用して変更が行われたことを確認します。変更に影響を与えるSQLスクリプトを手動で作成することは難しくありません。しかし、私はまだ変更を加えた人に嫌がらせをします。

diffには、空白/空白行の変更を無視するオプションがあることに注意してください。

完了したら、新しいスキーマをソースコードリポジトリにチェックインします。いつか重宝します。

于 2012-09-14T16:00:57.970 に答える