2024.12.11

MariaDB

MariaDB Enterprise Server 10.6.20-16(リリース日:2024年12月10日)

バックポート

  • 新しい詳細なレプリケーションラグ表現
    • SHOW REPLICA STATUSのSeconds_Behind_Masterフィールドは、特に並列レプリケーション、遅延レプリケーション、またはオプション sql_slave_skip_counterが使用されている時に、複雑でわかりにくい場合があります。レプリケーションラグの一貫したビューを提供するために、IOスレッドおよびSQLスレッドの状態に関する具体的なタイミング情報を提供する3つの新しいフィールドがステートメントの出力に追加されました。
    • レプリカステータスに3つの新しい値が追加されました:
      • Master_last_event_time
        IOスレッドによってプライマリから読み取られた最後のイベントのタイムスタンプ
      • Slave_last_event_time
        レプリカでコミットされた最後のイベントのプライマリからのタイムスタンプ
      • Master_Slave_time_diff
        上記の2つのタイムスタンプの差
  • パスワード関連データの新しい情報スキーマテーブル
    新しい情報スキーマビュー USERSが追加されました。これを使用して、DBAはユーザーのパスワード関連情報についての洞察を得ることができます。この情報は、次のように使用されることがあります:

    • 有効期限が近づいているパスワードや、間違ったパスワードの入力回数によってブロックされる危険性のあるアカウントについてユーザーに通知するためにアプリケーションによって
    • DBAが無効なパスワードを多数入力したためにブロックされたユーザーを照会するために
    • 新しいビューには、次のフィールドが含まれます:
      • USER - ユーザー名とホストを含む文字列
      • PASSWORD_ERRORS - 入力された間違ったパスワードの現在の数を示すカウンター
        • 正しいパスワードが入力されると0にリセットされます
        • max_password_errorsに達すると、アカウントはブロックされます
        • CONNECTION ADMIN権限を持つアカウントの場合はNULL
      • PASSWORD_EXPIRATION_TIME - パスワードの有効期限が切れる日時、または、パスワードの有効期限が切れない場合はNULL
  • GTIDバイナリログイベントにスレッド IDが含まれるようになりました
    • スレッド IDと対応するステートメントをバイナリログから取得できるようになりました
    • mariadb-dumpの出力にもスレッド IDが含まれます

注目すべき変更点

  • --quickモードで使用する場合にフィールド幅を制限するための新しいパラメータ --quick-max-column-widthが利用できるようになりました
  • JSON_TABLEではデフォルトの列値を指定できますが、文字列定数として指定する必要がありました
    • このパッチを使用すると、デフォルト値を任意のリテラル (文字列、整数、小数、日付リテラルなど) として指定できます
      例:

      select *
      from
      json_table('{"a": "123"}',
      '$' columns(col1 INT path '$.a' default 1 on empty)) as T;
      
      select *
      from
      json_table('{"a": "123"}',
      '$' columns(col1 date path '$.date' default date '2020-01-01' on empty)) as T;
  • 新しいオプション --skip-freed-pagesが追加されました
    • このオプションを使用すると、解放されたUNDOログを既存のUNDOログページとして報告することをスキップできます

ストレージエンジンの変更

  • このリリースには、MariaDB ColumnStoreエンジン バージョン23.10.2が組み込まれています。

修正された問題

データ損失が発生する可能性があるもの

  • ページの作成と削除の間にまれに発生する競合状態が原因で破損が発生する可能性があります
    • エラーログに"[ERROR] InnoDB: Trying to read ... bytes at ... outside the bounds of the file"などのエラーが表示されます
  • 圧縮列またはGIS列でgroup_concatを使用すると、これらのデータタイプを含むテーブルでgroup_concat操作を実行するユーザーに対して、サーバークラッシュや潜在的なデータ破損が発生する可能性があります
  • DELETE HISTORYステートメントを含むDMLの後にシステムバージョン管理されたテーブルで一意のハッシュインデックスが破損し、データ破損と'Record in index not found on update'というエラーが発生します

