以前の記事で、ウェブサーバーのApacheについて、それがインターネットの発達にどれだけ寄与したか、そしてそのマーケットシェアが競合のNginx(※読み方:「エンジンエックス」)に押されつつあることなどをご説明しました。ApacheはLAMP(Linux + Apache + MySQL + PHP)の一つであり、インターネットの半分はLAMPにより成り立っていると言っても過言ではありません。

今回は、共通点はありつつも異なるデータベースであり、世界中の何百万ものウェブサイトで使用されているMariaDBとMySQLの違いについてご紹介します。

MySQLとは

MySQLは1995年にMichael Monty Widenius氏David Axmark氏によって開発されたリレーショナルデータベース(RDBMS) です。市場がMicrosoft、そしてOracleの所有する(高額な)ソリューションに独占状態にあった時代に開発されました。

1998年の旧MySQLウェブサイト
1998年の旧MySQLウェブサイト(画像引用元:Archive.org

MySQLは歴史ある存在です。現在のインターネットを形成するのに重要な役割を果たしました。Linux Journalのこちらの記事で初期のMySQLについて多くが語られています。

早期にデュアルライセンス方式を採用し、無料版にGNU GPLを使用し提供されたMySQLは、後に誕生する多くのソフトウェアベンダーのための下地を作りました。

Michael Widenius氏はデュアルライセンスについてこう話します

…MySQLは他の製品に簡単に埋め込むことのできるインフラとなり得る製品であるため「MySQLを自社製品に埋め込みたいが、最終的な製品をオープンソースにはしたくない」という人向けにライセンスを販売することができました

LAMPスタックの一部として、サーバーで展開されるウェブアプリケーションは通常、MySQLの埋め込みやコードの配布をしません。つまり、誰もが自由にそれぞれのウェブ製品にソフトウェアを使うことが可能になりました。

公式発表から10年も経たずして、MySQLはオープンソースリレーショナルデータベース市場を独占しています。

Google トレンドによると、2004年から2005年にかけてMySQLの検索回数はピークに達しています。

MySQLに対する関心の推移
MySQLに対する関心の推移

MySQLを使用している企業には次のようなものがあります。

  • Facebook ─2011年の報告書によると「1秒に6,000万件のクエリと約400万件の更新」があり、MySQLは「いいね、シェア、ステータスアップデート、通知、リクエストなど全てのユーザー間のインタラクション」を処理しているとのことです。
  • Netflixのプラットフォームの決済に関連する部分
  • YouTube
  • Booking.com
  • Airbnb
  • その他多数

もう一つ特筆すべきMySQLの普及に貢献した要因はphpMyAdminです。

PhpMyAdminはcPanelなどのウェブホスティングサービスに早期から導入された、1998年開発のウェブブラウザで管理するタイプのデータベース管理ツールです。PHPで実装されており、LAMPサーバー上で簡単にMySQLを管理できます。PhpMyAdminにより、Linuxのターミナルを使用せずにインポート、エクスポート、複雑なクエリの構築、表の作成や削除、高度な検索など多くのことが実行可能です。

WordPressとMySQL

MySQL普及の背景にはCMSシステムの約60%、ウェブ全体の34%で使用されているWordPressの存在があることは間違いありません。

WordPressはMatt Mullenweg氏とMike Little氏により別のプロジェクトから派生して2003年に開発されました。PHPで実装されており、データベース管理システムにはMySQLが利用され、登場とともに急速に普及しました。

WordPressとそのサーバースタックは間も無くオープンソースソフトウェアと同義で語られるまでに。DisplayWPはそれぞれのWordPressのバージョンに必要な最低限のMySQLを示した分かりやすい表を公開しています。

MySQLの普及が進んだ大きな要因の一つとしてGPLライセンスも挙げられます。Linuxとの互換性があるため、Linuxにデフォルトで含まれるようになりました。現在ではUbuntuにもデフォルトで組み込まれています。

MySQLとリレーショナルデータベースモデル

MySQLはRDBMS(リレーショナルデータベース管理システム)とみなされています。コッドの12の規則で示されているとおり、リレーショナルデータベースの歴史は1970年代に遡ります。簡単に言うとこのモデルは列と行で構成されるテーブルでデータを構造化します。それぞれの行はキー(SQL言語を使うための主キー)により個別に特定します。

この主キーは該当する行との関係性を定義するために他のテーブルと紐付けられます。つまりリレーショナルデータベースの外部キーの列が別のテーブルの主キーの列に紐づけられ、それぞれのテーブルの行との関係性が明らかになります。

Essential SQLで説明されているように、「主キーはテーブル内のそれぞれの行を個別に特定するデータが入力された一つ以上の列で構成」されます。主キーの列のデータはそれぞれ固有のものである必要があり、空欄またはNull値は使用できません。リレーショナルデータベースでは「テーブルには一つしか主キーが存在せず、その定義は必須」です。

また、「外部キーは他のテーブルの主キーに紐づいた一つ以上の列です。外部キーを“指定”するための、特別なコード、構造、テーブルの定義はありません」とあります。

MySQLの関係データベースモデル
MySQLのリレーショナルデータベースモデル

このように関係データベースを使用すればデータを緻密に構造化し、複数のデータの関係性を定義することができるのです。上記の簡単な例では、二つのテーブルの列が紐付けられていて、それぞれの人物の所有する車を知ることができます。

必要なロジックに従ってデータを検索することができます。異なる基準に基づきフィルターをかけたり、上記の例よりもより複雑なクエリを構築したりすることも可能です。

そのため、関係データベース(そしてデータベース一般)は、ドメイン固有言語を使用しており、その中でもSQL(Structured Query Language)が広く採用されています。

サン・マイクロシステムズによる買収

2008年にMySQLを管理していたMySQL ABはサン・マイクロシステムズにより買収されました。同企業はJAVAやSolaris OSを開発し、様々なコンピューター技術の開発に顕著な貢献をしてきた企業です。As Business Wireが当時報じた内容は以下の通りです。

「サン・マイクロシステムズ(NASDAQ銘柄:JAVA)は今日、急成長中のオープンソースデータベース開発企業MySQL ABを総額約10億ドルで買収することで正式契約に入りました」

この買収がサン・マイクロシステムズの破綻を防ぐことができるほどの力をもたらさなかったことは、後々明らかになりますが、当時のMySQLの勢いをよく表している出来事としてご紹介しました。

オラクル

オラクルは最大のクローズドソースデータベースであるオラクルデータベースの開発・販売をする企業です。

MySQLの直接的な競合であり、実質的に当時のMySQLが確立していたGPL、フリー、オープンソースのソフトウェアモデルとは正反対を行きました。

2010年のオラクルによるサン・マイクロシステムズとその所有するMySQLの(IBMに先手を打った)買収は、FOSS (Free/Open Source Software)の世界では映画スタートレックのボーグの攻撃のような「不吉な」ものと捉えられました。あるユーザーがQuoraでこの出来事について次のように振り返っています。

オラクルデータベースの利益が当時、全体の収益の80%以上(その維持に必要な基幹要員を考えるとそれ以上かもしれません)を占めていたオラクルにとって、MySQLは大きな脅威でした。

MySQLは着実に市場のシェアを伸ばしました。何百万ドルものサイトライセンス契約を結んでいたフォーチュントップ50に名を連ねる大企業が、管理関係間接費が大幅に低いという理由で、オラクルからMySQLにデータベース(特に読み取り専用のデータベース)を乗り換えていったのです。実際に私もその手助けをしたことがあります。

MySQLのコミュニティ内の多くの人は、オラクルの無料版を時代遅れと思わせるような新しい機能を追加しようと考えていました。MySQLは確実に成長しており、ツールは成熟を続け、Larry氏は恐れを感じたのです。

そのため、オラクルはMySQLを自社のコントロール下に置き、コミュニティを散乱させ、自社の主力製品を守るためにMySQLを買収したのです。

MySQLは当時オラクルのコアビジネスを脅かすほど人気になっていたため、これは論理的な決断だったと言えるでしょう。GeekflareのAnkush Thakur氏が述べているとおり、登場して間も無く開発者たちがSQLとMySQLが異なる存在であることを忘れてしまうほどに、MySQLは急速に人気になったのです。

買収に先立って、2009年の終わりに、自身のデータベース企業を設立するために同年にMySQLのチームを去ったMonty Widenius氏は自身のブログで印象的な主張を公開しました。(冒頭のみ引用)

MySQLを救う手助けをお願いします

MySQLの開発者である私、Michael “Monty” Wideniusは、MySQLをオラクルの支配から守るために、至急手を貸して頂けるよう皆さんにお願いいたします。すぐにご協力頂けなければ、いつ何時、MySQLがオラクルのものになってしまうか分かりません。欧州委員会(EC)へ手紙を書くことにより、この買収を防ぎ、オープンソースプロジェクトしてのMySQLの開発を守ることができます。

しかし、この一ヶ月後、オープンソースコミュニティの落胆をよそに、買収は実施されてしまいました。Widenius氏はその頃多くのMySQLの開発者を連れて、既にサン・マイクロシステムズを去り、Monty Program ABを立ち上げ、MySQLを分岐し、MariaDBの基礎を築いていました。

今でも、Monty氏の恐れの正当性について世間は疑問を抱いています。何故なら、最悪のシナリオは実際には全く起こらなかったのです。オラクルはMySQLをただ潰すために買収したわけではなかったのです。

一部にはMySQLは単にサン・マイクロシステムズの買収の巻き添えを食ってオラクルに買収されただけと主張する人もいます。2009年にデータベース市場に目を向けていた人たちには、心配するだけの理由がありました。

兆候はそこにありました。MySQLのメインストレージエンジン、InnoDBの開発者であるフィンランドの企業は、2005年にオラクルに買収されました。その後、完全にオラクルに統合され、元の会社はなくなっています。2006年にはBDBストレージエンジンのプロバイダー、Berkler DBの開発元を買収。囲い込みとでも言えるでしょう。

MariaDBとは

MySQL 5.1.38に基づいたMariaDB 5.1.38Betaが2009年10月にリリースされました。「MySQLのコードベースが永遠に無料であることを保証するために」MySQLより分岐したのです。

分岐した当時、多くの人はオラクルの買収がMySQLを潰すことを目的とした敵意のあるものであると考えていました。この心配は結果的には、少なくとも部分的には、事実無根であったことがのちに証明されています。

2009年に、Monty Program ABとMySQLのサービスを提供しているPerconaはオープン・データベース・アライアンスを設立。その目的は「MySQLに関係するコミュニティ、ビジネス、および技術エキスパートたちが直面している分裂と揺らぎに対するソリューションを提供し、MySQL関連の全ての開発とサービスを統合すること」でした。

MySQLやその派生コードなどのMySQLオープンソースデータベースやバイナリデータ、トレーニング、サポート、その他のMySQLコミュニティやパートナーのエコシステムを強化のための業界のハブとなる」というコンセプトのもと設立されました。

振り返ると、これらの動きによって、MySQLは最悪のシナリオを辿らなくて済んだという可能性はあります。

MariaDBとMySQL─互換性

MariaDBのMySQL(Widenius氏の娘の名前より名付けられた)からの分岐の大きな目的はMySQLへの将来的なアクセスと開発を保証することでした。そのため、MariaDBは全てのユーザーがシステム上でMySQLと入れ替えることのできる双対の入れ替え品とみなされています。

MySQLはクライアント・サーバー・アプリケーションであり、サーバープログラムであるmysqld、クライアントであるmysqlmysqldumpなどの補助プログラムもMariaDM上でも同じ名前となっています。

MySQLからMariaDBへの入れ替えは多くのアプリケーションにおいて、特にWordPressにおいてはシームレスな作業となります。人気のCMSツールやphpMyAdminなどのアプリケーションといった既存のソフトウェアでもそのまま使用することができ、データは一切の変更を加えることなくMySQLからMariaDBへエクスポートおよびインポートすることができます。

MariaDBが掲げる目標はMySQLとの互換性を保つこと。MariaDBのウェブサイトによると、以下の通りです。

  • データと表定義ファイルの互換性がある
  • 全てのクライアントAPIとプロトコルの互換性がある
  • MySQLとMariaDBではファイル名、バイナリ、パスが同じ
  • ポートとソケットが同じ
  • 全MySQLのコネクタ(PHP、Perl、Python、Javaなど)はMariaDBでも使用可能
  • MySQLのクライアントパッケージはMariaDBでも同じように利用できる

互換性の保証とオラクルによる新機能の追加やバグの修正を反映するために月次での統合が実施されています。

MariaDBとMySQL─分岐の背景

MariaDBリリースの背景にはいくつかの理由がありました。オラクルが自社の利益の大きい主力製品を守るために競合であるMySQLを潰すのではないかという恐怖は大きな理由の一つだったでしょう。ユーザーは素晴らしい無料の製品を失うことになるところだったのですから!

他にも、MySQLが無料でオープンソースであり続けるため、でもありました。現在、MariaDBは完全なGPLライセンスでその全ての機能が使用できます。一方で、MySQLは特別な機能は有料のライセンスに含まれるとする、デュアルライセンス方式を採用しています。

MySQL Enterprise Edition では、高度な機能、管理ツール、テクニカル・サポートが包括的にまとめられているため、最高レベルの MySQL スケーラビリティ、セキュリティ、信頼性、アップタイムを実現します。 MySQL Enterprise Edition は、ビジネス・クリティカルな MySQL アプリケーションの開発、配置、管理におけるリスクとコストを削減し、複雑性を緩和します。

この二つを比較すると、GPLライセンスで提供されているMariaDBは大変優位です。独自のコードベースであるため、オラクルはMariaDBのコードを利用したり、データベースの中に統合したりすることが法的にできないのです。

Widenius氏は、「オラクルがクローズドソースのMySQLの拡張機能をリリースした場合、私たちもオープンソースのものを発表します」と断言しています

コミュニティ

分岐の背景にあるもう一つの理由は、そのライセンスと同様に方向性の決定や開発もオープンである、コミュニティ主導のプロジェクト(WordPressと同じように)という性質を保持することにありました。コミット履歴を見ると、MySQLのコードは自社開発によるものであることが分かります。オラクルの開発者たちはコミュニティから時折寄せられる貢献度の高い提案に感謝を伝えることはありますが、それはMariaDBのオープンさや、かつてのMySQLとは程遠いものです。

例えば、記事執筆時点で、MariaDBのサーバーレポジトリには18万6千件のコミット、370件以上のブランチ、200人以上のコントリビューターが存在します。一方、MySQLの場合14万8千件のコミット、9件のブランチ、72人のコントリビューターとなっています。

MariaDBの開発、方向性、機能に関する投票などの議論は一般公開されたメーリングリスト上で行われます。

「Maria developers」チーム
「Maria developers」チーム

この他に「Maria Discuss」というメーリングリストも存在します。

Maria Captains」は他の開発者たちにより提出されたパッチを反映する、信頼ある開発者のチームです。ローンチパッド上のチームページには次のように紹介されています。

キャプテン”は、MariaDBメインツリーの書き換え権限を持つ信頼ある開発者たちです。ツリーにパッチを適用したい場合、maria-developersのリストに送信すると、キャプテンが提出者と共にパッチを確認、承認し、最終的にMariaDBの該当するツリーに適用します。

MariaDBのこの動的な開発手順がオラクルの閉鎖的なものに対して優位に働いた事例がいくつかありました。

2012年の終わりに、データベースの開発を監督するためにMariaDB foundationが設立されました。

分岐の直後から、多くの元々のMySQL開発者がその場を離れ、MariaDBのプロジェクトに参加。Red Hat、CentOS、Arch Linux、Debian、OpenSuse、Slackware、FedoraなどのLinuxベンダーは—FreeBSDとOpenBSDの配布に加えて—デフォルトのRDBMS(関係データベース管理システム)をMariaDBに変更。UbuntuにもMariaDBが採用されました。一覧はこちらをご覧ください。

Alibaba Cloud、Tencent、IBM、Microsoft、Booking.comなどの企業はプラチナスポンサーとなりました。

業界トップクラスのアプリケーションデータベース、およびWordPress専用マネージドホスティングを提供する会社としては、MariaDB Foundationの取締役会にAutomattic社の面々が集まっている点は興味深く、WordPress創設チームがMariaDBを評価していることは明らかです。

分岐から数年でMariaDBは劇的に発展しました。2012年に導入された新しい機能を鑑み、その飛躍を表現するためにMariaDBはMySQLと互換性のある今までの「5.*」バージョンから「10.0」まで、一気に番号を飛ばしてリリース。

性能上の理由により、ウィキメディア財団は2013年に、WikipediaにMariaDBを利用することを発表。Googleでも同じ動きがあり、今ではドイツ銀行、DBS銀行、ナスダック、ベライゾン、クレイグスリストなども利用しています。

MySQLのユーザーにはGitHub、アメリカ海軍、NASA、Tesla、Netflix、WeChat、Facebook、Zendesk、Twitter、Zappos、YouTube、Spotifyなどがあります。

リリース以来、MySQL後継者への関心は、Googleトレンドが示すように堅調に高まっています。

MariaDBへの関心の推移
MariaDBへの関心の推移

MariaDBとMySQL─主な違い

MariaDBはMySQLと完全な互換性を持つデータベースとして作られたものの、これからは違う道を歩んでいくことが予想されます。

MariaDBとMySQL

Widenius氏は自身の最後のブログで、MySQLのバージョン8.0に関して、次のような違いや注意事項について触れながらオラクルに対する祝辞を述べました。

スレッドプール:Nginxサーバーが解決したApacheの抱えていた問題と同じように、MySQLではクライアント毎に接続スレッドが割り当てられ、パソコン内の全てのプログラムを起動するようなもので、単純に非効率でした。MariaDBバージョン5.5ではこの問題に対し独自の改善がなされています

Invisible ColumnsはMariaDB 10.3.3以降に搭載された独自の機能です。SELECT *文でクエリを実行した際、クエリ結果にはInvisible Columnsは表示されず、INSERT文においても値を割り当てる必要がありません。

MariaDBでは時間データをマイクロ秒単位で記録します。

ストレージエンジン:MariaDBでXtraDB、 InnoDB、 MariaDB ColumnStore、 Aria、 Archive、 Blackhole、 Cassandra Storage Engine、 Connect、 CSV、 FederatedX、 Memory storage engine、 Merge、 Mroonga、 MyISAM、 MyRocks、 QQGraph、 Sequence Storage Engine、 SphinxSE、 Spider、 TokuDBなどに対応しています。ColumnsStoreは、並行スケーリングにより何ペタバイトものデータを処理できるという意味で、性能面で興味深いストレージエンジンです。詳しくは公式ブログをご覧ください。

MySQLのストレージエンジンInnoDB、 MyISAM、 Memory、 CSV、 Archive、 Blackhole、 Merge、 Federated、 Exampleです。

データベース検索でも大幅な最適化が図られており、MariaDBでは必要なテーブルのみクエリを実行します。

MySQLの特徴には、ネイティブのJSONデータ型、MySQL8.0のMySQL Shell(JavaスクリプトとPythonのスクレイピングが可能)、そして、mysql_native_passwordよりもセキュリティを強化したSHA-256認証プラグインなどがあります。

MariaDBとMySQLの全体の対比表とMariaDBの強みについてはこちらをご覧ください。

まとめ

MySQLは現在世界最大の商用データベースベンダーの傘下にあります。多くの社員が休みなく働き、新しい機能の開発に取り組んでいるため、既に変化が見られるようになってきました。一方、MySQLに新しい特別な機能が追加されると通常はMariaDBに反映されますが、必ずしもすぐに反映されるとは限らず、そもそも反映されるという保証はありません。

とは言え、MariaDBの方が高い性能を誇る場面も多々あります。機敏な修正とアップデート、より安定したオープンソースの未来に加え、そして多少楽観的な視点を持てば、KinstaがMariaDBのファンであるだけではなく自社の高性能なサーバーにMariaDBを利用している理由がお分かりいただけるでしょう。

Tonino Jankov

Tonino is an entrepreneur, Linux & OSS enthusiast, developer, and tech educator. He has over ten years of experience in development and has been in the blockchain space for 3+ years. When he's not coding, he writes for SitePoint and Alibaba Cloud, binge-watches the newest works of fiction on Netflix, and explores new travel destinations.