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


10

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

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

ありがとう。

回答:


9

個人的には、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にレプリケートするこのようなシナリオをセットアップしたことを考慮して、私にとって最も効果的なヒントをいくつか紹介します。

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

ヒントがお役に立てば幸いです!


4

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

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

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


3

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


つまり、スケジュールされたタスクを実行し、msqldbからSQLサーバー2008 dbにすべてのコンテンツを週1回程度コピーする必要があります。それは可能ですか?
ジミーコリンズ

1
関係するデータの量、ネットワーク遅延などによっては、すべてのデータを毎回切り捨てたりプルしたりするのが非常に遅くなる可能性があることを覚えておいてください。2つのデータベース間のネットワークリンクが小さいか遅い場合は、確実に対処する方法ではありません。私は常にデルタを取得できる方法を考案しようとします。
AndrewSQL '19年

1
私は同意します、デルタは進むべき道です。トリガーやダーティ・ロー・ビットと話すのに十分なMySQLを知りませんが、何か設定できると確信しています。SQL Server側では、ジョブのスケジュールは簡単です。
Larry Smithmier、2011年

3

これには、MySQLおよびMS SQLの GoldenGateを使用できます。GoldenGate製品を両側にインストールしてから、同種レプリケーションの場合と同様に進めます。

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


これがGoldenDateでできることだとは知らなかった。これについてもっと読む必要があります。共有してくれてありがとう!
AndrewSQL '19年

現在オラクルはこの製品のサポートを提供しています。OracleはGoldenGateを買収しました。現在、この製品はOracle製品の下にあります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.