プロプライエタリエンジンからオープンソースエンジンへの移行は、業界で成長しているトレンドです。
ただし、データベースの移行は軽視されるべきものではありません。
このブログでは、MicrosoftSQLServerからMySQLServerに移行するために必要なものとその方法を見てみましょう。
それでは、MSSQLとは何かとMySQLとは何かを確認することから始めましょう。
Microsoft SQL Serverは非常に人気のあるRDBMSであり、データベースのサイズが大きい場合、またはデータベースがかなりの数のクライアントによって使用されている場合は、ライセンスが制限され、所有コストが低くなります。それは非常にユーザーフレンドリーで習得しやすいインターフェースを提供し、その結果、大規模なインストールユーザーベースがもたらされました。他のRDBMSソフトウェアと同様に、MS SQL Serverは、データベース管理者(DBA)や他のITプロフェッショナルがデータベースの管理とデータベースに含まれるデータのクエリに使用する標準化されたプログラミング言語であるSQLの上に構築されています。 SQL Serverは、標準言語に独自のプログラミング拡張機能のセットを追加するMicrosoftのSQLの実装であるTransact-SQL(T-SQL)に関連付けられています。
MySQLは、SQLに基づくOracleが支援するオープンソースのリレーショナルデータベース管理システムです。
これは、db-enginesランキングによると、世界で2番目に人気のあるデータベースであり、世界中のほとんどのインターネットサービスを実行しているため、おそらく地球上で最も存在するデータベースバックエンドです。
MySQLは、Linux、UNIX、およびWindowsを含む実質的にすべてのプラットフォームで実行されます。これは、LAMPと呼ばれるオープンソースのエンタープライズスタックの重要なコンポーネントです。 MySQL Enterpriseバージョンには、セキュリティと高可用性のためのサポートと追加機能が付属しています。
https://db-engines.com/en/rankingコスト削減、プラットフォームの互換性、およびMySQLの機能セットの組み合わせにより、MySQLは非常に魅力的であり、多くの組織がこれらの機能を利用するためにMSSQLServerからこのオープンソースプラットフォームに移行しています。
移行する理由
通常、移行する最初の理由はコストです。 SQL Serverは、Microsoft独自のデータベースです。 Expressと呼ばれる無料のSQLServerバージョンがありますが、データベースの制限が10 GB、CPUの量が限られている、RAMの量が限られているなどの制限があるため、本番環境で使用するにはライセンスを支払う必要があります。価格はこちらで確認できます。
MySQLを使用すると、コミュニティエディションを無料で無制限に使用できます。
もう1つの理由は、オペレーティングシステムのサポートである可能性があります。 MS SQL Serverとは異なり、MySQLはLinux、Windows、Mac OS、Solarisなどの幅広いオペレーティングシステムをサポートしています。
インストールと構成に関しては、MySQLのインストールが速く、フットプリントが小さく、かなり大きなデータベースを管理でき、SQLServerよりも調整が必要な構成ノブが少なくなっています。
高可用性の分野では、MySQLには、レプリケーション、SAN、MySQL Clusterなど、シナリオに応じてSQLServerと同等または最高のソリューションが数多く用意されています。
優れたMySQLコミュニティは、高品質の製品と互いの成功を確実にするために協力するすべての人の優れた開発者とDBAネットワークを含む多くの利点を提供します。
知っておくべきこと
MySQLはすべての重要なデータ型、テーブルデザイン、およびインデックス構造をサポートしているため、データとインデックス構造をMySQLに移行することは通常難しい作業ではありません。とにかく、いくつかの課題に直面するいくつかのオブジェクトがあります。 Transact-SQLには多くの機能があるため、ストアドプロシージャなどのコード関連オブジェクトは、非標準のANSI機能を使用できます。
したがって、移行する際には、次の項目に特別な注意が必要です。
- アセンブリ
- タイプ
- DDLおよびステートメントベースのトリガー(MySQLには行ベースのトリガーがあります)
- 独自のSQLServer関数呼び出し
- 動的T-SQLの特定のケース
同様に、シノニムとセキュリティロールは、MySQLに直接移行できないため、回避策が必要になります。
変換が必要なデータ型
次のマップを使用して、1対1の関係でMySQLにマップされないSQLServerデータ型を変換できます。
SQL Server | MySQL |
---|---|
IDENTITY | AUTO_INCREMENT |
NTEXT、NATIONAL TEXT | テキスト文字セットUTF8 |
SMALLDATETIME | 日時 |
お金 | 10進数(19,4) |
小額 | 10進数(10,4) |
UNIQUEIDENTIFIER | BINARY(16) |
SYSNAME | CHAR(256) |
その方法
AmazonDMSやDataIntegration(Kettle)など、MS SQL ServerからMySQLへの移行を実行するためのツールは多数ありますが、この場合は、MySQLWorkbench移行ツールを使用します。
このツールは、複雑な移行プロセスの構成と管理のすべてのフェーズで、視覚的、ポイントアンドクリックの使いやすさを提供することにより、DBAと開発者の時間を節約するように設計されています。
- データベースの移行:Microsoft SQL Server、Microsoft Access、PostgreSQL、Sybase ASE、Sybase SQL Anywhere、SQLiteなどからの移行が可能です。
- 移行プロジェクトの管理:移行を構成、コピー、編集、実行、およびスケジュールできるようにします。
- ソースとターゲットの選択:ユーザーが特定のデータソースを定義し、移行前にソースデータを分析できるようにします。
- オブジェクトの移行:ユーザーは、移行するオブジェクトを選択し、必要に応じてソースをターゲットマッピングに割り当て、移行スクリプトを編集して、ターゲットスキーマを作成できます。
- バージョンのアップグレード:移行を使用すると、ユーザーはデータベースを古いMySQLバージョンから最新バージョンに簡単に移動できます。
それでは、やってみましょう。
このタスクでは、次のことを前提としています。
- 移行するデータベースとともにインストールされたSQLServer:MS SQL Server Express2014EditionではNorthwindサンプルデータベースを使用します。
- MySQLサーバーがインストールされています:CentOSを介したMySQL 5.7.25CommunityEditionがあります。
- タスクを実行する権限を持つ両方のデータベースサーバーのユーザー:SQL Serverにはユーザー「sa」があり、MySQLにはすべての権限を持つユーザー「migration」があります。
- 両方のデータベースサーバーにアクセスできるようにインストールされたMySQLWorkbench:MySQLWorkbench6.3を使用します。
移行プロセスを開始するには、MySQL Workbenchのメイン画面で、[データベース]->[移行ウィザード]に移動します。
前提条件をチェックして、タスクを続行できるかどうかを確認する必要があります。すべてが正常に見える場合は、[移行の開始]を押すことができます。
このステップでは、ソースデータベース(この場合はSQL Server)に関する情報を提供する必要があります。
前の画像でわかるように、ソースパラメータを設定します:
Database System: Microsoft SQL Server
Connection Method: ODBC (Native)
Driver: SQL Server
Server: localhost
Username: sa
サーバーパラメータについては、SQLServerノードでMySQLWorkbenchを実行していますが、おそらくデータベースサーバーのIPアドレス/ホスト名を使用します。
これで、[接続のテスト]ボタンを使用して接続を確認できます。
次に、ターゲットパラメータ(この場合はMySQLサーバー)を追加する必要があります。
Connection Method: Standard (TCP/IP)
Hostname: 192.168.100.192
Port: 3306
Username: migration
そして、[接続のテスト]を押して、追加情報を確認します。
次のステップでは、MySQLWorkbenchがSQLServerに接続して、カタログとスキーマのリストを取得します。
次に、リストからNorthwindサンプルデータベースを選択します。
リバースエンジニアリングされたスキーマとオブジェクトをどのようにマッピングするかを選択できます。 Catalog.Schema.Table-> Catalog.Tableオプションを使用するため、MySQLには、Northwindというデータベースと、SQLServerデータベースにある現在のテーブルがあります。
すべてがうまくいけば、移行するオブジェクトのリストが表示されます。
この場合、テーブルオブジェクト、ビューオブジェクト、およびルーチンオブジェクトがあります。残りのオブジェクトについては、対応するMySQLの同等のコードを手動で確認する必要があるため、テーブルオブジェクトのみを選択します。
このステップでは、ソースからのオブジェクトがMySQL互換オブジェクトに変換されます。
すべてがうまくいった場合は、ターゲットに移行されたスキーマを作成する方法を選択することで続行できます。デフォルトの「ターゲットRDBMSにスキーマを作成する」オプションを使用します。
それでは、作成スキーマプロセスを確認しましょう。
次のステップでは、各スクリプト実行の結果を確認し、MySQLサーバー上に作成された新しいデータベースを確認できます。
MySQLサーバーには、次のものがあります。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| NORTHWND |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
この時点で、データベース構造はできていますが、データはまだありません。次に、MySQLサーバーでデータをコピーする方法を選択します。 「RDBMSをターゲットとするテーブルデータのオンラインコピー」オプションを使用します。
また、MySQLWorkbenchアプリケーションからのコピープロセスを監視できます。
この時点で、すべての情報がMySQLサーバーに移行されました。
mysql> SELECT * FROM NORTHWND.Region;
+----------+-------------------+
| RegionID | RegionDescription |
+----------+-------------------+
| 1 | Eastern |
| 2 | Western |
| 3 | Northern |
| 4 | Southern |
+----------+-------------------+
4 rows in set (0.00 sec)
最後のステップでは、移行レポートを確認してタスクを完了することができます。
移行が完了しました!
テスト
移行プロセスの前に、アプリケーションとMySQLデータベースをテストして、新しいエンジンでの動作を確認する必要があります。
移行前にパフォーマンスを検証するためのベンチマークテストを実行することも役立つはずです。
考慮すべきいくつかのヒントがあります:
- テストでは、予想されるユーザー接続の数をシミュレートする必要があります。
- 接続されたセッションは、通常の日中に発生するタスクを実行する必要があります。
- データベースに、実際のデータベースとほぼ同じサイズのテストデータをロードする必要があります。
このテストタスクでは、mysqlslapツールを使用できます。これは、MySQLサーバーのクライアント負荷をエミュレートし、各段階のタイミングを報告するように設計された診断プログラムです。
結論
このブログで確認したように、プロプライエタリエンジンからオープンソースエンジンへの移行など、企業がデータベースの移行を決定する理由はいくつかあります。ここでは、一般的なユースケースであるSQL ServerからMySQLへの移行を確認し、広く知られているMySQLツールの1つであるMySQLWorkbenchを使用して段階的な例を示しました。この記事がお役に立てば幸いです。