それは多くの人々があるので、データベースがアプリケーションの重要な部分である、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的记录。
这样,可达到两个效果:一是更新永远是实时同步,不会有误;二是可减少存储过程的调用频率,可节省资源。