2023.12.15

MariaDB

MariaDB Enterprise Server 10.6.16-11 GA版(リリース日:2023年12月12日)

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

CVE CVSS base score
CVE-2023-22084 4.9

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

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

バックポート

  • sysスキーマの新しいビュー sys.privileges_by_table_by_levelは、グローバル、スキーマ、またはテーブル レベルでテーブルに付与された権限を表示します。
  • サーバーを再起動しなくても、オプション s3_debugを変更できるようになりました
  • DATE_FORMATの新しいタイムゾーンオプション %Zおよび%z
  • ミリ秒精度のタイムスタンプを含むサーバー監査ログ

注目すべき変更点

  • インデックスが使用できない場合はメモを作成する
    • データ型または照合順序が一致しない場合(異なるエラーメッセージ)。
    • 条件の書き換え中にテーブルフィールドが他のもの(Item_func_conv_charsetなど)に置き換えられた場合。
    • スロークエリの警告とメモをスロークエリログに書き込むオプションを追加しました。新しい変数が追加/変更されました:
      • note_verbosity、これはオプションのセットです:
        • basic - 全ての古いメモ
        • unusable_keys - 選択、削除、更新に使用できないキーに関する警告を出力します。
        • explain - EXPLAINクエリのunusable_keys警告を出力します。
        • デフォルトは'basic,explain'です。
        • 古いインストールの場合、注目すべき新しい動作は、クエリに対してEXPLAINを実行すると、使用できないキーに関するメモが取得されることです。
        • note_verbosityを空の文字列に設定するか、sql_notes=0を設定すると、メモが無効になります。
      • log_slow_verbosityに、新しいオプション 'warnings'が追加されました。これが設定されている場合、生成された警告とメモは、ステートメントごとにlog_slow_max_warnings回までスロークエリログに出力されます。
      • log_slow_max_warnings - スロークエリログに書き込まれる警告の最大数。
    • 任意の'set'変数に=ALLを使用して、全てのオプションを一度に設定できるようになりました。
[mariadb]
note_verbosity=ALL
SET @@note_verbosity=ALL
  • WolfSSL使用時のCHACHA20-POLY1305のサポート
  • 半同期レプリケーションのマジックナンバーエラー "[ERROR] Read semi-sync reply magic number error"が改善され、障害が発生したネットワークパケットの16進ダンプを出力して半同期確認応答が報告されるようになりました
  • MariaDBのTLS v1.0および1.1を無効にします。TLS v1.1がデフォルトのtls_versionシステム変数から削除されました。
    • TLS v1.0またはTLS v1.1が選択されている場合は、警告が表示されます。

