MySQLとMariaDB
MySQLとMariaDBのバックストーリー
MySQL およびMariaDB いくつかの共通の歴史を共有しています。どちらも開発者のMichaelWideniusの娘であるMyとMariaにちなんで名付けられています。 MySQLは、スウェーデンのソフトウェア会社 MySQL ABによって1995年に作成されました。 。長年にわたって人気が高まり、オープンソースのリレーショナルデータベース管理システムの標準になりました。 2008年、SunはMySQL AB(そして最終的にはMySQL)を10億ドルで購入しました。 2009年4月にSunがOracleに買収されて間もなく。この時点で、競合するデータベースシステムであるOracleがMySQLの所有者になりました。これは、MySQLの将来が危機に瀕していると彼らがどのように感じているかを見て、元の開発者を悩ませました。オープンソースのルールに従って、MySQLを「フォーク」してMariaDBを作成することにしました。これで、MySQLとMariaDBは歴史を共有します!
WHMでMySQLを置き換えるためにMariaDBをインストールする方法に関する優れたチュートリアルがあります。
MySQLおよびMariaDBレプリケーションのバージョン管理
スレーブ↓マスター→ | MariaDB-5.5 | MariaDB-10.0 | MariaDB-10.1 | MariaDB-10.2 | MySQL-5.6 | MySQL-5.7 | MySQL-8.0 |
---|---|---|---|---|---|---|---|
MariaDB-5.5 | わかりました | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
MariaDB-10.0 | わかりました | わかりました | わかりました | ||||
MariaDB-10.1 | わかりました | わかりました | わかりました | わかりました | |||
MariaDB-10.2 | わかりました | わかりました | わかりました | わかりました | わかりました | わかりました |
MySQLとMariaDBの機能比較
その他のストレージエンジン
MariaDBには、標準のストレージエンジンであるMyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE、およびMERGEが含まれています。また、次のようなあまり一般的ではないストレージエンジンも含まれています。
- Cassandra(MariaDB 10.0)
- スパイダー(MariaDB 10.0+)
- SEQUENCE(MariaDB 10.0+)
- CONNECT(MariaDB 10.0+)
- TokuDB(MariaDB 5.5以降)
- SphinxSE(MariaDB 5.2以降)
- OQGRAPH(MariaDB 5.5では使用できません)
- FederatedX(Federatedの代わりにドロップイン)
- Aria(キャッシュが改善されたMyISAMの代替品)
- MyRocks(圧縮が強化されたMariaDB 10.2ストレージエンジン)
- ColumnStore(データウェアハウジング用に最適化された列指向のストレージエンジン)
速度の向上
オプティマイザー機能を比較すると、MariaDBにはMySQLよりも多くの改善された拡張機能があります。
機能 | MariaDB 5.3 / 5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
インデックス条件プッシュダウン(ICP) | はい | はい | – | はい |
ディスクスイープマルチレンジ読み取り(DS-MRR) | はい | はい | – | はい |
DS-MRRとキー順検索 | はい | はい | – | – |
Index_merge / Sort_intersection | はい | はい | – | – |
コストベースの範囲の選択とindex_merge | はい | はい | – | – |
ORDERBY…LIMIT | – | はい | – | はい |
innodb / xtradbに拡張(非表示)主キーを使用する | はい(5.5) | はい | – | – |
最適化に参加 | ||||
バッチキーアクセス(BKA) | はい | はい | – | はい |
ブロックハッシュ結合 | はい | はい | – | – |
すべての結合バッファにユーザーが設定したメモリ制限 | はい | はい | – | – |
初期の外部テーブルのON条件を適用する | はい | はい | – | – |
NULLを早期にテストしたNULL拒否条件 | はい | はい | – | – |
サブクエリの最適化 | ||||
In-to-exists | はい | はい | はい | はい |
半結合 | はい | はい | – | はい |
実体化 | はい | はい | – | はい |
NULL対応のマテリアライゼーション | はい | はい | – | – |
実体化と既存のコストの選択 | はい | はい | – | はい |
サブクエリキャッシュ | はい | はい | – | – |
サブクエリを使用した迅速な説明 | はい | はい | – | – |
EXISTS-to-IN | – | はい | – | – |
派生テーブル/ビューの最適化 | ||||
派生テーブル/マテリアライズドビューの遅延マテリアライズ | はい | はい | – | はい |
派生テーブルのインスタントEXPLAIN | はい | はい | – | はい |
キーの最適化を使用した派生テーブル | はい | はい | – | はい |
はい | はい | – | – | |
実行制御 | ||||
LIMIT ROWS EXAMINED rows_limit | はい(5.5) | はい | – | – |
オプティマイザーコントロール(オプティマイザースイッチ) | ||||
すべてのオプティマイザー戦略の体系的な制御 | はい | はい | – | 部分的 |
EXPLAINの改善 | ||||
DELETE、INSERT、REPLACE、およびUPDATEについて説明します | – | 部分的 | – | はい |
JSON形式のEXPLAIN | – | – | – | はい |
サブクエリのより詳細で一貫性のある説明 | はい | はい | – | – |
オプティマイザートレース | ||||
オプティマイザートレース | – | – | – | はい |
- 並列レプリケーション —10.0の新機能。レプリケーションイベントはIOスレッドによって読み取られ、リレーログにキューに入れられ、SQLスレッドによってリレーログから個別にフェッチされ、各イベントがスレーブに適用されて、マスターで変更を複製します。 >
- パフォーマンスの向上には、WindowsでのInnoDB非同期IOサブシステムの改善が含まれます。
- MEMORY(HEAP)エンジンのインデックスはより高速です。最新の修正は、MariaDB5.5およびMySQL5.7で適用されました。
- MyISAMのセグメント化されたキーキャッシュがMariaDB5.2で追加されました。これにより、MyISAMテーブルのパフォーマンスが最大4倍向上しました。
- バージョン10.0.13の時点で、MyISAMとAriaの調整可能なハッシュサイズにより、遅延キーを持つMyISAM/Ariaテーブルを多数使用している場合のシャットダウン時間が改善されます。
- QUICKオプションを使用したCHECKSUMTABLEを使用すると、速度が向上します。
- 文字セットの変換と変換の削除(不要な場合)により、パフォーマンスが向上しました。全体的な速度の向上は約1〜5%ですが、大きな結果セットを使用するとさらに速くなる可能性があります。
- MariaDB 5.1 / MariaDB 5.5のスレッドのプールにより、MariaDBを200,000以上の接続で実行できるため、多くの接続を使用する場合の速度が向上します。
- MariaDB10.1およびMariaDB10.2以降に追加されたクライアント接続の改善
- MariaDB内のDBUGコードのいくつかの改善により、デバッグがコンパイルされているが使用されていない場合に、コードの実行が高速化されます。
- 内部一時テーブルを使用してAriaストレージエンジンを使用すると、パフォーマンスが向上します。
- テストスイートは、拡張されたテストリストを使用してもより高速に実行されます。
新機能と拡張機能
より良いテスト
MariaDBには、MySQLよりも多くのテストがテストスイートに含まれています。無効で不要なテストは削除されました。テストスイートの問題が修正されました。
バグが少ない
現在、MariaDBコミュニティは警戒を怠らず、バグを可能な限り迅速かつ徹底的に修正するよう努めています。さらに、バグが減少した結果、コンパイラの警告も減少しました。
オープンソース
MariaDBのすべてのソースコードは、GPL、LGPL、またはBSDでリリースされています。 MySQLにはEnterpriseEditionのクローズドソースモジュールがありますが、MariaDBにはクローズドソースモジュールはありません。 MariaDBには、MySQL 5.5EnterpriseEditionに含まれるすべてのクローズドソース機能がオープンソースバージョンに含まれていました。 MariaDBには、すべての新しい修正済みバグのテストケースが含まれています。 MySQLは、MySQL5.5で修正されたバグのテストケースを提供していません。 MariaDBは、バグとその修正を含め、将来のすべての開発計画を公開します。 MariaDBには大規模なコミュニティがあり、その開発者のコミュニティにはさまざまな貢献者が含まれていますが、MySQLへのすべてのコミットはOracleの従業員からのものであるように見えます。 MySQLクライアントライブラリは、クローズドソースアプリケーションへのリンクを禁止するGPLライセンスの下でリリースされています。それどころか、MariaDBはLGPLライセンスの下でクライアントライブラリのライセンスを取得し、クローズドソースソフトウェアへのリンクを許可します。
MariaDBとMySQL間の互換性の問題
MariaDBは、MySQLのドロップイン代替として設計されており、元のMySQLコードベースのフォークでした。これは、MySQLからMariaDBに切り替える場合、比較的簡単なプロセスであることを意味します。 MySQLをアンインストールしてMariaDBをインストールするだけです。ドロップインの代替品であるため、データを変換する必要はありません。 MariaDBの開発者は、MySQLコードの毎月のマージを実行して、互換性を維持します。バージョンはそれぞれのバージョン番号で互換性があるように設計されていますが、MySQLとMariaDBのバージョンには異なる非互換性があります(たとえば、MySQL 5.1->MariaDB5.1とMySQL5.5->MariaDB 5.5)。
MariaDB10.0とMariaDB5.5/MySQL5.5の非互換性
- SET OPTION構文は、MariaDB10.0およびMySQL5.6で非推奨になりました。 SETだけを使用してください。
MariaDB10.0とMySQL5.6の非互換性
- すべてのMySQLバイナリ(MySQLd、myisamchkなど)は、オプションのプレフィックス(–big-tablesではなく–big-tableなど)を使用すると警告を発します。 MariaDBバイナリは、他のほとんどのUnixコマンドと同じように機能し、一意のプレフィックスを使用しても警告を表示しません。
- MariaDBGTIDはMySQL5.6と互換性がありません。これは、MariaDB10.0のスレーブとしてMySQL5.6を使用できないことを意味します。ただし、MariaDB10.0はMySQL5.6またはそれ以前のMySQL/MariaDBバージョンのスレーブにすることができます。
- MariaDB10.0マルチソースレプリケーションはMySQL5.6ではサポートされていません。
- MariaDB10.0動的列はMySQL5.6ではサポートされていません。
- CREATE TABLEを作成するには…SELECTは、ステートメントベースのレプリケーションと行ベースのレプリケーションで同じように機能します。デフォルトでは、スレーブでCREATE ORREPLACETABLEとして実行されます。これの利点の1つは、CREATE…SELECTの途中でスレーブが停止した場合、続行できることです。
- slave-ddl-exec-mode変数を使用して、CREATETABLEとDROPTABLEの複製方法を指定できます。
- MariaDB10.0とMySQL5.6のシステム変数の違いの詳細な内訳も参照してください。
- MySQL5.6ではデフォルトでパフォーマンススキーマが有効になっています。パフォーマンス上の理由から、MariaDB10.0ではデフォルトで無効になっています。オプション–performance-schemaを指定してMySQLdを起動すると、有効にできます。
- MariaDB10.0はMySQLMemcachedプラグインをサポートしていません。
- MySQLのSHA256パスワードアルゴリズムで作成されたユーザーは、MariaDB10.0では使用できません。
- MariaDB 10.0は遅延レプリケーションをサポートしていません–MDEV-7145。
MariaDB10.1とMySQL5.7の非互換性
- MariaDB 10.1は、MySQL5.7のJSONをサポートしていません。
- MariaDB 10.1のInnoDB暗号化は、MySQL5.7のInnoDB暗号化とは異なる方法で実装されます。
- MariaDB 10.1は、ngramおよびMeCabフルテキストパーサープラグイン(MDEV-10267、MDEV-10268)をサポートしていません。
- MariaDB 10.1は、テーブルの複数のトリガー(MDEV-6112)をサポートしていません。
- MariaDB 10.1は、InnoDBのCREATETABLESPACEをサポートしていません。
MariaDB10.2とMySQL5.7の非互換性
- MariaDB10.2とMySQL5.7のシステム変数の違い。
- MariaDB10.2とMySQL5.7の機能の違い。
- テーブルごとに複数のトリガーが10.2で追加されました
- MariaDB InnoDB暗号化は、MySQL5.7のInnoDB暗号化とは異なる方法で実装されます。
- MariaDBは、JSONをMySQLのようなバイナリ形式ではなく、真のテキストとして保存します。その理由は、JSON関数がMySQLよりもはるかに高速であるため、JSONオブジェクトの操作が非常に複雑になるため、バイナリ形式で保存する必要がないためです。
- MariaDB 10.2は、ngramおよびMeCabフルテキストパーサープラグイン(MDEV-10267、MDEV-10268)をサポートしていません。
- MariaDB10.2はMySQLXプラグインをサポートしていません。
- MariaDB 10.2は、MySQLの一般表スペースをサポートしていません。
- MariaDB10.1とMySQL5.7の非互換性も参照してください。