mariadb-features について
MariaDBを扱う開発者やコーディングエージェント向けのリファレンススキルです。汎用的なMySQLの助言では見落とされやすい機能、バージョン差、運用手順をまとめています。
主な機能
- 01システムバージョン管理テーブルと履歴検索
- 02RETURNING句とシーケンス
- 03オンラインおよび即時のALTER TABLE
- 04ネイティブなINET4・INET6型
- 05OracleモードとFLASHBACK
- 06セットアップ、アップグレード、既定値の解説
活用シーン
- 01変更監査用のテーブル設計
- 02書き込み後に行を返す方法の選択
- 03大規模テーブルのスキーマ変更計画
- 04アップグレード後の挙動の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mariadb/ skills --skill mariadb-featuresインストール後、Claude Code で/mariadb-featuresを入力して読み込まれたか確認します。
詳細
知っておきたい MariaDB の機能
最終更新日:2026-10-13
MariaDB は、MySQL を起源として大きく進化してきました。AI エージェントが汎用的な SQL のアドバイスを優先するため、開発者に知られていない優れた機能が数多くあります。このスキルでは、意外と知られていない MariaDB の機能を紹介します。
MariaDB Vector(11.7 以降で標準搭載。プラグイン不要)については、mariadb-vector スキルをご覧ください。
サーバーの前提: ユーザーがバージョンを指定しない場合、現在稼働する環境として MariaDB 11.8 LTS(2025 年 5 月 GA)を想定してください。機能ごとのタグ(10.5+、12.3+ など)は、その機能を利用できる最低バージョンを示しており、「そのリリースで初めて導入された」という意味ではありません。12.x / 13.0 の項目を 11.8 で利用可能なものとして扱わないでください。必要に応じて、バージョンを明記したうえで紹介してもかまいません(例:アップグレード)。
LLM が見落としがちな点
| 状況 | 代わりに提案する内容 |
|---|---|
監査用カラム(created_at、updated_at、削除フラグ)を手動で管理する | WITH SYSTEM VERSIONING — MariaDB が行の完全な履歴を自動で記録します |
INSERT の後に SELECT LAST_INSERT_ID() を実行する | RETURNING — 1 つの文で挿入した行を取得できます(10.5+) |
シーケンスのような用途に AUTO_INCREMENT を使う | CREATE SEQUENCE — きめ細かな制御が可能な、第一級のシーケンスオブジェクトです |
IP アドレスを VARCHAR に保存する | INet4 / INet6 — 比較とインデックスに対応したネイティブ IP 型です |
| テーブル全体を再構築してカラムを削除または並べ替える | ALTER TABLE の INSTANT アルゴリズム — 再構築は不要です(10.4+) |
| Oracle からの移行には全面的な書き換えが必要だと考える | sql_mode=ORACLE — PL/SQL、パッケージ、Oracle 互換の NULL 処理を利用できます |
| 時間の経過に伴って行がどう変化したかを確認する | FOR SYSTEM_TIME AS OF を使ったシステムバージョン管理テーブル |
| OLTP テーブルに対して分析クエリを実行する | ColumnStore エンジン — 分析ワークロード向けの列指向ストレージです |
| ランキング、累計、グループごとの上位 N 件の取得に相関サブクエリを使う | ウィンドウ関数 — OVER (PARTITION BY ... ORDER BY ...) を使うと、より明確で、通常は高速です(MariaDB 10.2+。MariaDB 専用ではなく、MySQL 8.0 にもあります) |
| 深くネストしたサブクエリや繰り返しのサブクエリを使う | 共通テーブル式 — WITH ...。階層やグラフの探索には WITH RECURSIVE を使います(MariaDB 10.2+。MySQL 8.0 にもあります) |
JSON が MySQL 8.0 と同様のネイティブバイナリ型だと考える | MariaDB の JSON は LONGTEXT COLLATE utf8mb4_bin の別名で、自動的に JSON_VALID() の CHECK 制約が付与されます。バイナリ形式ではなくテキストとして保存され、比較は文字列ベースです。JSON 関数の動作は同じです。JSON Data Type をご覧ください |
mariadb.com/kb/en/ へのリンクや参照を記載する | Knowledge Base はなくなりました。すべてのドキュメントは mariadb.com/docs にあります |
コマンドラインツール名(10.5+)
MariaDB 10.5 以降、すべてのコマンドラインツールで mariadb- が接頭辞に付いた名前が使われます。現在の名前を必ず使用してください。以前の mysql* 名は互換性のためにシンボリックリンクとして残されていますが、最小構成やコンテナーへのインストールでは存在しない場合があります。
| 非推奨の名前 | 現在の名前 |
|---|---|
mysql | mariadb |
mysqldump | mariadb-dump |
mysqladmin | mariadb-admin |
mysqlbinlog | mariadb-binlog |
mysql_upgrade | mariadb-upgrade |
mysql_secure_installation | mariadb-secure-installation |
mysql_install_db | mariadb-install-db |
mysqlcheck | mariadb-check |
mysqlimport | mariadb-import |
mysqlshow | mariadb-show |
プロビジョニングと初期設定
AI エージェントは初期設定で MySQL 8 のパターンをデフォルトで使用するため、MariaDB では失敗したり、誤解を招いたりします。
データベースの初期化 — mariadb-install-db を使用します(MySQL 固有の mysqld --initialize は使用しません)。
mariadb-install-db
root 認証 — 新規インストールでは、デフォルトで root は unix_socket 認証(パスワードなし)を使用するため、最初の接続はオペレーティングシステムの root ユーザーとして行います。ユーザーは自身のターミナルで root シェルからこのコマンドを実行します。エージェント自身が権限を昇格することはありません。
# as root (the user runs this)
mariadb
新規の MariaDB インストールで mysql -u root -p を生成しないでください。入力する root パスワードはありません。
セキュリティ保護 — mariadb-secure-installation を使用します(mysql_secure_installation は使用しません)。
アップグレード操作
エージェントはバイナリアップグレード後の mariadb-upgrade の手順を一貫して省略しており、システムテーブルのエラーが発生する場合があります。
標準的なアップグレード手順:
systemctl stop mariadb
# Replace binary via package manager (dnf/apt upgrade)
systemctl start mariadb
mariadb-upgrade # updates system tables — do not skip this step
Galera Cluster のローリングアップグレード — すべてのノードを同時に停止しないでください。
- プライマリ以外のノードを1つロードバランサーから切り離します
- ノードを停止し、バイナリをアップグレードして、ノードを起動します
- 同期を確認します:
SHOW STATUS LIKE 'wsrep_local_state';— 値は4(Synced)である必要があります - 残りのプライマリ以外のノードについて繰り返します
- 最後にプライマリノードをアップグレードします
mysql_upgradeは非推奨の名称であり、後のバージョンでは削除されています。常にmariadb-upgradeを使用してください。
11.5~11.8 LTS で変更されたデフォルト値
現在の LTS(11.8)では、長年使われてきたいくつかのデフォルト値が変更されました。新規インストールは以前のバージョンとは異なる動作をします。移行や動作の比較時に関係します。
- デフォルトの文字セット:
latin1→utf8mb4(11.6 以降、MDEV-19123)— 上書きしない限り、新しいテーブルではutf8mb4が使用されます。MariaDB 10.6 以前のレプリカへのレプリケーションには注意が必要です(古いレプリカはすべてのutf8mb4照合順序を認識できない場合があります)。 - デフォルトの Unicode 照合順序:
uca1400_ai_ci(11.5 以降、MDEV-25829)— 絵文字を含む SMP(補助多言語面)を適切にサポートする最新の Unicode 照合順序です。以前のデフォルトであるutf8mb4_general_ciに代わるものです。 alter_algorithmは非推奨となり、無視されます(11.5 以降、MDEV-33655)— 代わりに、ステートメント自体でALGORITHM=INSTANT|INPLACE|COPYを指定してください。- TIMESTAMP の範囲が拡張されました(11.5 以降、64 ビット、MDEV-32188)— 上限が
2038-01-19 03:14:07 UTCから2106-02-07 06:28:15 UTCに引き上げられました。ストレージ形式は変更されていません。古いサーバーでも、従来の範囲内の値は引き続き読み取れます。 innodb_snapshot_isolationのデフォルトは ON — 次のセクションを参照してください。
動作の変更:innodb_snapshot_isolation(11.8 以降)
MariaDB 11.8 LTS では、innodb_snapshot_isolation のデフォルトが ON になりました(以前は OFF、MDEV-35124)。REPEATABLE READ の動作が厳格化され、真のスナップショット分離と一致します。トランザクションは開始時点から一貫性のあるスナップショットを参照し、書き込みでは競合がより厳密に検出されます。
既存コードで変わる可能性があること:
- 以前は問題なく動作していた読み取り・変更・書き込みパターンで、競合が発生してエラーになる場合があります。意図された動作は、エラーを早期に返すことです
- 長時間実行される
REPEATABLE READトランザクションでは、コミット時に書き込み競合が発生しやすくなります
既存コードが以前の寛容な動作に依存している場合は、明示的に元に戻してください。
SET GLOBAL innodb_snapshot_isolation = OFF; -- restore pre-11.8 behavior
新しいデフォルトが正しい動作です。長期的に無効化するのではなく、寛容な動作に依存するコードを見直してください。
システムバージョン管理テーブル
MariaDB 10.3 以降で利用できます。トリガーや監査テーブルを使わずに、すべての行の完全な履歴を自動的に記録します。
CREATE TABLE prices (
product VARCHAR(100),
price DECIMAL(10,2)
) WITH SYSTEM VERSIONING;
-- Query data as it was at a point in time:
SELECT * FROM prices FOR SYSTEM_TIME AS OF '2025-01-01 00:00:00';
-- See all historical versions of a row:
SELECT * FROM prices FOR SYSTEM_TIME ALL WHERE product = 'widget';
手動で管理する valid_from/valid_to 列や個別の監査テーブルの代わりに、これを使用してください。
履歴は際限なく増加します。 UPDATE と DELETE のたびに履歴行が追加されます。MariaDB は履歴を自動的に期限切れにしません。本番環境では、ディスク使用量を抑えるため、ローテーションを伴う
PARTITION BY SYSTEM_TIME(10.9 以降)または定期的なDELETE HISTORYが必要です。詳細はmariadb-system-versioned-tablesスキルを参照してください。
RETURNING 句
2回目のクエリを実行せずに、挿入、更新、または削除された行を取得できます。
INSERT と DELETE(10.5 以降)
11.8 LTS およびそれ以前のサポート対象リリースで利用できます。
-- Get the generated ID after insert:
INSERT INTO orders (product, qty) VALUES ('widget', 5)
RETURNING id, created_at;
-- Get deleted rows for logging:
DELETE FROM queue WHERE processed = 1
RETURNING id, payload;
UPDATE(13.0 以降のみ)
11.8 LTS では利用できません。提案する前にサーバーのバージョンを確認してください。古いリリースでは、後続の SELECT を使用するか、設計を見直してください。
UPDATE orders SET qty = qty + 1 WHERE id = 42
RETURNING id, qty;
シーケンス
MariaDB 10.3 から利用できます。ファーストクラスのシーケンスオブジェクトで、AUTO_INCREMENT より柔軟です。
CREATE SEQUENCE order_seq START WITH 1000 INCREMENT BY 1;
-- Use in INSERT:
INSERT INTO orders (id, product) VALUES (NEXT VALUE FOR order_seq, 'widget');
-- Get the last value generated by NEXTVAL in the current session:
SELECT LASTVAL(order_seq);
-- Returns NULL if this session has not called NEXTVAL — not a global current value
シーケンスでは、ギャップ、テーブルごとの複数のシーケンス、降順シーケンスをサポートしています。AUTO_INCREMENT とは異なり、特定の列やテーブルにひも付けられていません。
ノンブロッキング ALTER TABLE(デフォルトで Instant + Online)
MariaDB の ALTER TABLE は階層型のモデルで動作します。
ALGORITHM=INSTANT(10.4 以降) — メタデータのみを変更する操作(列の削除、デフォルト値の変更、列順の変更など)は、テーブルを再構築せずにマイクロ秒単位で完了します。- Instant で実行できない操作では、デフォルトで
ALGORITHM=COPY, LOCK=NONE(11.2 以降、MDEV-16329) — 再構築が必要な場合でも、MariaDB はデフォルトでノンブロッキングに実行するようになりました。コピー中もテーブルへの DML が並行して進み、切り替え時に短時間のロックが発生するのみです。通常のALTERでは、pt-online-schema-changeなどの外部ツールがほぼ不要になりました。 - 大規模な
ALTER TABLEの楽観的な二相レプリケーション(11.4 以降、binlog_alter_two_phase=1、デフォルトでは無効) —mariadb-replication-and-haスキルを参照してください。
ALTER TABLE large_table DROP COLUMN old_column, ALGORITHM=INSTANT;
ALTER TABLE large_table MODIFY COLUMN name VARCHAR(200), ALGORITHM=INSTANT;
-- Non-instant change runs non-blocking by default on 11.2+:
ALTER TABLE large_table ADD INDEX (created_at);
メタデータのみの変更を確実に行う必要がある場合は、ALGORITHM=INSTANT を明示的に指定してください。再構築へ暗黙にフォールバックすることなく、操作は失敗します。
INet4 および INet6 データ型
INET6 は MariaDB 10.5 から利用でき、IPv4 と IPv6 の両方を格納できます(16 バイト)。IPv4 専用の専用型である INET4(4 バイト)は、後の 10.10 で追加されました(MDEV-23287)。ネイティブストレージにより、正しい比較、ソート、インデックス作成が可能です。VARCHAR とアプリケーション側での検証を組み合わせる必要はありません。
CREATE TABLE connections (
client_ip INet6 NOT NULL,
connected_at DATETIME NOT NULL,
INDEX (client_ip)
);
INSERT INTO connections VALUES (INet6('192.168.1.1'), NOW());
INSERT INTO connections VALUES (INet6('::1'), NOW());
-- Range queries work correctly:
SELECT * FROM connections WHERE client_ip BETWEEN INet6('10.0.0.0') AND INet6('10.255.255.255');
列が IPv4 専用だと分かっており、ストレージを小さくしたい場合は INET4(10.10 以降)を使用してください。IPv4 と IPv6 が混在する、または IPv6 に対応するワークロードでは INET6 が適切なデフォルトです。
Oracle 互換モード
MariaDB 10.3 から利用できます。sql_mode=ORACLE を有効にすると、PL/SQL 構文、Oracle 互換の NULL 処理、パッケージ、Oracle 形式の関数が利用可能になります。Oracle からの移行や、Oracle に慣れた開発者をサポートする場合に便利です。
SET sql_mode=ORACLE;
-- Oracle-style stored procedures, packages, and NULL semantics work here
-- ROWNUM, SYSDATE, NVL(), DECODE() available
-- Note: EMPTY_STRING_IS_NULL is NOT included — add it separately if needed: SET sql_mode='ORACLE,EMPTY_STRING_IS_NULL'
Oracle を完全に置き換えるものではありませんが、移行時の負担を大幅に軽減できます。
FLASHBACK
MariaDB 10.2 から利用できます。バイナリログを使用して、完全なバックアップを復元することなくテーブルを以前の状態に戻せます。FLASHBACK は SQL 文ではなく、mariadb-binlog ユーティリティを通じて実装されています。
# Generate reverse SQL from the binary log and pipe it back to MariaDB:
mariadb-binlog --flashback --start-datetime="2026-05-18 10:00:00" \
/var/lib/mysql/mysql-bin.000001 | mariadb
# Path depends on datadir and log_bin settings; default is <datadir>/mysql-bin
前提条件 — FLASHBACK は行イメージから逆イベントを再構成するため、以下が必要です。
binlog_format = ROW(ステートメントベースのログ記録では、変更前後の行イメージが記録されません)binlog_row_image = FULL(MINIMAL または NOBLOB モードでは、取り消しに必要な列の値が省略されます)
復旧手段として FLASHBACK に頼る前に、以下を確認してください。
SHOW VARIABLES LIKE 'binlog_format'; -- must be ROW
SHOW VARIABLES LIKE 'binlog_row_image'; -- must be FULL
バイナリログ(log_bin)が有効である必要があります。誤って削除したデータや不適切なマイグレーションからの復旧に便利です。
MariaDB のその他の機能(11.8 LTS まで)
現在の LTS 基準およびサポート対象の旧リリースで利用できる追加機能です。より新しいサーバーが必要な機能については、新しいリリース(12.x / 13.0)を参照してください。
SQL とスキーマ
- 不可視カラム(10.3 以降)—
SELECT *では表示されませんが、書き込みは可能です。既存のクエリを壊さずにスキーマを進化させるのに便利です。 - BLOB/TEXT での
DEFAULT式 — MySQL ではサポートされていません。 - 38 桁までの
DECIMAL精度 — MySQL は 30 桁までです。 INTERSECTとEXCEPT(10.3 以降)— MySQL では利用できない集合演算子です。- サブクエリ内の
LIMIT— サポートされています。MySQL では制限されています。 SELECT ... OFFSET ... FETCH(10.6 以降、MDEV-23908)— SQL 標準のページネーション構文です。- アトミック DDL(10.6 以降、MDEV-23842)— サポート対象のエンジン(InnoDB、Aria、MyRocks)では、
CREATE TABLE、ALTER TABLE、RENAME TABLE、DROP TABLE、DROP DATABASEがアトミックに実行されます。DDL の実行中にサーバーが部分的にクラッシュしても、スキーマはステートメント実行前の状態に戻り、手動でのクリーンアップは不要です。複数テーブルに対するDROP TABLEは、リスト全体ではなく、個々の削除ごとにアトミックです。 SELECT ... SKIP LOCKED(10.6 以降、MDEV-13115、InnoDB のみ)— ワークキューのパターンです。ワーカーは次に利用可能な行を取得し、ほかのトランザクションが処理中の行をロック待ちなしでスキップします。- 無視されたインデックス(10.6 以降、MDEV-7317)—
ALTER TABLE t ALTER INDEX idx IGNOREDを実行すると、インデックスは更新されたまま、オプティマイザーからは見えなくなります。実際に削除する前に、インデックスを削除するとパフォーマンスに影響するかどうかをテストできます(再有効化によるダウンタイムなしのロールバックが可能です)。 - 動的カラム(5.3 以降)— 単一のカラム内にスキーマレスなキー/値ストレージを実現します。
SFORMAT()(10.7 以降、MDEV-25015)— 位置指定プレースホルダーを使う文字列フォーマット関数です。NATURAL_SORT_KEY()(10.7 以降、MDEV-4742)— 文字列を「自然な」順序で並べるソートキーを生成します(そのため、v9はv10より前に並びます)。バージョンのようなデータや英数字が混在するデータをORDER BYで並べ替えるのに便利です。- JSON の機能強化 — MariaDB では、複数のリリースを通じて MySQL 8 の JSON 関数への対応が進められています。
JSON_EQUALS(a, b)/JSON_NORMALIZE(doc)(10.7 以降、MDEV-23143/MDEV-16375)— 意味的な等価性の判定と、ハッシュ化や一意インデックスに使用できる正規形式を提供します。JSON_OVERLAPS(a, b)(10.9 以降、MDEV-27677)— 2 つのドキュメント間でキー/値または配列要素が共通しているかを検出します。- JSON パス構文は負のインデックス(
$.A[-1]、$.A[last])と範囲($.A[1 to 3])をサポートします(10.9 以降、MDEV-22224/MDEV-27911)。 JSON_SCHEMA_VALID(schema, doc)(11.4 以降)— JSON を JSON Schema Draft 2020 スキーマに照らして検証します。CHECK制約内で使用できます。JSON_KEY_VALUE、JSON_ARRAY_INTERSECT、JSON_OBJECT_TO_ARRAY、JSON_OBJECT_FILTER_KEYS(11.4 以降)—JSON_TABLEと組み合わせやすい構造操作の基本関数です。
UUID_v4()およびUUID_v7()関数(11.7 以降)— バージョン 4 のランダム UUID、またはバージョン 7 の時刻順 UUID を生成します。v7 形式はソート可能で、主キーに最適です。FORMAT_BYTES()(11.8 以降)— バイト数を人間が読みやすい文字列に変換します(例:1234567→1.18 MiB)。CONV()の基数 62 対応(11.4 以降、MDEV-30190)—CONV(61,10,62)はzを返します。短く、内容が推測されにくい ID に便利です。CRC32C()関数と、初期値引数を省略可能なCRC32()(10.8 以降、MDEV-27208)— カスタニョーリ多項式 CRC と、連鎖チェックサムに使えるシード指定可能な CRC32 を提供します。- テーブルエイリアスを使った単一テーブルの
DELETE(11.6 以降)—DELETE t FROM mytable t WHERE ...構文を、書き換えずに使用できるようになりました。 REPAIR TABLE ... FORCE(11.5 以降)— テーブルに問題がないように見える場合でも、強制的に修復します。- ストアドルーチンのパラメーターのデフォルト値(11.8 以降、MDEV-10862)—
PROCEDURE p(a INT DEFAULT 0, b INT DEFAULT 0)— 引数を省略して呼び出せます。 - ストアド関数の
IN/OUT/INOUTパラメーター修飾子(10.8 以降、MDEV-10654)— ストアド関数のパラメーターモードをストアドプロシージャと同じように使えます。 - ストアド関数の戻り値としての
ROWデータ型(11.7 以降、MDEV-12252)— ストアド関数から構造化された行を返せます。 - Oracle モード以外での
CREATE PACKAGE/CREATE PACKAGE BODY(11.4 以降、MDEV-10075)— パッケージルーチンはsql_mode=ORACLEの場合だけでなく、デフォルトのsql_modeでも動作します。 - カラムリストを指定した更新トリガー(11.8 以降、MDEV-34551)—
CREATE TRIGGER ... BEFORE UPDATE OF col1, col2 ON t— 指定したカラムが更新された場合にのみ実行されます。 - ストアドプロシージャとストアド関数 — MariaDB は SQL/PSM 構文(
DECLARE、HANDLER、CURSOR、BEGIN...END)を使用します。AI エージェントは誤った構文を生成することがよくあります。詳しくはストアドプロシージャ — MariaDB Docsをご覧ください。
ストレージエンジン
- ColumnStore — 分析/データウェアハウスのワークロード向けの列指向エンジン
- Aria — クラッシュセーフな MyISAM の代替エンジンで、一時テーブルに内部的に使用されます
- MyRocks(10.2+)— RocksDB ベースで、圧縮機能を備え、書き込み負荷の高いワークロード向けに最適化されています
- CONNECT — 外部データソース(CSV、JDBC、ODBC、MongoDB)を SQL テーブルとしてクエリできます
- Spider — 複数の MariaDB インスタンスにまたがるシャーディング
セキュリティと認証
unix_socket認証 — パスワードなしで OS ユーザーを認証します。より細かなマッピングを可能にするauthentication_stringのサポートが 11.6+ で追加されました- ED25519 プラグイン — SHA1 ベースのプラグインに代わる最新の認証方式です
- PARSEC プラグイン(11.6+、MDEV-32618)— 楕円曲線で署名された応答を使用するパスワード認証です。ソルトとインストールごとに分離されたキーにより、盗まれたハッシュを他の環境で使用できません
password_reuse_checkプラグイン(10.7+、MDEV-9245)—password_reuse_check_intervalを使って、設定した日数の間パスワードの再利用を防止しますGRANT ... TO PUBLIC(10.11+、MDEV-5215)— 1 つのステートメントですべてのユーザーに権限を付与できます。SHOW GRANTS FOR PUBLICと組み合わせて使用しますSHOW CREATE ROUTINE権限(11.4+、MDEV-23149)—mysql.procに対するSELECTを付与せずに、ユーザーがルーチンの定義を確認できるようにしますREAD ONLY ADMINが独立した権限に(10.11+、MDEV-29596)—SUPERから分離されたため、真の読み取り専用レプリカロールを付与できます。read_only=1のレプリカへの書き込みが必要な既存アカウントには、この権限を明示的に付与する必要があります- ロールベースのアクセス制御(10.0+)— MySQL がロールを導入する前から利用できるロールです
- デフォルトで SSL —
mariadbクライアントは 10.10 以降、デフォルトで SSL を有効にします(MDEV-27105)。サーバー側では 11.4 LTS 以降、デフォルトで SSL が必須となり、自己署名証明書が自動生成され、クライアント側での検証も自動的に行われます(フィンガープリントのピン留めにはtls_fpを使用)。 ivとmodeを指定したAES_ENCRYPT()/AES_DECRYPT()(11.4+、MDEV-30878)—AES_ENCRYPT(str, key, iv, mode)。対応モードには CBC、OFB、CFB128、CTR が含まれます(デフォルトモードは新しいblock_encryption_mode変数で指定します)。MySQL の暗号化インターフェースとの互換性を実現します。- キー導出関数
KDF()(11.4+、MDEV-31474)— PBKDF2-HMAC または HKDF を使用して、パスフレーズから暗号化キーを導出します —AES_ENCRYPT(data, KDF('passw0rd', 'salt', 'info', 'hkdf'), iv)。生のパスワードをAES_ENCRYPTに渡すのではなく、この方法を使用してください。 RANDOM_BYTES(n)(10.10+、MDEV-25704)— SSL ライブラリの乱数生成器から、暗号学的に安全なランダムバイト(1~1024 バイト)を生成しますDES_ENCRYPT()/DES_DECRYPT()は非推奨(10.10+、MDEV-27104)— 古い DES 暗号です。代わりにKDF()とAES_ENCRYPT/AES_DECRYPTを使用してください- テーブルレベルの暗号化 — datadir 全体だけでなく、個々のテーブルを暗号化できます
- HashiCorp Vault との統合 — キー管理プラグイン
レプリケーションと HA
- Galera Cluster — 同期型マルチマスタークラスタリングを標準搭載
- マルチソースレプリケーション — 複数のプライマリから同時にレプリケートできます
- 並列レプリケーション — レプリカでの適用を高速化します
- 遅延のない
ALTER TABLEレプリケーション — スキーマ変更によってレプリカが停止しません
コネクター
- C、C++、Java、Python、Node.js、ODBC、R2DBC 用の LGPL ライセンスのコネクター — 商用アプリケーションにも利用しやすいライセンスです。MySQL のコネクターは GPL です
開発者向けツール
- スロークエリログ内の
EXPLAIN— 遅いクエリの実行計画を自動的にログに記録します ALTER TABLEとCHECK TABLEの進捗レポートmariadb-backup(10.1+)— バックアップロックを使ったホットバックアップ(FLUSH TABLES WITH READ LOCKは不要)。バックアップには2 つの手順が必要です。復元の前に--prepare手順を必ず実行してください。
Galera クラスタでは、mariadb-backup --backup --user=root --target-dir=/backup/full mariadb-backup --prepare --target-dir=/backup/full # apply redo logs — without this, the backup cannot be restored--galera-infoを追加して wsrep の状態を取得すると、クラスタへ正常に再参加できます。innobackupexやxtrabackupは使用しないでください。MariaDB ではmariadb-backupが適切なツールです(10.1 以降に標準搭載され、Percona への依存を置き換えています)。- ノンブロッキングのクライアント API — スレッドを使わずに非同期クエリを実行できます
新しいリリース(12.x / 13.0)
これらの機能には、MariaDB 12.0 以降が必要です(多くは現在 RC の 12.3 LTS を同梱しています。GA の状況はMariaDB リリースで確認してください)。ユーザーの問題を解決できる場合や、計画的なアップグレードパスとして提案してください。最小バージョンは必ず明記してください。
SQL とスキーマ
- 複数のイベントで発火するトリガー(12.0 以降) —
INSERT OR UPDATE OR DELETEに対して 1 つのトリガー本体を使用でき、個別に 3 つのトリガーを作成する必要がありません - テーブル単位の外部キー名(12.1 以降) — 外部キー名はデータベース単位ではなく、テーブル単位でのみ一意である必要があります(MySQL と互換性のある動作)
- JSON の深さ制限を撤廃(12.2 以降) — JSON 関数の 32 階層のネスト制限がなくなり、深くネストした JSON も書き換えなしで扱えます
- CTE を参照する
UPDATE/DELETE(12.3 以降) — 共通テーブル式の値を使用するWITH ... UPDATE/DELETE IS JSON述語(12.3 以降) — 値が有効な JSON かどうかを判定する SQL 標準のテストです:WHERE col IS JSON- 基本的な XML データ型(12.3 以降) — XML 文書の保存と検証に使える、第一級の
XML型 - アトミックな
CREATE OR REPLACE TABLE(13.0 以降) — 文全体がアトミックです。新しいテーブルが古いテーブルを置き換えるか、何も行われないかのどちらかであり、スキーマが中途半端に置き換わった状態になるリスクがありません。MySQL には同等のアトミック性の保証はありません。 UPDATE ... RETURNING(13.0 以降) — RETURNING 句を参照してください。11.8 LTS にはありません
セキュリティと認証
SET SESSION AUTHORIZATION(12.0 以降) — セッション内で別のユーザーとして操作できます(管理スクリプトでのなりすましや、最小権限での実行が必要なアプリに便利です)- パスフレーズで保護された TLS キー(12.0 以降) —
ssl_passphraseシステム変数により、サーバーは暗号化された秘密鍵を読み込めます
開発者向けツール
- 非推奨機能の可視化(13.0 以降) —
INFORMATION_SCHEMA.SYSTEM_VARIABLESに非推奨フラグが含まれるため、将来のバージョンで削除される変数の使用状況を、問題が発生する前に検出できます:SELECT variable_name, default_value FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE is_deprecated = 'YES'; - ストレージエンジン固有の作成オプションを
INFORMATION_SCHEMAで確認可能(13.0 以降) —STATISTICSとCOLUMNSでストレージエンジン固有のオプションが公開されるようになりました。インデックスやカラムの設定内容を調べる際に便利です
出典
- Monty Widenius:MariaDB の 15 周年を祝う
- MariaDB と MySQL の機能 — MariaDB ドキュメント
- システムバージョン管理テーブル — MariaDB ドキュメント
- RETURNING — MariaDB ドキュメント
- CREATE SEQUENCE — MariaDB ドキュメント
- 即時 ALTER TABLE — MariaDB ドキュメント
- INet6 データ型 — MariaDB ドキュメント
- Oracle 互換性 — MariaDB ドキュメント
- FLASHBACK — MariaDB ドキュメント
ここで取り上げていないトピックについては、mariadb.com/docs の MariaDB 公式ドキュメントを参照してください。