修正された問題

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

  • バイナリログが有効な場合、binlog_{do,ignore}_dbオプションのいずれかによってバイナリログから除外されたトランザクションはエンジンで失われる可能性があります。
  • クラッシュリカバリ時のlog_sort_flush_listでのアサーション失敗。サーバーが強制終了され、リカバリ直後に再起動された場合、2回目のリカバリが失敗する可能性があります。
  • ページ書き込み完了とクラッシュリカバリ時のログチェックポイントの間の競合状態。これにより、オペレーティングシステムがクラッシュしたり、電源やストレージの接続が突然失われた場合に、クラッシュリカバリが中断される可能性があります。
  • CREATE SEQUENCEの並列レプリケーション時にMDL_context::acquire_lockでアサーションが失敗する

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

  • ハングまたはクラッシュが、一時テーブルを変更するSTATEMENTバイナリログ形式トランザクションの並列レプリケーションで見られる可能性があります。例えば、rpl.rpl_parallel_temptableの障害で確認されます。
  • ローカル操作であるにもかかわらず、CACHE INDEXおよびLOAD INDEX INTO CACHEの不必要なレプリケーションが原因で発生する障害。
  • Rowidフィルターはストレージエンジンエラーを正しく処理しません。ロック読み取りを実行し、Rowidフィルターを使用しているクエリでは、Rowidフィルターの構築時にロック待機タイムアウト、デッドロック、または同様のエラーが発生した場合、サーバーがクラッシュする可能性があります。
  • OPTIMIZE TABLEの実行時にサーバーがクラッシュする可能性があります。InnoDBは、再構築されたテーブルに操作を適用する時にオーバーフローバッファーのチェックに失敗します。
  • 相関サブクエリ内のHAVINGが外部クエリ内の列を参照するとクラッシュする
  • SSTスクリプトの欠陥により、datadirまたは一部のinnodbログディレクトリが実際に実際のデータディレクトリへのシンボリックリンクであるパスを指している場合、SSTを実行できませんでした。
  • クラスターノードがクラッシュします。これは、ブルートフォース(BF)スレッドが要求されたロックと競合し、犠牲トランザクションを強制終了しようとしたが、この犠牲トランザクションもブルートフォーススレッドによって処理された場合に発生することがあります。
  • InnoDBのパージと変更操作のロールバックの間で競合状態が発生する可能性があります。ロールバックを変更すると、同じインデックスでパージが実行されている時にインデックスが破損しているとマークされます。
  • SPIDERタイプのテーブルがSPIDERのパラメータではないコメント文字列で始まると、サーバーがクラッシュする可能性があります。
  • "CREATE TABLE ... WITH SYSTEM VERSIONING AS SELECT ..."を実行しようとするとノードがクラッシュする
  • INSERT-SELECT、autoinc、およびステートメントベースのレプリケーションでのロック待機タイムアウト
  • BINLOGステートメントを使用すると(アプライアだけでなく)マスターでもbinlogイベントを実行できるため、アサーションが厳密すぎると問題が発生します。
  • Galeraは、CREATE TABLE AS SELECT中にwsrep_forced_binlog_format=[MIXED|STATEMENT]をサポートできません。しかし、アサーションという形でのクラッシュは過剰反応です。現在は代わりに警告が発行されます。
  • wsrep_mode=BF_ABORT_MARIABACKUPを指定しても、MariaDB Enterprise Clusterノードがdonor/desynced状態からsynced状態に戻らない
  • MariaDB Enterprise Clusterノードが別のMariaDB Enterprise Clusterのレプリカであり、オプティミスティックレプリケーションが使用されている場合、ノードがハングする可能性があります。オプティミスティックな並列レプリケーションをサポートするためには、ノードがクラスター内に残り(wsrep_ready==ON)、レプリケーションがオプティミスティックまたはアグレッシブな再試行ロジックに設定されている場合、レプリケーションスレーブの中止をスキップする必要があります。
  • クラッシュリカバリ後、サーバーがクラッシュし、サーバーログに"InnoDB: Checksum mismatch in the first page of file"というエラーが記録される
  • SPIDERオプション spider_delete_all_rowsを0に設定し、spiderテーブルの全ての行を削除すると、サーバーがクラッシュする可能性がある
  • InnoDBは、書き込みワークロード下で低確率でハングする可能性があります。
  • 小さいinnodb_buffer_pool_sizeを使用するとInnoDBがハングすることがある
  • INサブクエリの左式にネストされた行構造を使用すると、エラーが発生します。例:(a,(b,c)) IN (SELECT ...)。一部の縮退ケースでは、エラーが検出されず、クエリ処理のその後の段階でクラッシュが発生することがあります。
  • ( SELECT two LIMIT 1 OFFSET 1)のような、ゼロ以外のオフセットを持つLIMIT句を含むテーブルのないサブクエリでは、予期しない結果が生じる可能性があります。ORDER BY内で使用されると、クラッシュが発生する可能性があります。
  • バッファプールが不足すると InnoDBがハングすることがある
  • FULLTEXT...WITH PARSERを使用すると、全文検索プラグインパーサーでクラッシュする可能性があります。
  • SEQUENCEをGaleraと組み合わせて使用すると断続的にクラッシュする
  • 2つのクライアントがGaleraノード上でFLUSH TABLES WITH READ LOCK/UNLOCK TABLESを実行すると、ノードが一時停止状態になることがあります。これにより、その次のリクエストが失敗する可能性があります。
  • Galeraの非同期ネットワーク通信操作の下位レベルで使用されるasioライブラリでクラッシュします。
  • (マスターノードとレプリカノードの間での)mysql.gtid_slave_posテーブルの不整合の問題により、非同期レプリケーションが有効になっている状態で起動またはシャットダウンした時にノードがクラスターから削除されることがあります。これは、以前はこのテーブルがクラスター内でレプリケートされていなかったためです。
  • ビューを使用した誤ったクエリの後、JOIN::cleanupでサーバーがクラッシュする
  • 生成されたインデックスの一部が自動的に削除される、テーブル作成のようなシナリオでは、サーバーがクラッシュする可能性があります。
  • CREATE TABLE .. SEQUENCE=1 AS SELECT ..の際にcheck_sequence_fieldsでサーバーがクラッシュする
  • 派生テーブルの最適な分割を検索するとクラッシュする
  • InnoDB: Failing assertion purge_sys.tail.trx_no <= purge_sys.rseg->last_trx_no()により、クラッシュリカバリ後にリカバリされた不完全なトランザクションがロールバックされた後、しばらくしてクラッシュが発生する可能性がありました。これにより、クラッシュループが発生する可能性があります。
  • FLUSH PRIVILEGESの実行中に新しいユーザーが接続しているか、ユーザーがパスワードを変更していると、サーバーがクラッシュする可能性がある

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

  • データ挿入時に、MyISAMおよびAriaでCHARのプレフィックスキーがエラー "ERROR 1062 (23000): Duplicate entry 's' for key 'a' "を返す
  • SET big_tables=1;が設定されているの場合、NOPAD照合順序を使用したDISTINCTの誤った結果が発生する可能性があります。
  • "WHERE inet6_column IN ('','::1')"を含むステートメントを実行すると、空の文字列も"::"の値を返し、またそれらは等しくありません。
  • SQLスレッドが並列スレーブワーカーキューが空になるのを待機する時に、強制終了が失敗します。KILLクエリは、ユーザーが予期せず、生き続けたレプリケーションスレッドに影響を与えませんでした。
  • InnoDBは、仮想列プレフィックスのインデックスの削除マークの付いていないレコードをパージしようとします。"InnoDB: tried to purge non-delete-marked record in index b of table test`.`tのようなエラーがサーバーログに表示されます。
  • FOREIGN KEYを使用すると、ビジーテーブルのインデックスが破損します。サーバーログのエラー "InnoDB: Flagged corruption of INDEX_NAME in table DBNAME`.`TBLNAME in purge"。
  • information_schema.innodb_metricsのlock_row_lock_current_waitsカウンターが負になる可能性がある
  • 暗号化設定が渡されなかった場合、InnoDB Recoveryで暗号化メッセージが表示されない
  • エラーが発生したレプリカの再起動時にSHOW REPLICA STATUS Last_SQL_Errno競合状態が発生します。slave_running_statusの矛盾するYESとLast_SQL_Errnoのエラーコードが表示されます。
  • information_schema.SYSTEM_VARIABLESのinnodb_checksum_algorithmに関する情報が間違っています。NONEまたはSTRICT_NONE、または、STRICT_INNODBは今後表示されないはずです。
  • 自動インクリメントは明示的なFTS_DOC_IDに対して機能しなくなりました。
  • 場合によっては、他のMariaDB Enterprise Clusterノードでトランザクションを再実行すると、誤った"Failed to insert streaming client"という警告が表示されることがあります。
  • COALESCEを使用したビットエンコーディングが間違っています。
  • FOR..DOでITERATEを使用すると、エラー 'Illegal parameter data types row and bigint for operation '+' 'が発生します。
  • 外部キー制約で変更されたカラムをチェックしている時に、InnoDBが仮想列を無視できない
  • 解放されたページの先行書き込みログが壊れる
  • seconds_behind_masterは遅延レプリケーションでは不正確です。
  • InnoDBは、fil_delete_tablespace()で強制終了された後、サーバーログに"InnoDB: Multi-batch recovery needed at LSN 78671708"というメモが記録されてリカバリに失敗することがあります。回避策としてinnodb_force_recovery=1を設定することができます。
  • wsrep_sst_method変数が、SETステートメントを使用して無効な値に設定できます。
  • 共通テーブル式を使用し、フェデレーションバックエンドにプッシュダウンすることによって実行される、FEDERATEDテーブルに対するクエリが、"Unknown error 10000"エラーで失敗することがありました。
  • mysqlbinlog(mariadb-binlog)の-T/--tableオプションに関する誤解を招くヘルプテキスト
  • mbstreamはXFSでのページ圧縮を中断する
  • MyISAMテーブルは、アクティブなトランザクションがないにもかかわらず、トランザクションメタデータロックを取得しました。
  • "rpm --setugids"によりPAM認証が中断される
  • テーブルにハッシュを使用した一意のインデックスがある場合、空のテーブルへの複数行のInsertが失敗します。CHECK TABLEは"Table 't1' is marked as crashed and should be repaired"を返します。
  • InnoDBの"row too big"エラーでテーブル名が間違っている
  • クエリでIS NULLが使用されている場合、プリペアドステートメントは行が欠落している間違った結果を返す可能性があります。
  • スローログのslow_logのRows_examinedが範囲外になる可能性があります。この場合、サーバーログには"([ERROR] Unable to write to mysql.slow_log)"が記録されます。
  • スロークエリログにおいて、または、LIMIT ROWS EXAMINEDと一緒に、または、クエリが関数内で実行される時のANALYZE FORMAT=JSONと一緒に等、場合によっては、間違った検査行番号が使用されます。各ストアドファンクションの呼び出しは、処理中に現在のカウントを2倍にします。
  • ユーザーがステートメントを実行するための十分な権限を持っているにもかかわらず、CONVERT TABLE TO PARTITIONは"ER_TABLEACCESS_DENIED_ERROR (1142)"を返します。

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

  • 非同期のaio用に別のtpoolスレッドを作成する
  • Windowsでテーブルスペースを開く速度を向上させるためにis_file_on_ssd()を最適化する
  • 外部結合が多いクエリでの大幅な速度低下
  • スロークエリログにおいて、または、LIMIT ROWS EXAMINEDと一緒に、または、クエリが関数内で実行される時のANALYZE FORMAT=JSONと一緒に等、場合によっては、間違った検査行番号が使用されます。各ストアドファンクションの呼び出しは、処理中に現在のカウントを2倍にします。
  • 書き込み集中型ワークロードのUNDOログは依然として増加している
  • レプリカ上の準備済みトランザクションの上限にXロックが存在するため、ステートメントベースのレプリケーションが停止します。
  • IN句に符号付き値と符号なし値の両方がある場合、キーは使用されない
  • 並列レプリケーションのdeadlock victim設定コードが誤って削除されました。その結果、並列スレーブは必要以上にトランザクションの実行を再試行する可能性がありました。
  • KILL QUERYまたはKILL CONNECTION、または有効な並列レプリケーションを実行すると、競合が--innodb-lock-wait-timeoutの時間待機するため、パフォーマンスの低下につながる可能性があります。これは、1つのワーカースレッドが「強制終了」状態にあり、他のいくつかのワーカースレッドがクエリでスタックしている場合に、SHOW PROCESSLISTで確認できます。
  • 一時テーブルスペースの先読みを無効にする

インストールやアップグレードに関連するもの

  • mysql_install_dbが全てのデフォルトのrootユーザーアカウントにプロキシ権限を適切に付与しない
  • datadirがNFSアクセスのあるNetAppストレージ上にある場合、Galera SST rsyncがスナップショットディレクトリをレプリケートする必要があるため、2番目のノードを起動できない

プラットフォーム

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

  • CentOS 7 (x86_64)
  • Debian 10 (x86_64, ARM64)
  • Debian 11 (x86_64, ARM64)
  • Debian 12 (x86_64, ARM64)
  • Red Hat Enterprise Linux 7 (x86_64)
  • Red Hat Enterprise Linux 8 (x86_64, ARM64)
  • Red Hat Enterprise Linux 9 (x86_64, ARM64)
  • 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)

MariaDB Enterprise Serverの一部のコンポーネントは、全てのプラットフォームをサポートしているわけではありません。


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


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

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