SQLite から MySQL への移行

SQLiteの紹介

SQLiteはオープンソースのRDBMSであり、ほとんどの他のデータベース管理システムとは異なり、クライアントサーバーモデルではなくサーバーレスの組み込みデータベースとして特徴付けられます。これは、SQLiteデータベースがデータにアクセスするソフトウェア内で実行されるため、別個のサーバーが不要となります。このようなアーキテクチャのため、SQLiteは低メモリ環境でも完璧に動作する高信頼性で効率的なシステムです。

SQLiteの主な利点の1つは、クロスプラットフォームの互換性であり、さまざまなモダンなOSで実行できる点です。Cライブラリ内に含まれるRDBMSとして、SQLiteはCで書かれた外部ライブラリに接続できる任意のプログラミング言語で書かれたアプリケーションによって利用されることができます。例えば、モバイル電話、ゲームコンソール、カメラ、セットトップボックスなどのデジタルデバイスに組み込みソフトウェアを開発するのに理想的です。さらに、SQLiteはアプリケーションがデータを処理するための一時データセットとして機能することができます。

さらに、SQLiteのシンプルさと汎用性により、低から中規模のトラフィックHTTPリクエストを処理する多くのウェブサイトにとって優れたデータベースエンジンとなっています。また、使いやすさとセットアップの容易さから、教育機関でのトレーニングや学習目的に広く使用されています。

包括的なユーザー管理機能が必要ない小規模なデータベースの場合、SQLiteは適した選択肢となります。ただし、他のユーザーとの協力が必要な場合やスケーラビリティやカスタマイズが必要な場合には、最良の選択肢とは言えないかもしれません。

MySQL は複数のユーザーをサポートし、テーブルの形式で大量のデータを処理することができます。ビジネスが成長し、データベースが拡大するにつれて、SQLite では不十分になる可能性があります。したがって、大量のデータを扱い、高度な機能を備えた強力な DBMS を探している場合は、SQLite から MySQL に移行することが合理的です。

MySQL の紹介

MySQL は、GNU ライセンスの下で配布されている非常に人気のあるオープンソースのリレーショナルデータベース管理システムです。データベースを定義、クエリ、更新するために使用される標準の構造化クエリ言語(SQL)のほとんどをサポートしています。MySQL は、他の人気のある DBMS と比較して、高速で、高度にスケーラブルであり、よりユーザーフレンドリーです。

MySQL は、データベースがサーバー上で実行され、クライアントやワークステーションがネットワークを介してデータにアクセスするクライアントサーバーモデルに従っています。その後、サーバーはクライアントからの GUI リクエストに応じて要求された出力を返します。MySQL は、さまざまな OS と PHP、PERL、JAVA、C++、C などの複数のプログラミング言語をサポートしています。

多くの組織や企業が、PHP と Perl をサポートし、ウェブサイトやウェブアプリケーションの構築を容易にする LAMP スタックの重要な部分として MySQL を広く使用しています。

さらに、MySQLの大きな柔軟性により、データベースの専門家は、オンラインストアからビジネスインテリジェンスやデータ分析までのさまざまな目的に合わせてデータベースサーバーを構成することができます。高速の読み込み容量、ユニークなメモリキャッシュ、その他のパフォーマンス向上機能を備えるMySQLは、企業規模のデータウェアハウスのすべてのパフォーマンス要件を満たすことができます。

MySQLへの移行が必要かどうか?

SQLiteとMySQLの両方にはそれぞれ利点と欠点があり、移行の利点が労力に値するかどうかを評価することが重要です。SQLiteは、モバイルアプリケーションやゲームなどの小規模または中規模のポータブルソフトウェア用の埋め込みデータベースとして優れた選択肢です。ただし、次のような場合にはSQLiteを使用しないことが推奨されています:

  • 大容量のデータ。SQLiteの公式ウェブサイトは、1 TBを超えるデータベースには使用しないよう推奨しています。
  • 同時データアクセス。SQLiteはデータを直接ディスクに読み書きするため、並列読み取りを制限し、一度に1つの書き込み操作のみを許可します。

一方、MySQLはウェブサイトやウェブアプリケーションに最適であり、複製サポートや自動シャーディング(商用のMySQL製品で利用可能)により、スケーラビリティが実現されます。同時に、MySQLはSQL標準に完全に準拠していないため、少なくともほぼ完全なSQL準拠が必要なプロジェクトには適していない場合があります。

移行戦略:SQLite3 + MySQL

SQLiteからMySQLへの最も一般的で直接的な移行方法は、SQLite3とMySQLのコマンドラインツールを組み合わせたものに基づいています:

1. SQLiteデータベースをテーブルを作成しデータをコピーするSQLステートメントにエクスポートします。

Shell

 

2. 必要に応じて対象のMySQLデータベースを作成します。

Shell

 

3. スクリプトファイルを変更して、MySQL構文に準拠させます。

  • PRAGMA、BEGIN TRANSACTION、COMMITで始まるすべての行を削除します。
  • データベースオブジェクト名を囲む引用符や'[‘,’]’をMySQLの等価物である’`’に置き換えます。
  • AUTOINCREMENTAUTO_INCREMENTに置換します。
  • ブール値 ‘t’ と ‘f’ を 1 と 0 に変換します。
  • 指定されていない長さのVARCHARタイプをTEXTに変換します。

4. 変換されたスクリプトファイルをMySQLデータベースにインポートします。

Shell

 

移行戦略:Python/Djangoスクリプト

SQLiteからMySQLへのデータベース移行は、PerlまたはPythonスクリプトを使用して行うことができます。ただし、このアプローチはかなり複雑で、PerlまたはPythonのプログラミングスキルが必要になる場合があります。

以下は、Python/Djangoを使用してSQLiteデータベースをMySQLに移行する方法の例です。

1. settings.py構成ファイルでデータベースを定義し、Djangoが使用するデータベースサーバーを指定します。

Python

 

2. 次のようなPythonスクリプトを作成します:

Python

 

提供されたコードは明らかに手法のデモンストレーションであり、完全なSQLiteからMySQLへのデータベース移行には十分でない場合があります。その場合、商用のサードパーティー製品を検討して、全体の移行手順を自動化および簡略化することができます。

移行戦略:専用コンバータ

商用ツールは、使いやすいグラフィカルインタフェースと強力な機能を組み合わせ、SQLiteからMySQLへのデータベース移行を完全自動モードで行うための機能を提供しています。ユーザーは、そのようなソフトウェアを使用して移行を行うために、データベース管理または開発スキルを持つ必要はありません。高品質なSQLiteからMySQLへの移行ツールによって提供される主な機能は次のとおりです:

  • ソースおよびターゲットデータベースの適切なバージョンのサポート
  • MySQLのDBaaSバリエーション(Azure for MySQLやAmazon RDSなど)のサポートは追加の利点です
  • メインデータベースエントリーの移行 — スキーマ、データ、インデックス、およびテーブル間の関係(外部キー)
  • プライマリキーやユニークインデックスを介したSQLiteデータとターゲットデータベースのマージと同期
  • コマンドラインサポートは、スクリプト作成やスケジューリングの目的に適しており、追加の利点です

結論

この記事は、SQLiteとMySQLという2つのオープンソースのリレーショナルデータベース管理システムを紹介し、それぞれのDBMSに適した使用範囲を探ります。また、SQLiteからMySQL、MariaDB、またはPerconaへの3つの移行方法を探り、それぞれのメリットとデメリットを強調します。

Source:
https://dzone.com/articles/migrate-from-sqlite-to-mysql