2017-07-17 8 views
0

私は2つのデータベースを持っています。全く同じ構造であり、ほぼすべてが重複したデータです。データベース2に移動する必要のあるデータベース1のレコードを更新しました。今度は、重複したレコードを取得せずに、すべての新しいデータをdatabase1からdatabase2に簡単にプッシュする方法はありますか?データベースの正確なコピーにデータを挿入

注データを更新したテーブルの数がわかりません。

EDIT:データのない「修正」行は、オプションの大きな広がりを持っているデータ

+1

既存のテーブルを切り捨て、すべてをプッシュしますか? – CollinD

+0

"新しいデータ"を定義します。既存の行の変更はカウントされますか? –

+0

あなたはマージを試みましたか? – maSTAShuFu

答えて

0

のちょうど「新しい」行はありません。

あなたのテーブルのプライマリキーの値が更新を必要としない場合、私はREPLACE INTOを示唆するかもしれません:

mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00'); 
Query OK, 1 row affected (0.04 sec) 

mysql> SELECT * FROM test; 
+----+------+---------------------+ 
| id | data | ts     | 
+----+------+---------------------+ 
| 1 | Old | 2014-08-20 18:47:00 | 
+----+------+---------------------+ 
1 row in set (0.00 sec)  

そして:

mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42'); 
Query OK, 2 rows affected (0.04 sec) 

mysql> SELECT * FROM test; 
+----+------+---------------------+ 
| id | data | ts     | 
+----+------+---------------------+ 
| 1 | New | 2014-08-20 18:47:42 | 
+----+------+---------------------+ 
1 row in set (0.00 sec) 

# (Example Straight from the MySQL AB) 

あなたはTRANSACTIONにその全体の動作をラップすることができます。それが更新するために、主キーが一致する候補行が見つからない場合は、まだREPLACE INTOますちょうどINSERT INTOとしてこれを使用することができます。 OP編集後

。このストリーミングのmysqldumpを行うに

、あなたはできます

mysqldump --replace --no-create-info database1 | mysql database2 

それともINSERT ... ON DUPLICATE IGNORE単純あなたが実際に行を更新する必要はありませんので、:

mysqldump --insert-ignore --no-create-info database1 | mysql database2 
+0

彼はmssqlを使用しています – maSTAShuFu

0

MicrosoftのWebサイトから: https://docs.microsoft.com/en-us/sql/relational-databases/replication/types-of-replication

Microsoft SQL Serverは、分散アプリケーションで使用する次のタイプのレプリケーションを提供します。

  • トランザクションレプリケーション。詳細については、トランザクション のレプリケーションを参照してください。
  • マージレプリケーション。詳細については、「マージレプリケーション」を参照してください。
  • スナップショットレプリケーション。詳細については、スナップショット
    レプリケーションを参照してください。

アプリケーションに選択するレプリケーションのタイプは、物理レプリケーション環境、レプリケートするデータの種類と量、およびデータがサブスクライバで更新されるかどうかなど、多くの要素によって異なります。物理環境には、複製に関与するコンピュータの数と場所、およびこれらのコンピュータがクライアント(ワークステーション、ラップトップ、またはハンドヘルドデバイス)またはサーバーであるかどうかが含まれます。

各タイプの複製は、通常、パブリッシャとサブスクライバ間のパブリッシュされたオブジェクトの初期同期から開始されます。この初期同期は、パブリケーションで指定されたすべてのオブジェクトとデータのコピーであるスナップショットを使用したレプリケーションによって実行できます。スナップショットが作成されると、スナップショットはサブスクライバに配信されます。一部のアプリケーションでは、スナップショットレプリケーションがすべて必要です。他のタイプのアプリケーションでは、後続のデータ変更が、時間の経過と共に徐々に加入者に流れることが重要です。一部のアプリケーションでは、変更がサブスクライバからパブリッシャに戻る必要があります。トランザクションレプリケーションとマージレプリケーションは、これらの種類のアプリケーションのオプションを提供します。

スナップショットレプリケーションのデータ変更は追跡されません。スナップショットが適用されるたびに、既存のデータが完全に上書きされます。トランザクションレプリケーションは、SQL Serverのトランザクションログを通じて変更を追跡し、レプリケーションをマージすると、トリガーおよびメタデータテーブルを介して変更を追跡します。

いくつかのチュートリアル:https://docs.microsoft.com/en-us/sql/relational-databases/replication/replication-tutorials

関連する問題