ハングまたはクラッシュを引き起こす可能性があるもの

  • Total Order Isolation (TOI)を使用してSRトランザクションの進行中にALTER TABLEを実行すると、フリーズが発生し、サーバーエラー "InnoDB: WSREP: BF lock wait long for trx"が発生します
  • クエリに tblX.column=column_or_constant構造のHAVING句があり、オプティマイザーがテーブル tblXが定数テーブルであると推測できた場合、クエリによってクラッシュが発生する可能性がありました。HAVING句は元のクエリからのものである場合もあれば、条件プッシュダウン最適化からのものである場合もあることに注意してください
  • SPIDERエンジンのUDFを呼び出すと、SPIDERストレージエンジンプラグインをロードできなかった場合にクラッシュが発生します
  • XA PREPAREを使用すると、InnoDBがハングする場合があります
  • Windows Subsystem for Linuxでは、ALTER TABLEまたはOPTIMIZE TABLEでInnoDBがクラッシュします
  • wsrep_allowlistテーブルに無効な値を追加した後、wsrep_cluster_addressを設定するとサーバーがクラッシュします
  • --init-fileターゲットが存在しない場合、mariadbdが起動時にハングします
  • 関数 DEFAULT()がクエリの一部である場合にサーバーがクラッシュする可能性があります
  • 待機ポイント = AFTER_SYNCで準同期レプリケーションを使用してDDLを実行すると、プライマリが停止します
  • XAトランザクションでのBACKUP STAGE BLOCK_COMMIT中にレプリカでデッドロックが発生します
  • MariaDB Enterprise クラスター (Galera) ノードがクラッシュする状況で、一部のスレッドはまだ動作しています。これはエラーログで確認できますが、このログにはノードによって書き込まれたエラーが引き続き表示されます。ノードが他のクラスターノードと正しく対話しなくなり、プライマリ状態を引き継ぐことをブロックするため、クラスター全体がハングします
  • SQLモード EXTENDED_ALIASESに切り替えて、SPIDERタイプのテーブルから選択すると、サーバーがクラッシュする可能性があります

予期しない動作を引き起こす可能性があるもの

  • ユーザーが--stop-positionを指定してmariadb-binlogを実行すると、出力にそのイベントまでのイベントが含まれていることが期待されます。出力にそのイベントまでのイベントが含まれていない場合、様々な予期しない動作が発生する可能性があります。例えば、出力をmariadbクライアントにパイプし、データベースで特定のトランザクションが実行されたと期待したが、実際には実行されなかった場合に、データベースの状態が不完全になることがあります
  • "ALTER TABLE...STATS_PERSISTENT=0"を使用してテーブルが変更され、その後削除された場合、テーブル名は再利用できません。これにより、ALTER TABLE...STATS_PERSISTENT=0が統計を削除できないというエラー"Can't write; duplicate key in table 'mysql.innodb_table_stats"が発生します
  • 外部キー制約で使用されているフィールドのデータタイプを変更すると、"Cannot change column '...': used in a foreign key constraint '...'"というエラーで失敗します
    • このALTERは、フィールドのタイプが複数のALTERステートメントで変更され、他のフィールドのタイプがALTERで変更される場合にのみ失敗します。
  • 定義にUNIONおよびSELECT ... FOR UPDATEを含むビューの作成は、"ER_PARSE_ERROR (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near..."というエラーで失敗します
  • 一部のコンテキストでは、整数部分がゼロに等しく小数部分がゼロに等しくない数値を含むテキスト文字列が、WHERE条件で誤ってFALSEと評価されました
  • MyISAMテーブルまたはARIAテーブルでのINSERT...SELECTは、MariaDB Enterprise Cluster (Galera)によって複製されます
  • Huawai Cloud S3および場合によっては他のS3プロバイダーを使用すると、Storage Engine S3で500エラーが発生します
    • 新しいオプション S3-providerが追加されました。Huawai Cloud S3では、S3-provider=Huawaiを設定する必要があります
  • JSON_TABLEで文字列の引用符が適切に解除されません
  • SpiderテーブルでのSELECT MINで、予想よりも多くの行が返されます
  • バックアップからinnodbテーブルを使用してシーケンスを選択的に復元できません
  • ジオメトリデータを含むLOAD DATA INFILEが失敗します
  • 位置パラメータが配列にバインドされたプリペアドステートメントモードでUPDATEステートメントを実行すると、テーブルを変更するために別のUPDATEステートメントを実行するBEFORE UPDATEトリガーがある場合に、更新される行の数が正しくなくなる可能性があります
  • リカバリでログの破損が認識されず、"log sequence number in the future"エラーメッセージが表示され、さらに破損が追加される可能性があります
    • ログの破損が認識されると、オプション innodb_force_recoveryを使用する場合にのみサーバーを起動できるようになりました
  • SET GLOBAL innodb_adaptive_hash_index=ONが設定されている場合、FULLTEXT SEARCHを使用したALTER TABLE...IMPORT TABLESPACEによってアダプティブハッシュインデックスが破損する可能性があります
  • InnoDBは変更バッファをROW_FORMAT=COMPRESSEDテーブルにマージできません。これにより、ROW_FORMAT=COMPRESSEDテーブルのセカンダリインデックスが破損し、それらのセカンダリインデックスを使用するクエリの結果が間違ってしまう可能性があります
    • CHECK TABLEは破損を通知します
    • OPTIMIZE TABLEは破損を修正します
  • トランザクションが実行されてもエラー/警告は返されません (トランザクションエンジンと非トランザクションエンジンを含む)
    • 実験的なオプション wsrep_mode=REPLICATE_ARIAを使用する場合、トランザクションにはトランザクションエンジンと非トランザクションエンジンを使用するテーブルへの変更が含まれる可能性があります。しかし、競合が発生した場合は、トランザクションエンジンの変更のみがロールバックされます
    • 注意: 実験的な機能は本番環境で使用しないでください
  • 即座に削除されたBLOB列の後の正しいINSERTで予期しないエラー "Row size too large (> 8123)..."が発生します
  • MariaDB Enterprise Clusterのセカンダリノードのbinlogタイムスタンプが間違っている
  • InnoDBは、リークされたUNDOログページが含まれている場合、システムテーブルスペースを縮小できません。XA PREPAREトランザクションが存在する場合、または、前回のシャットダウンがinnodb_fast_shutdown=0で実行されなかった場合、未使用セグメントの解放に失敗します
    • 起動時にディスク領域を解放するためには、システムテーブルスペースに :autoshrink属性が設定される必要があります
  • MariaDB Enterprise Audit PluginがACLクエリをログに記録するように設定されている場合、パスワードを含むステートメント CREATE USER .. IDENTIFIED VIA ed25519 USING PASSWORD(...)がログに記録されます
  • MariaDB Enterprise Audit PluginがACLクエリをログに記録するように設定されている場合、CREATE USER .. IDENTIFIED BYではパスワードがマスクされますが、CREATE OR REPLACE USERやSET STATEMENT ... FOR CREATE USERではマスクされません

