リアルタイムの同期ソリューションをMSSQLに対するMySQL

それは多くの人々があるので、データベースがアプリケーションの重要な部分である、MySQLは、オープンソースであり、MSSQLは、MicrosoftがWindowsプラットフォームは非常に便利であると、あるので、多くの人がそれを使用するがあります。今の質問は、つまり、データの内容はまったく同じまま、2つのデータベースを同期する方法、です。

MySQLの移行ツールキットは、MySQLのGUIが提供するオープンソースソフトウェアツールは、マイクロソフトSQL ServerやOracle、MySQLのことができている 、Sybaseのサーバ、MaxDBデータベースサーバーの問題は、MySQLの同期にMSSQL対処うMicrosoft AccessのためのMySQLデータベースの移行にデータベースのデータ。 SQL Serverの移行アシスタント(SSMA)チームには、Microsoft SQL Serverの移行アシスタントのためのMySQLのMySQLの移行アシスタントのために2008を開発しました。SSMAアクセスのため、SSMA for Oracleは:Microsoftはまた、他の三つの移行アシスタントリリースし 、Sybaseの(すべてのV4.2)のため、およびSSMAをそれがMSSQLに問題MySQLを解決することができるように、との方法が詳述されている:MySQLの移行ツールをMsSQLがします- -SSMA目的を達成するために、。

......

ジョーク、上記のツールを使用することは非常に簡単、あなたは予備を保つことができると述べました。本当の問題は、以下のようになります。これら二つのデータベースにはどうすればよいリアルタイムで同期(MSSQLにMySQLが)、すなわち、リアルタイムでコンテンツデータがまったく同じに保つために。端的に言えば、レコードは失敗することなく、リアルタイムに同期され、それはMySQLのインサートにある(または、修正、削除)、MSSQLが同時に挿入され、その後、レコードを(または変更、削除します)。

問題

いわゆるmysqlのは、データのリアルタイム同期をMSSQLします。その要件は次のとおりです。

レコードがデータベースのMySQLに挿入されたとき(1)、MSSQLはまた、対応するデータベースレコードに挿入され、

(2)データベースは、いくつかのレコードのMySQLを更新すると、MSSQLはまた、対応するデータベースレコードを更新します。

(3)のMySQL、MSSQLはまた、対応するデータベースレコードを削除すると、データベース内のレコードを削除します。

時間や方法で、これらのレコードの変更はランダムで不確実なので、いつでも変更を監視する必要があります。同時に、次の契約:

同期、MySQLとMSSQLデータベース構造およびコンテンツとまったく同じに先立ってデータベースにおいてA.。

B.データのみを挿入、更新、削除の操作は、主キーや構造を変更しません。

分析

リアルタイムデータベース同期ソリューションを達成するために一般的に3つの方法があります。第一には、元のデータベースによると、その後再生成ターゲット・データベース、最初のターゲット・データベースを削除し、2つのデータベースを操作するためのプログラムを書くが、データベース操作で大量のデータのため、この方法は明らかです非現実的、慎重に第三は、SyncNavigatorとして、サードパーティ製のソフトウェアを使用することですが、メンテナンスやその他の要因の全体的な経済性、安定性と使いやすさ、このプログラム;第二は、リアルタイムの同期を達成するためにSQLトリガー、ストアドプロシージャ、およびジョブのタイミングを使用することですと。

実現

(1)新とのMSSQL MySQLは一時的な一時的なデータベースは、正式なデータベースに対応するデータ構造ではなく、のみ(データ変更を記録するための操作)各テーブルOPTYPEで新しいフィールドを追加します。

(2)アクションがそれぞれ対応するレコードを生成するMySQLデータベース、MySQLの一時データベーステーブルを変更するとき、トリガMySQLデータベースを確立し、レコードフィールドOPTYPEにする(Iは挿入の記録を表し、Uは、変更されたレコードを表し、Dは、レコードを削除示します)。

(3)新しいMySQL MSSQL一時データベースと一時データベースの間の接続。

一時的なMySQLデータベースの内容を破棄しながら、(4)新しいデータベースMSSQL一時ストアドプロシージャでは、ストアドプロシージャを実行する場合、更新は、一時的なMySQLデータベースと、それが完全に一致するための一時的なデータベースをMSSQL。

(5)新たなジョブのタイミングは、タイミングがMSSQL一時データベースのストアドプロシージャを呼び出します。

(6)OPTYPEフィールドタイプ、MSSQLデータベースの更新に応じて、MSSQLで一時データベーストリガを確立し、その内容は、一時データベースをMSSQL削除します。

このように、同期が完了した後、テーブル内のレコードのデータが削除され、リアルタイムの同期、mssqlにmysqlの一時データベースと一時データベースのみプロセスデータのMySQLのデータベースのMSSQLデータベースを実現しています。ここでは、だけでなく、タイミング計画MSSQLの仕事上のいわゆるリアルタイム。

MySQLのMSSQLの接続方法

1
2
3
4
5
6
7
8
9
10
EXEC  sp_addlinkedserver
@server =  'MySQL' ,
@srvproduct= 'MySql'  ,
@provider =  'MSDASQL' ,
@provstr =  'Driver={MySQL ODBC 5.2 UNICODE Driver};
Server=localhost;
Database=mysql_temp;
User=root;
Password=****;
Option=3;'

  增加权限:

1
2
3
4
5
6
EXEC  sp_addlinkedsrvlogin
@rmtsrvname= 'MySql'  ,
@useself= 'false'  ,
@locallogin= 'sa'  ,
@rmtuser= 'root'  ,
@rmtpassword= '****'

  优化

由于实际数据库可能在极短时间内对一条记录进行多次频繁更新,为防止同步错误,可以两张临时表中再建立状态字段(IsUpdate)。具体操作方法:

(1)当mysql修改记录时,触发的mysql_temp表中的IsUpdate字段值标记为0;

(2)当存储过程调用时,将mysql_temp表中更新到mssql_temp的同时,将mysql_temp表中的IsUpdate字段值标记为1,并删除值为1的记录;(先更新值,再复制,最后删除,下同。)

(3)mssql_temp触发器运行时,除了将mssql_temp的记录更新到mssql外,还将删除mssql_temp表中IsUpdate字段值标记为2,并删除值为2的记录。

这样,可达到两个效果:一是更新永远是实时同步,不会有误;二是可减少存储过程的调用频率,可节省资源。

 

おすすめ

転載: www.cnblogs.com/SyncNavigator8-4-1/p/10977485.html