- Oracleに買収されてMySQLは「別物」になったのか
- 買収前のMySQLは「RDBMSらしくなかった」
- Oracleが変えたMySQLの方向性
- MariaDBが生まれた理由
- 開発者が直面した現実
- 注意点:MySQLは「簡単なDB」ではなくなった
- では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を扱うなら、「便利なツール」ではなく「データを守るシステム」として扱うほうが、結果的にトラブルは減ります。