パフォーマンスに関連するもの

  • 他のトランザクションがプリペアド状態のXAトランザクションによって保持されているレコードのロックを取得しようとすると、それらのレコードが変更されていなくても、ブロッキングの問題が発生するバグ
    • これは、InnoDBストレージ エンジン、XAトランザクション、および非ブロッキングモードに影響します
  • BACKUP STAGE BLOCK_COMMITによってそれ以上のトランザクションコミットがブロックされると、MariaDB Enterprise Backupによってログレコードが不必要にコピーされます
    • また、バックアップが復元された後に、不完全なトランザクションをロールバックする作業も発生します
  • クエリの終了時にテーブルが閉じられると、Ariaの内部一時テーブルは変更された全てのブロックを不必要にディスクに書き込みます

プラットフォーム

エンタープライズライフサイクルに合わせて、MariaDB Enterprise Server 10.6.20-16は以下に対して提供されます:

  • AlmaLinux 8 (x86_64, ARM64)
  • AlmaLinux 9 (x86_64, ARM64)
  • Debian 11 (x86_64, ARM64)
  • Debian 12 (x86_64, ARM64)
  • Microsoft Windows (x86_64) (MariaDB Enterprise Clusterを除く)
  • Red Hat Enterprise Linux 8 (x86_64, ARM64)
  • Red Hat Enterprise Linux 9 (x86_64, ARM64, PPC64LE)
  • Rocky Linux 8 (x86_64, ARM64)
  • Rocky Linux 9 (x86_64, ARM64)
  • SUSE Linux Enterprise Server 12 (x86_64)
  • SUSE Linux Enterprise Server 15 (x86_64, ARM64)
  • Ubuntu 20.04 (x86_64, ARM64)
  • Ubuntu 22.04 (x86_64, ARM64)
  • Ubuntu 24.04 (x86_64, ARM64)

MariaDB Enterprise Serverの一部のコンポーネントは、全てのプラットフォームをサポートしていない可能性があります。


MariaDB Enterprise Server 10.6.20-16のリリースノート(MariaDB社ウェブサイト):
https://mariadb.com/docs/server/release-notes/mariadb-enterprise-server-10-6/10-6-20-16/


MariaDBプロダクト・サポート・サービス

MariaDB
MariaDBプロダクト・サポート・サービスは、MariaDBおよびその関連製品をご利用されているお客様へ、必要なソフトウェアや専門的なサポートなどを提供するサービスです。