Oracleに買収されてMySQLはどう変わったのか

Oracleに買収されてMySQLは「別物」になったのか

結論から言うと、MySQLは消えませんでした。むしろ安定したRDBMSに近づいたと言えます。ただし、「気軽に使える軽量データベース」という性格は確実に変わりました。
この変化を理解しないまま「昔の感覚」でMySQLを扱うと、なぜか動かない・なぜかエラーになるという現象に遭遇します。

MySQLがOracleに買収されたのは2010年です。
Sun MicrosystemsがOracleに買収され、その中に含まれていたMySQLもOracleの管理下に入りました。

当時、開発者コミュニティはかなり騒ぎました。
理由は単純です。
Oracleは世界最大級の商用データベース企業であり、MySQLはその競合だったからです。

「OracleはMySQLを潰すのではないか」
この不安が、後に大きな分岐点になります。

買収前のMySQLは「RDBMSらしくなかった」

昔のMySQLの特徴

買収前のMySQLは、現在の感覚で言うとかなり特殊なデータベースでした。

  • 外部キー制約が実質使えない
  • トランザクションが弱い
  • GROUP BYがSQL標準と違う
  • 型チェックが緩い
  • 不正なデータが普通に入る

つまり「厳密なデータベース」ではありませんでした。
逆に言うと、とにかく壊れにくく、とにかく動くデータベースでした。

例えば、こんなINSERTが普通に成功します。

INSERT INTO users(id, age) VALUES (1, 'abc');

本来は数値カラムに文字列は入れられません。
しかし当時のMySQLは、警告を出すだけで0として保存しました。

これがWeb開発者にとって非常に都合が良かったのです。
PHPで雑に書いたコードでも止まらなかったからです。

なぜそれで人気になったのか

2000年代初頭のWebは、厳密さよりも速度が求められていました。
SNSもECもブログも、とにかく「公開できること」が重要でした。

その中で、OracleやPostgreSQLは正しいSQLを書かないと動きません。
一方、MySQLはとりあえず動きました。

この「いい加減さ」が、LAMP(Linux・Apache・MySQL・PHP)を爆発的に普及させます。

Oracleが変えたMySQLの方向性

「速いおもちゃ」から「業務用RDBMS」へ

Oracle管理下に入ってから、MySQLの方針は明確に変わります。

変化は一言で言うと
SQL標準への接近です。

具体的には次のような変更が進みました。

  • InnoDBが標準ストレージエンジンになる
  • 外部キー制約が実用化
  • トランザクションが前提になる
  • ONLY_FULL_GROUP_BYの導入
  • 厳密な型チェック

特に大きいのがInnoDBの扱いです。

以前のMySQLのデフォルトはMyISAMでした。
MyISAMは速いですが、トランザクションがありません。
つまり途中でサーバが落ちるとデータが壊れます。

Oracle以降はInnoDBが前提になりました。
これは「壊れないデータベース」を重視した判断です。

なぜ厳格化したのか

理由は単純で、企業利用を増やすためです。
銀行や基幹システムでは、曖昧な挙動のデータベースは使えません。

MySQLは「Web用DB」から「一般的なRDBMS」へと方向転換しました。

例えば5.7以降で多くの開発者が遭遇したエラーがあります。

SELECT id, name FROM users GROUP BY id;

昔は動きましたが、現在はエラーになります。
これはSQL標準では誤りだからです。

つまりバグではなく、正しくなったのです。

MariaDBが生まれた理由

MySQLの創始者モンティ・ウィデニウスは、この変化を危険視しました。
OracleがMySQLをコントロールすると、オープンソースの精神が損なわれると考えたのです。

そこで作られたのがMariaDBです。

MariaDBは「昔のMySQLの思想」を継承しています。
つまり、

  • 互換性重視
  • 速さ重視
  • コミュニティ主導

という方向です。

重要なのは、MariaDBは単なる派生ではなく方針の分岐だという点です。

開発者が直面した現実

MySQLの変化は多くの現場で問題を生みました。

「動いていたアプリが突然壊れる」

これは珍しい話ではありません。

特に多いのが次です。

  • GROUP BYエラー
  • 文字コード問題
  • 日付型エラー
  • NOT NULL違反

原因はシンプルで、アプリ側のSQLが元々間違っていたからです。
ただし、昔のMySQLは許していただけです。

つまりOracleが壊したのではなく、隠れていた問題が表に出ただけとも言えます。

注意点:MySQLは「簡単なDB」ではなくなった

ここが一番の誤解ポイントです。

現在のMySQLは「気軽に使えるデータベース」ではありません。
正確には、気軽に使うと危険なデータベースです。

昔の感覚で開発すると、次のような問題が起きます。

  • 本番だけエラー
  • バージョンアップで停止
  • ORMが動かない

特にDockerと本番の差異でハマる例が増えています。
ローカルのMySQLは設定が緩く、本番は厳格というケースです。

ではOracleはMySQLを良くしたのか

単純な善悪ではありません。

Oracle以前のMySQL

  • とにかく動く
  • Web向き
  • 事故に気づきにくい

Oracle以降のMySQL

  • 正しく動く
  • 企業向き
  • エラーが増える

つまり「壊れた」のではなく、役割が変わりました。

Webの急成長を支えた軽量DBから、
汎用RDBMSへ進化したのです。

MySQLが変わったのではなく、
求められる責任が変わったと考えると理解しやすいでしょう。

そして今でも混乱が起きるのは、多くの解説が「昔のMySQL」の知識のまま止まっているからです。
現在のMySQLを扱うなら、「便利なツール」ではなく「データを守るシステム」として扱うほうが、結果的にトラブルは減ります。