回答:
個人的には、MySQLメソッドからのプッシュではなく、MS SQLメソッドを利用します。どうして?Windowsには32ビットおよび64ビットのMySQL ODBCドライバーが用意されており、リンクサーバーのセットアップは簡単です。MS SQLからリンクされた多くのMySQLサーバーがあります。また、linux / unixからMS SQLに接続することは必ずしも優れているとは限らず、通常、すべての機能を使用できるわけではありません。FreeTDSには制限があります。後ではなく早くヒットする可能性があるので、スキップしないでください。これはすべて、* nixでMySQLを実行していることを前提としています。そうでない場合は、50/50に少し近づきますが、「ライブ」データベースではないように思われるため、MS SQLからのプルを選択します。したがって、ETLまたは処理のために負荷をかけるのがより理想的です。GoldenGateソリューションは興味深いように思えますが、それは無料ではないと確信しています。
MySQLとOracleデータベースの両方をMS SQLにレプリケートするこのようなシナリオをセットアップしたことを考慮して、私にとって最も効果的なヒントをいくつか紹介します。
ヒントがお役に立てば幸いです!
同じ質問がStackOverflowのMySQLからMSSQLへのレプリケーションで対処されました 。
いくつかの回避策があるようですが、非常に簡単な解決策ではありません。
MySQL DBからMSSQL DBに必要なデータをインポートするためのSSISパッケージを構築してみてください。SSISを使用すると、さまざまなソースからデータをインポートできます。その後、WindowsタスクスケジューラまたはSQLジョブを使用してパッケージをスケジュールできるはずです。
複製とは、ログ配布などを意味し、運が悪いと思います。ただし、MySQLデータベースをリンクサーバーとして設定し、独自のレプリケーションスキームをロールすることは確かに可能です。最も簡単なのは、truncateステートメントとinsertステートメントを使用して、すべてのテーブルの定期的なスナップショットを作成することです。要件に応じて複雑さを追加します。
これには、MySQLおよびMS SQLの GoldenGateを使用できます。GoldenGate製品を両側にインストールしてから、同種レプリケーションの場合と同様に進めます。
または、「スナップショット」レプリケーションの場合、Python(または同様の)スクリプトを使用して両方のデータソースに接続し(UnixODBCおよびFreeTDSを使用してMS SQLに接続)、SELECT
各行に対して片側で実行しているテーブルをループできます。INSERT
もう一方の。MSSQLにはトランザクションがあり、これがターゲットなので、DELETE
すべてのテーブルからすべてのトランザクションを開始してコピーを実行するCOMMIT
と、ターゲットに接続しているユーザーに関する限り、瞬時にトランザクションが表示され、矛盾が発生しません(これらが存在しない場合)もちろんソースに)。