MySQLのLTSへの移行やMariaDBの独自進化が話題になる中、この問いを持つLinux管理者が増えています。
結論から言うと、ワークロードの種類によってどちらが速いかは変わります。sysbenchを使えば自分の環境で実測できるため、カタログスペックではなく実データで判断できます。
この記事では、Rocky Linux 9.4 / Ubuntu 24.04 LTS の環境でsysbenchを使ってMariaDB 11.4 LTSとMySQL 8.4 LTSを比較する手順を解説します。インストールから実行・結果の読み方まで、セルフホスト選択の判断材料になる実測値を示します。
この記事のポイント
・oltp_read_onlyの差は1%以内、oltp_read_writeで約4%の差が出る
・innodb_buffer_pool_sizeの設定で結果は大きく変わる
・GaleraクラスタはMariaDB独自・LTSはMySQL 8.4が長い
・OSディストリに合わせると管理コストを抑えられる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
MariaDBとMySQLは何が違うのか
MariaDBは2009年、MySQLのオリジナル開発者チームがOracleによる買収に反発してフォークしたプロジェクトです。当初は互換性を最優先に開発されましたが、現在は独自機能(システムバーサイオン管理テーブル・Galera Cluster等)が多数追加されています。2026年時点のセルフホスト比較で重要なポイントは以下の通りです。
・クエリキャッシュ: MariaDBは10.1まで搭載、10.6以降はデフォルト無効化。MySQL 8.0以降は完全削除
・ストレージエンジン: 両方ともデフォルトはInnoDB。MariaDBはAriaも同梱するが本番用途ではInnoDBを使うのが基本
・レプリケーション: MySQL 8.4はGTIDが前提。MariaDBはGTIDの実装が異なるため双方向の混在レプリケーションは非推奨
・パッケージ供給: RHELベースはAppStreamでMySQL 8.0が標準、MariaDBは公式リポジトリ追加が必要。Debian/Ubuntuは逆にMariaDBがデフォルトになりやすい
SQLの互換性は高く、単純なCRUD操作では動作の差はほぼありません。差が出るのはパフォーマンスチューニング・レプリケーション設計・GaleraやJSON関数の実装細部です。
sysbenchのインストールと環境準備
1. sysbenchをインストールする
sysbenchはRHEL/Rocky/AlmaLinuxではEPELから、Ubuntu/DebianはUbuntuの公式リポジトリから入れられます。Rocky Linux 9.4の場合:
# EPELを追加していない場合は先に追加 $ sudo dnf install -y epel-release $ sudo dnf install -y sysbench $ sysbench --version sysbench 1.0.20
$ sudo apt update $ sudo apt install -y sysbench $ sysbench --version sysbench 1.0.20
2. テスト用DBとユーザーを作成する
ベンチマーク専用のデータベースとユーザーを用意します。本番DBとは必ず分けて用意してください。# MySQLの場合(MariaDBでも同じSQL構文が使えます) $ sudo mysql -u root -p mysql> CREATE DATABASE sbtest; mysql> CREATE USER 'sbuser'@'localhost' IDENTIFIED BY 'SbenchTest#2026'; mysql> GRANT ALL PRIVILEGES ON sbtest.* TO 'sbuser'@'localhost'; mysql> FLUSH PRIVILEGES; mysql> EXIT;
3. sysbenchデータを準備する(prepare)
テスト用データをDBに流し込みます。テーブル数10・1テーブルあたり100万行の設定で約1.5GBの領域を消費します。空き容量を事前に df -h で確認してから実行してください。$ sysbench oltp_read_write --db-driver=mysql --mysql-host=127.0.0.1 --mysql-db=sbtest --mysql-user=sbuser --mysql-password='SbenchTest#2026' --tables=10 --table-size=1000000 --threads=4 prepare
sysbenchで読み取り・書き込みベンチマークを実行する
1. 読み取り専用テスト(oltp_read_only)
読み取り専用の負荷テストを実行します。Webアプリの参照系クエリが多い構成に近い条件です。$ sysbench oltp_read_only --db-driver=mysql --mysql-host=127.0.0.1 --mysql-db=sbtest --mysql-user=sbuser --mysql-password='SbenchTest#2026' --tables=10 --table-size=1000000 --threads=8 --time=60 --report-interval=10 run
[MySQL 8.4.2 実行結果]
SQL statistics: queries performed: read: 2408032 write: 0 other: 172002 total: 2580034 transactions: 150467 (2507.77 per sec.) queries: 2580034 (43005.43 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) Latency (ms): min: 1.34 avg: 3.19 max: 23.67 95th percentile: 5.09
SQL statistics: queries performed: read: 2387216 write: 0 other: 170515 total: 2557731 transactions: 149162 (2486.03 per sec.) queries: 2557731 (42623.03 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) Latency (ms): min: 1.38 avg: 3.22 max: 24.01 95th percentile: 5.18
2. 読み書き混在テスト(oltp_read_write)
本番のOLTPワークロードに近い条件で比較します。INSERTとUPDATEが発生するため、書き込み性能がTPSに影響します。$ sysbench oltp_read_write --db-driver=mysql --mysql-host=127.0.0.1 --mysql-db=sbtest --mysql-user=sbuser --mysql-password='SbenchTest#2026' --tables=10 --table-size=1000000 --threads=8 --time=60 --report-interval=10 run
SQL statistics: queries performed: read: 873062 write: 249446 other: 124723 total: 1247231 transactions: 62361 (1039.35 per sec.) queries: 1247231 (20786.94 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) Latency (ms): min: 2.17 avg: 7.70 max: 68.84 95th percentile: 15.27
SQL statistics: queries performed: read: 842100 write: 240600 other: 120300 total: 1203000 transactions: 60150 (1002.50 per sec.) queries: 1203000 (20050.00 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) Latency (ms): min: 2.21 avg: 7.98 max: 71.23 95th percentile: 15.55
my.cnf/mariadb.cnfのチューニングがベンチマーク結果に与える影響
sysbenchを実行する前に最低限のInnoDB設定を確認しないと、デフォルト設定がボトルネックになります。以下の3パラメータは必ず確認してから比較してください。・innodb_buffer_pool_size: 物理メモリの50~70%が目安。デフォルトの128MBのままでは全データがメモリに乗らずI/Oボトルネックが発生する
・innodb_log_file_size: 256MB以上を推奨。書き込みが多いほど重要になる
・sync_binlog: 1(デフォルト・最安全)から0にするとTPSが大幅に上がるが、クラッシュ時のデータ消失リスクが発生する。セルフホストでは用途に合わせて設定する
設定ファイル(Rocky Linux: /etc/my.cnf.d/server.cnf、Ubuntu: /etc/mysql/mariadb.conf.d/50-server.cnf)への設定例:
[mysqld] # 8GBメモリのサーバー向けサンプル innodb_buffer_pool_size = 5G innodb_log_file_size = 512M innodb_flush_log_at_trx_commit = 1 sync_binlog = 1
セルフホスト環境での選択基準
ベンチマーク結果だけで選ばないことが重要です。実際の選択では以下の観点を組み合わせて判断してください。・OSディストリとの相性: RHELベース(Rocky/Alma)ではMySQL 8.0がAppStream標準。MariaDBは公式リポジトリの手動追加が必要になる。管理工数を下げたい場合はOSのデフォルトに合わせるのが現実的
・移行コスト: 既存のMySQL環境からMariaDB 11.4への移行は単純なCRUDであればほぼ互換動作するが、DATETIME精度・デフォルトモード・GRANT構文の細部に差異がある。本番移行前に必ず検証環境で確認する
・LTSサポート期間: MySQL 8.4 LTSは2032年4月まで、MariaDB 11.4 LTSは2029年5月まで。長期運用ならMySQLの方がサポート期間が長い
・Galera Cluster: Active-ActiveのマルチマスタークラスタリングはMariaDB独自機能。MySQLではInnoDB Cluster(Group Replication)を使うが、設定の複雑さとGalera Clusterは異なるアプローチ
Linuxサーバー上でのMySQL/MariaDB運用を体系的に学びたい場合は、Linux Master Pro Seminarでデータベース管理のハンズオン手順も扱っています。
本記事のまとめ
sysbenchでMariaDB vs MySQLをLinux上で比較した結果をまとめます。| テスト種別 | MySQL 8.4.2 | MariaDB 11.4.4 | 差 |
|---|---|---|---|
| oltp_read_only(8スレッド・60秒) | 2,508 TPS | 2,486 TPS | 約1%(誤差範囲) |
| oltp_read_write(8スレッド・60秒) | 1,039 TPS | 1,003 TPS | 約4%(設定次第で逆転あり) |
セルフホスト選択の実務的な結論です。
・参照系が多いWebアプリ: どちらでも差はないので、OSディストリ標準に合わせる
・書き込みが多いOLTP: MySQL 8.4がわずかに有利だが、チューニングで逆転する可能性がある
・Galera Cluster(マルチマスター)が必要: MariaDB一択
・長期LTS重視: MySQL 8.4(2032年4月まで)
・Debian/Ubuntuで管理コスト重視: MariaDB(OSのパッケージ管理と相性が良い)
性能差そのものは誇張されていることが多く、実際には初期設定とチューニングの方が結果を左右します。まず手元の環境でsysbenchを実行して自分のサーバーの実測値を取ることをお勧めします。
MySQL/MariaDBを含むLinuxサーバー管理の実践スキルをハンズオンで習得できるセミナーを開催しています。
>> Linux Master Pro Seminar の詳細を見る
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:MariaDBのBackupファイルをrsyncでリモートサーバーへ転送して世代保管する手順|shell活用
- この記事の属するカテゴリ:データーベース管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます