web-dev-qa-db-ja.com

リモートのMySQLデータベースをMS SQL Server 2008に複製する

MySQLデータベースの内容をMS SQL Server 2008データベースに複製したい。

これは可能ですか?これを達成するために必要な手順の概要を誰かが説明できますか?

ありがとう。

10
Jimmy Collins

個人的には、MS SQLメソッドとPush from MySQLメソッドを比較します。どうして? Windowsには32ビットと64ビットのMySQLがありますODBCドライバーの準備ができており、リンクサーバーの設定は簡単です。MSSQLからリンクされたMySQLサーバーがたくさんあります。また、LinuxからMS SQLに接続する/ unixは常に優れているとは限らず、通常はすべての機能を使用できない場合があります。FreeTDSには制限があります。後でヒットするよりも早くヒットする可能性があるので、スキップしないでください。これはすべて、* nixでMySQLを実行していることを前提としています。そうではありませんが、50/50に少し近づきますが、「ライブ」データベースではないように思われるので、MS SQLからのプルを選択します。したがって、ETLまたは処理のために負荷をかけることがより理想的です。GoldenGateソリューション面白そうに聞こえますが、それは無料ではないと確信しています。

MySQLとOracleデータベースの両方をMS SQLに複製してこのようなシナリオを設定したことを考慮して、私にとって最も効果的ないくつかのヒントを提供します。

  1. 可能であれば、デルタの変更のみを適用する方法を決定するために最善を尽くしてください。マージコマンドはこれに役立ちます。テーブルを切り詰めてからもう一度挿入すると、ログが膨らみ、ネットワーク帯域幅を使用し、通常は時間を無駄にします。
  2. 大量のデータを処理する場合は、大規模なログファイルを必要としないようにトランザクションを分割してください。ロールバックする必要がないことがわかっているステップに到達したら、明示的なコミットまたはチェックポイントを使用します。
  3. MSSQL dbがレポート専用である場合は、MySQLサーバーに影響を与えないように、そこでETLを実行します。ステージングデータベースまたはスキーマ+ファイルグループを使用して、物事を簡単にします。
  4. インポートするデータをステップに分割します。これにより、失敗した場所でのインポートの再開やトラブルシューティングが簡単になります。オールオアナッシングアプローチはすぐに迷惑になります。
  5. クエリプランとインデックスの使用でリモートデータベースを支援するために、可能な限り変数を使用してください。また、[ホスト]ボックスで実行しているトランザクションの分離の種類と、「レプリケーション」クエリが及ぼす影響にも注意してください。レポートまたはサンドボックスで使用するためにデータをプルするだけの場合は、ライブデータベースでライターをブロックする必要はありません。

ヒントが役立つことを願っています!

9
AndrewSQL

同じ質問がStackOverflowの MySQLからMSSQLへのレプリケーション で対処されました。

いくつかの回避策があるようですが、非常に簡単な解決策ではありません。

MySQL DBからMSSQL DBに必要なデータをインポートするためのSSISパッケージを構築してみてください。 SSISを使用すると、さまざまなソースからデータをインポートできます。その後、WindowsタスクスケジューラまたはSQLジョブを使用してパッケージをスケジュールできるはずです。

4
Marian

複製とは、ログ配布などを意味し、運が悪いと思います。ただし、 リンクされたサーバーとしてのMySQLデータベース を設定して、独自のレプリケーションスキームをロールすることもできます。最も簡単なのは、truncateステートメントとinsertステートメントを使用して、すべてのテーブルの定期的なスナップショットを作成することです。要件に応じて複雑さを追加します。

3
Larry Smithmier

GoldenGateを MySQL および MS SQL に使用すると、これを行うことができます。 GoldenGate製品を両側にインストールし、同種のレプリケーションの場合と同様に続行します。

または、「スナップショット」レプリケーションの場合、Python(または同様の)スクリプトを使用して、両方のデータソースに接続することができます( nixODBC および を使用)。 FreeTDS MS SQLに接続するには)、一方の行でSELECTを実行し、もう一方の行でINSERTを実行するテーブルをループします。MSSQLにはトランザクションがあり、ターゲットであるため、次のことができます。トランザクションを開始し、DELETEすべてのテーブルからすべてを実行して、コピーを実行し、次にCOMMITを実行すると、ターゲットに接続しているユーザーに関する限り、瞬時に表示されます。もちろんソースに存在します)。

3
Gaius