2012-02-09 15 views
2

私はSQL Server 2008のテーブルとMySQLテーブルを同期しようとしています。私はすでにSQL ServerからMySQLにテーブルを転送しましたが、実行するたびに自動的にテーブルを更新する(変更をチェックし、新しいラインを挿入し、存在しないテーブルを削除する)PHPコードが必要です。誰か助けてくれますか?SQL ServerとMySQLの一方向の同期

+0

サードパーティのツールではなくPHPコードを主張していますか? –

+0

スキーマを変更できますか? – iWantSimpleLife

+0

どこ? SQL Serverデータベースでは? – Jaro

答えて

1

ETLツールを使用するのに使用できるかもしれません。 SQL Server用に設計されたものはSSISです。あなたが望むデータを持ち込むのを助けるためにこれを使うことは可能かもしれませんが、以前はMySQLのために使ったことはありません。このポスト[http://blogs.msdn.com/b/mattm/archive/2008/03/03/connecting-to-mysql-from-ssis.aspx]によれば、実際に可能である。

あなたを助けるかもしれないもう一つの柱は: http://www.packtpub.com/article/mysql-data-transfer-using-sql-server-integration-services-ssis

Unfortuantly前回の記事では、MySQLからあなたが望む方向ではないSQL Serverにそれを説明しています。それを他の方法で動作させることは可能かもしれませんが、MySQL用のETLツールを探す必要があります。 Googleの検索ではhttp://www.benetl.net/と表示されましたが、私は頭の上から気付いていませんが、私はそれを保証することはできません。

+0

これは良い解決策でしたが、SQL Server ExpressはSSISをサポートしていないようです – Jaro

+0

ああ、私はあなたがExpressを使用していたことを認識しませんでした。それはちょっと残念です。 MS SQL ServerとMySQLサーバーの両方に接続できる言語(JavaまたはC#)がある場合は、手動で各行を移動できますが、各テーブルの関数を記述する必要があります。それは最も良い解決策ではありませんが、うまくいくはずです。 (C#はMSからはっきりとMSSQLに接続でき、MySQLの場合はhttp://bitdaddys.com/MySQL-ConnectorNet.html) – joshhendo

1

私はここにPHPがないと思います。

  • DTSパッケージ
  • リンクサーバー
  • トリガ+同期キュー表
  • さまざまなサードパーティ製のETLツール
    • SSIS:

      次のようなさまざまな意思決定を使用することができます。 ..

  • +0

    PHPは同期にはあまり適していないと思っています – Jaro

    2

    これは良いアイデアだと私は完全に確信していませんが、これは短時間前に同様の要件があったため、これがいくつかのユースケース(最後の段落を参照)で必要かもしれないことを理解しています。

    これは非常によく働いた:

    を送信側では(それはあなたのケースのSQLサーバでは、何であるかに関係なく)

    • ID(PK)を有するテーブル '変更履歴' を作成し、テーブル名、 tablepk、アクション操作は
    • に成功した後、データ
    • のためのテキストフィールドがあなたのコードが送信側
    • 012に変更履歴テーブルの内容を送信している変更履歴テーブルに変更を書き込む関連するテーブルにトリガを作成
    • これが成功した場合は、変更履歴テーブルから削除してください(マインド:競合状況の可能性があります!受信側では)

    (それはあなたのケースのMySQLには、何であるかに関係なく)

    • が、この場合には変更履歴データ
    • はそれをデータベース
    • に対する
    • 実行の変化を解析受け取ります作品は、謝辞を送信

    このスキームは、2ホスト間でHTTPだけを "話す"ことができます - 接続が失われたり、受信側の再起動が行われたりすると、送信側の変更ログテーブルに変更がバッファされ、接続が再確立されるときれいになります。

    +0

    すべての答えを見る私はこれをPHPを使ってよく分かりません。ありがとうございました。しかし、私はジョシェンドが投稿したリンクを使用すると思います – Jaro

    1

    すべてのテーブルにタイムスタンプ列があり、挿入または更新するたびに、影響を受ける各行のタイムスタンプ値を更新することをお勧めします。次に、タイムスタンプが宛先データベースにあるものよりも新しいかどうかをチェックするすべてのテーブルについて繰り返します。それが新しい場合は、挿入または更新する必要があるかどうかを確認します。 観測1:行がソースdbから削除され、サーバーdbで行を削除する必要があるため、物理的削除を認識してください。タイムスタンプを持つテーブル内のすべての削除を物理的に削除したり、ロギングしたりするのを避けることができます。 DeletedRows =(id、table_name、pk_column、pk_column_value、timestamp) したがって、DeletedRowsテーブルの新しい行をすべて読み込み、table_name、pk_column、およびpk_column_valueを使用してサーバーで削除を実行する必要があります。 観測2:別のテーブルに関連するテーブルにデータを挿入すると失敗する可能性があるため、FKに注意してください。データ同期の前にすべてのFKを無効にする必要があります。

    関連する問題