(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

GPLと商用のデュアル・ライセンス

図1●組み込みデータベース
MySQL4.0ではlibmysqldというライブラリが用意され,今まで別途起動する必要があったMySQLをアプリケーション内に組み込むことができるようになった
図2●レプリケーションと負荷分散
MySQLは標準でレプリケーション機能を備えており,別のデータベース・サーバーにデータの更新を非同期に複製できる。ただし,マスター・サーバーからスレーブ・サーバーへの片方向の複製であり,負荷分散を行うにはアプリケーション側でサーバーを使い分けたり,負荷分散装置を導入したりする必要がある。米Emic NetworksのEmic Application Cluster for MySQLは,複数のMySQLサーバーがひとつのIPアドレスを共有し,アプリケーションからのリクエストを受け取る。1台のサーバーが選ばれてリクエストを実行。データの更新があれば,自動的にサーバー間のデータの同期を取る

 MySQLは1980年代にMichael Widenius(通称Monty)氏が開発した。当初からソースコードが公開され,多くのエンジニアが彼をサポートしてきた。日本語環境においても,日本MySQLユーザ会のとみたまさひろ氏の努力によりマルチバイト化され,1999年以降のバージョンでは日本語も問題なく取り扱うことができる。

 2001年には,MySQLを開発する企業としてMySQL ABが設立され,現在では12名を超えるスタッフが開発にあたっている*9

 このような背景から,MySQLは「オープンソース・モデルを採用した商用データベース」となっている。すなわち,バージョン3.23.18以降はオープンソースのライセンスであるGPL2と,商用ライセンスのデュアル・ライセンス形態をとっている。つまり,どちらのライセンスに従うのかを利用者が決めることになる。

 GPLに基づく場合,無償で利用できるが,第三者にシステムを販売したりする場合,相手にソースコードを公開しなければならない。商用ライセンスであればそのような義務はない。商用ライセンスといっても1台2万9800円からと安価であり,接続制限やCPU数の制限,メモリー量の制限,起動するプロセス数の制限などはない。

 そういったこともあり,MySQLは組み込みシステムにも多く採用されている。MySQL4.0ではlibmysqldと呼ぶアプリケーション組み込み用ライブラリが用意された。このライブラリを利用するとMySQL自体をアプリケーション内部に持たせることができるようになり,そのアプリケーション内で閉じたデータベースとして動作させることができる。これにより,今まで別途起動が必要であったMySQLを完全にアプリケーション内に組み込むことができる(図1[拡大表示])。

 よく質問される,PostgreSQLとの違いについて触れておこう。PostgreSQLと比較した際のMySQLのメリットは,処理性能である。前述のeWEEKの検証でも,MySQLは高速で安定していると評価している。

 逆に,PostgreSQLは,MySQLでは開発中のストアド・プロシージャ,トリガー,ビューといった機能を備えている。

InnoDBでトランザクションをサポート

 他のDBMSと異なる,MySQLを使いこなす最大のポイントのひとつが「MySQLは複数のデータ・ストア・エンジンを採用している」という点である。必要なロック単位やスピードに応じて,データベース単位ではなく,テーブル作成時にデータ・ストア・エンジンを選択できる。

 MyISAMはMySQL ABで開発されたデータ・ストア・エンジンで,MySQLの標準のエンジンとして使用されてきた。

 トランザクションを使用したい場合,InnoDBを使用する。InnoDBはフィンランドInnoBase Oy社が開発したエンジンである。

 オンライン・バックアップは,MyISAMではサポートしていないが,InnoDBであれば可能である。InnoDB HotBackup*10という商用バックアップ・ソフトを使用すれば,サーバーを止めることなく,またテーブルをロックすることなくデータのバックアップをすることが可能になる。

レプリケーションや負荷分散も可能

 現在のMySQLはレプリケーション機能を標準でサポートしている。1台のマスター・サーバーから複数のスレーブ・サーバーへコピーすることができる(図2[拡大表示])。

 書き込みはマスター・データベースで行う必要があるが,読み込みのクエリーはスレーブ・サーバーに任せることができる。読み込みの負荷分散をさせることが可能になる。この場合は負荷分散装置で対応するか,アプリケーション側で接続するデータベースを変更する必要がある。

 また,更新時の負荷分散が可能な商用ソフトウエアもある。米Emic Networks社の「Emic Application Cluster for MySQL」(以下EAC)*11は,現在のところLinux上でしか動作しないが,検索だけでなく,更新処理の負荷分散も可能なツールである。EACでは,クラスタを構成する各サーバーがひとつのIPアドレスを共有し,アプリケーションからのリクエストをすべてのサーバーが受け取る。負荷の状況によって実際に処理を実行するサーバーが選択され,実行の結果更新されたデータは全てのサーバーに複製され同期がとられる。サーバー間の同期などの通信は,アプリケーション側のネットワークとは別のクラスタリング・ネットワークで行われる。

 複数台のサーバーがあたかも1台のサーバーに見えるので,アプリケーションを変更することなく負荷分散が実現できる。

 ディスク共有型のクラスタリング構成も,もちろん可能だ。米SteelEye Technologyのクラスタリング・ソフトLife Keeperがインフォシークで使用されているなどの実績がある。


立岡佐到士(たつおか・さとし)氏

株式会社ソフトエイジェンシー 代表取締役
同社の共同創業者でもある。MySQLの公認代理店として,MySQLを利用したシステムを多数構築。2003年3月より同社代表を務める。著書に『実例で身につける!MySQL×PHPによる本格Web‐DBシステム入門』(技術評論社),『MySQL活用ガイド』共著(秀和システム)など。


(次回に続く)