2023.06.20

MariaDB

MariaDB Enterprise Server 10.4.30-20 GA版(リリース日:2023年6月13日)

修正されたセキュリティ脆弱性

CVE CVSS基本スコア
CVE-2022-47015 MariaDB CVEには CVSS基本スコアがありません。このCVEは、MariaDBエンジニアリングポリシーで定義された基準を使用して"medium(中)"と評価されています。

注目すべき変更点

  • InnoDBの内部パフォーマンスが向上しました。
  •  aria_log_dir_pathシステム変数は読み取り専用として追加されます。
    • --aria-log-dir-pathコマンドラインオプションがmariadb-backupに追加されました。
  • core_fileシステム変数のデフォルト値がNoneからOFFに変更されました。
  • innodb_buffer_pool_filename システム変数は動的に変更できなくなりました。
    • 以前のリリースでは、innodb_buffer_pool_dump_at_shutdownが有効になっている場合、SUPER権限を持つユーザーはinnodb_buffer_pool_filenameシステム変数の値を動的に変更できました:
      SET GLOBAL innodb_buffer_pool_filename='SOME_FILE_PATH'
    • このリリース以降、サーバーを起動する前に、設定ファイルでinnodb_buffer_pool_filenameシステム変数を設定する必要があります:
      [mariadb]
      innodb_buffer_pool_filename=SOME_FILE_PATH

修正された問題

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

  • バックアップがmariadb-backupで作成され、aria_log_dir_pathが設定されている場合、Ariaログはバックアップにコピーされません。
  • プライマリキーのないテーブルに対してシステムのバージョン管理が有効になっている場合、テーブルへの変更が適切にレプリケートされません。
  • パーティションテーブルにNOPAD照合順序を使用する列のプレフィックスインデックスが含まれている場合、ORDER BYを使用したクエリは間違った順序で行を返す可能性があります。
  • 一部の照合では、一意制約がUNIQUE(..) USING HASHで定義されている場合、重複値が受け入れられます。
  • ROW_FORMAT=REDUNDANTのInnoDBテーブルがDDLステートメントによって再構築されている時、キャッシュされたDML操作をその再構築されたテーブルに適用しようとしている間に、サーバーがクラッシュする可能性があります。
  • 長いUniqueは、Unicode照合順序では正しく機能しません。(照合順序の点で)等しい文字列は、文字列の長さが異なる場合、等しくないものとして比較されます。
  • innodb_buffer_pool_filenameが空の文字列に設定されている場合、サーバーはシャットダウン中にdatadirを削除しようとします。
    • このリリース以降、innodb_buffer_pool_filenameシステム変数は読み取り専用となり、動的に変更できなくなります。
  • slave_parallel_modeが楽観的であり、slave_parallel_threadsが0より大きい場合、シーケンスでInnoDBが使用されている場合、ALTER SEQUENCEは順序不順のbinlogエラーで失敗する可能性があります。
    • 以前のリリースでは、次のエラーが発生する可能性があります:
      Last_Error: Error 'An attempt was made to binlog GTID 0-1-100 which would create an out-of-order sequence number with existing GTID 0-1-100 and gtid stric mode is enabled' on query. Default database: 'test'. Query: 'alter sequence s1 restart with 1' will be shown.

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

    • UPDATEまたはDELETEがROW_FORMAT=COMPRESSEDを指定してInnoDBテーブルからロールバックされると、サーバーがクラッシュする可能性があります。
    • 文字セットが定義されていない文字列に対してLEFT()関数が呼び出されると、サーバーがクラッシュする可能性があります。
    • Galeraでは、状態スナップショット転送(SST)に対して、wsrep_sst_method=mariabackupが設定され、encrypt=4が有効になっている時に、ドナーノードにインストールされているsocatのバージョンが1.7.4.0以降である場合、SSTが失敗する可能性があります。
      • 以前のリリースでは、インストールされているsocatのバージョンが1.7.4.0以降の場合、SSTが失敗し、ドナーノードのMariaDBエラーログに次のエラーが記録されることがありました:
        E Failed to set SNI host ""
      • このリリース以降、SSTスクリプトがドナーノードでsocatリスナーを開始する時に、インストールされているsocatのバージョンが1.7.4.0以降であれば、no-sni=1を設定することでエラーが防止されます。
    • オプティマイザトレースが有効な時に、ビューが複数テーブルの更新の一部である場合、サーバーがクラッシュする可能性があります。
    • ビュー定義にUNIONが含まれており、そのビューがサーバー側のプリペアドステートメントを使用してクエリされる時に、オプティマイザがビューの実行に条件をプッシュダウンすると、文字セットの変換中にサーバーがクラッシュする可能性があります。
    • レプリカサーバーがMASTER_USE_GTID=slave_posを指定してプライマリサーバーに接続する時に、プライマリサーバーに復号化できない暗号化されたバイナリログがある場合、セグメンテーション違反によりプライマリサーバーがクラッシュします。
      • 以前のリリースでは、プライマリノードは全てのバイナリログを反復処理して、要求されたGTIDを探しました。バイナリログの1つを復号化できない場合、サーバーはクラッシュします。
      • このリリース以降、このシナリオでプライマリノードがバイナリログの復号化に失敗すると、バイナリログの反復処理が停止され、ER_MASTER_FATAL_ERROR_READING_BINLOGエラーコードと次のエラーメッセージが表示されるエラーが発生します:
        Got fatal error 1236 from master when reading data from binary log: 'Could not set up decryption for binlog.'
    • Galeraでは、wsrep_trx_fragment_sizeシステム変数を設定してストリーミングレプリケーションを有効にすると、特定のフラグメントサイズが指定される時にサーバーがクラッシュする可能性があります。
    • IN(..)述語を含む単一テーブルDELETEに対してEXPLAIN EXTENDEDが実行されると、サーバーがクラッシュする可能性があります。
    • slave_parallel_threadsを0より大きく設定して並列レプリケーションを有効にすると、エラーが発生した後にレプリカの並列レプリケーションワーカースレッドがハングする可能性があります。
      • 以前のリリースでは、このシナリオでサーバーがハングすると、SHOW SLAVE STATUSの出力にはエラーが発生したことが示されましたが、出力にはI/OスレッドとSQLスレッドの両方が実行中であることが示されました。
        SHOW SLAVE STATUS\G

        *************************** 1. row ***************************
        Slave_IO_State: Waiting for master to send event
        ..
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
        ..
        Last_Errno: 1062
        Last_Error: Could not execute Write_rows_v1 event on table TABLE_NAME; Duplicate entry 'VALUE' for key 'KEY_NAME', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log LOG_FILE, end_log_pos END_LOG_POS
        ..

      • このシナリオでは、この問題により並列レプリケーションワーカースレッドの1つがテーブルを閉じている状態でハングするため、SHOW PROCESSLISTの出力には、1つのワーカースレッドがその状態で無期限に表示されます:
        SHOW PROCESSLIST;

        +------+--------------+--------------------+------+--------------+-------+-----------------------------------------------+------------------+----------+
        | Id | User | Host | db | Command | Time | State | Info | Progress |
        +------+--------------+--------------------+------+--------------+-------+-----------------------------------------------+------------------+----------+
        ..
        | 2394 | system user | | NULL | Slave_worker | 50852 | closing tables | NULL | 0.000 |
        ..
        +------+--------------+--------------------+------+--------------+-------+-----------------------------------------------+------------------+----------+

    • オプティマイザがセミ結合の分割方法を選択すると、サーバーがクラッシュする可能性があります。
    • Galeraでは、クラスターノードでCREATE TEMPORARY SEQUENCEが実行され、バイナリログが有効になっていると、サーバーがクラッシュします。
    • Galeraでは、書き込みセットが認証に失敗し、バイナリログが有効になっている場合、WSREPアプライヤスレッドによって使用されるWSREPシーケンス番号(クラスター全体のトランザクションID)が、競合状態によりノードのXID(内部トランザクションID)と同期しなくなる可能性があります。これにより、ノードがクラッシュする可能性があります。
      • 以前のリリースでは、書き込みセットが認証に失敗し、バイナリログが有効になっている場合、コミット順序の解放が早すぎる可能性があるため、WSREPアプライヤスレッドはWSREPシーケンス番号を順序どおりに同期できませんでした。
    • Galeraでは、wsrep_trx_fragment_sizeシステム変数を設定してストリーミングレプリケーションが有効にされ、CREATE TABLE .. SELECTが実行されると、サーバーがクラッシュする可能性があります。次のアサーションが、クラッシュ中にMariaDBエラーログに書き込まれます:
      Assertion `mode_ == m_high_priority' failed in void wsrep::client_state::after_applying()
      • このリリース以降、サーバーはこのシナリオでのCREATE TABLE .. SELECTを禁止し、次のエラーメッセージを含むER_NOT_ALLOWED_COMMANDエラーコードを生成します:
        ERROR 42000: CREATE TABLE AS SELECT is not supported with streaming replication
    • Galeraでは、接続がハンドラーインターフェイスを使用してテーブル上でトランザクションを開始する場合、クライアントが切断されるとサーバーがクラッシュする可能性があります。
      以前のリリースでは、クライアントが切断されると、サーバーはトランザクションをロールバックし、トランザクション終了後にハンドラーインターフェイスが存続すると予想していたロックを含む全てのロックを解放しました。これにより、サーバーがクラッシュすることがありました。

      • 以前のリリースでは、クラッシュ中に次のアサーションがMariaDBエラーログに書き込まれます:
        void close_thread_table(THD*, TABLE**): Assertion `thd->mdl_context.is_lock_owner(MDL_key::TABLE, table->s->db.str, table->s->table_name.str, MDL_SHARED)' failed.
    • Galeraでは、SSTドナーが非プライマリ状態に変わると、SSTが適切に終了されず、ドナーノードがクラッシュします。
      • 以前のリリースでは、クラッシュ中に次のエラーメッセージとアサーションがMariaDBエラーログに書き込まれます:
        [Warning] WSREP: server: NODE_NAME unallowed state transition: connected -> joined
        void wsrep::server_state::state(wsrep::unique_lock&, wsrep::server_state::state): Assertion `0' failed.
    • グループに対してDISTINCTと集計関数を使用するクエリが実行されると、サーバーがクラッシュする可能性があります。
    • サーバー側のプリペアドステートメントを使用して、ビューを参照し、HAVING句を含むクエリを実行すると、クエリの2回目の実行時にサーバーがクラッシュする可能性があります。
    • InnoDBパージスレッドがコミットされていないインデックスに変更バッファを使用しようとすると、サーバーはアサーションで終了します。
    • rowid_filtering最適化がパーティションテーブルで使用されると、サーバーはアサーションで終了します。
    • binlog_row_image=FULLが設定され、slave_parallel_threadsが0より大きい場合、シーケンスを使用してデータがテーブルに挿入されると、レプリカサーバーがハングする可能性があります。
    • フルテキストバックグラウンドスレッドが同期コミット操作を実行すると、InnoDBが中止されます。

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

    • システム結合タイプを使用する複数テーブルUPDATEに対してEXPLAIN EXTENDEDが実行されると、出力が正しくなくなる可能性があります。
    • クエリにDISTINCTが指定され、SUM()関数を使用した式が含まれている場合、間違った結果が返されます。
    • ビューの定義にHAVING句が含まれている場合、ビューからの選択がエラーで失敗する可能性があります。
      • 以前のリリースでは、クエリがER_VIEW_INVALIDエラーコードと次のエラーメッセージが表示されるエラーを発生させることがありました:
        View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
    • ビューの定義に集計関数が含まれている場合、ビューからの選択がエラーで失敗することがあります。
      • 以前のリリースでは、クエリがER_INVALID_GROUP_FUNC_USEエラーコードと次のエラーメッセージが表示されるエラーを発生させることがありました:
        ERROR 1111 (HY000): Invalid use of group function
    • ビューの定義に単一値サブクエリとしてテーブル値コンストラクター(TVC)が含まれている場合、ビューからの選択がエラーで失敗することがあります。
      • 以前のリリースでは、クエリがER_VIEW_INVALIDエラー コードと次のエラーメッセージが表示されるエラーを発生させることがありました:
        View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
    • ビューの定義が相関のないサブクエリに集計関数を含む場合、間違った結果が返されます。
    • DELETEステートメントにHAVING句を含むサブクエリが含まれる、または、DELETEステートメントがWHERE句内に集計関数を含む場合、ステートメントはエラーで失敗する可能性があります。
      • 以前のリリースでは、クエリによってER_INVALID_GROUP_FUNC_USEエラーコードと次のエラーメッセージが表示されるエラーが発生することがありました:
        ERROR 1111 (HY000): Invalid use of group function
    • InnoDBテーブルスペースが破棄されている場合、information_schema.INNODB_SYS_INDEXESからの選択はエラーで失敗します。
      • 以前のリリースでは、ER_UNKNOWN_ERRORエラーコードのエラーが発生しました:
        ERROR 1105 (HY000): Unknown error
      • このリリース以降、エラーは返されず、結果には破棄されたテーブルスペースのPAGE_NO列とSPACE列にNULLが含まれます。
    • innodb_undo_directoryが相対パスに設定されている場合、そのパスはmariadb-backup --copy-backによって適切に使用されません。
      • 以前のリリースでは、UNDOログは現在の作業ディレクトリと比較した相対パスにコピーされていました。
      • このリリース以降、UNDOログはdatadirと比較した相対パスにコピーされます。
    • UNIX_TIMESTAMP(CURRENT_TIME())が実行されると、間違った値が返されます。
      • 以前のリリースでは、NULLが返されました。
    • Galeraでは、wsrep_sst_method='mariabackup' が設定されている場合、systemdはPIDの不一致に関するエラーを生成します。
      • 以前のリリースでは、systemdによって次のエラーが発生することがありました。BACKUP_PIDはMariaDB Enterprise BackupのPID、SERVER_PIDはMariaDB Enterprise ServerのPIDです:
        Got notification message from PID BACKUP_PID, but reception only permitted for main PID SERVER_PID
    • UPDATEに、インデックスのないVARCHAR列に対する範囲条件を含むWHERE句が含まれる場合、エラーが発生します。
      • 以前のリリースでは、ER_DATA_TOO_LONGエラーコードのエラーが発生し、次のエラーメッセージが表示されます:
        ERROR 1406 (22001): Data too long for column 'COLUMN_NAME' at row 1
    • SLAVE_Parallel_threadsが0より大きく、SHOW SLAVE STATUSが実行されると、接続は初期化されていないミューテックスの取得を試行する可能性があります。
      • 以前のリリースでは、競合状態により、並列レプリケーションワーカースレッドのミューテックスが初期化される前に取得される可能性がありました。
    • ucs2_general_mysql500_ci照合順序は、古いバージョンのMySQLとの互換性を目的としており、's'の後に's'が誤ってソートされます。
    • EXPLAIN EXTENDEDがINSERT、UPDATE、DELETE、またはREPLACEとともに実行される場合、クエリテキストを含む警告は出力されません。
    • rowid_filtering最適化が正しく適用されない場合があります。
    • 部分バックアップを準備する場合、MariaDB Enterprise Backupは、バックアップから除外されているために欠落していることが予想される InnoDBテーブルスペースファイルが欠落していることに関するエラーメッセージを生成します。
    • 特定のデータ分布では、オプティマイザーのヒストグラムコードによって誤った選択性が生成され、パフォーマンスの低下につながる可能性があります。

    インターフェースの変更

    • aria_log_dir_pathシステム変数が追加されました。
    • core_fileシステム変数のデフォルト値がNoneからOFFに変更されました。
    • innodb_buffer_pool_filenameシステム変数がYesからNoに動的に変更されました。
    • mariabackup --aria-log-dir-path コマンドライン オプションが追加されました。

    プラットフォーム

    エンタープライズライフサイクルに合わせて、MariaDB Enterprise Server 10.4.30-20は次のプラットフォームに対して提供されます:

    • CentOS 7 (x86_64)
    • Debian 10 (x86_64, ARM64)
    • Microsoft Windows (x86_64) (MariaDB Enterprise Clusterは除外)
    • Red Hat Enterprise Linux 7 (x86_64)
    • Red Hat Enterprise Linux 8 (x86_64, ARM64)
    • Rocky Linux 8 (x86_64, ARM64 Red Hat Enterprise Linux 8パッケージ)
    • SUSE Linux Enterprise Server 12 (x86_64)
    • SUSE Linux Enterprise Server 15 (x86_64, ARM64)
    • Ubuntu 20.04 (x86_64, ARM64)

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


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


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

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