2021.06.17

MariaDB

MariaDB Enterprise Server 10.4.19-12 GA版(リリース日:2021年6月14日)

セキュリティの脆弱性の修正
 CVE / CVSSベーススコア
 CVE-2021-2154 / 4.9
 CVE-2021-2166 / 4.9

主な変更点
・新しい関数 ST_DISTANCE_SPHERE()は、球上の2つのジオメトリ(ポイントまたはマルチポイント)間の
 球形距離を計算します。
・innodb_checksum_algorithmの値であるnone、innodb、strict_none、strict_innodbに対して
 非推奨警告を発行します。
・MariaDB Enterprise Clusterは、ストリーミングレプリケーションで不要なロールバックを回避します。
・改善されたTLS/SSLエラーレポート。
・Galeraが26.4.8に更新されました

修正された問題
<データ損失が発生する可能性があるもの>
・ALTER TABLEは、InnoDBテーブルの列の名前変更に失敗し、サーバーをクラッシュさせます。
 再起動後、InnoDBテーブルにアクセスできなくなります。
・外部キーを使用したInnoDBテーブルでのALTER後のテーブル破損 ER_NO_SUCH_TABLE_IN_ENGINE
 またはER_CRASHED_ON_USAGE。
・MariaDB Enterprise Backupは、デバイスにスペースが残っていないというエラーの後、終了する前に、
 現在のソースファイルを削除します。不完全なターゲットファイルのみが引き続き使用可能です。
・ROW_FORMAT=REDUNDANTを使用したInnoDBのオンラインのALTER TABLEでの破損の可能性
・暗号化されたトランザクションAriaテーブルは、クラッシュリカバリ後も破損したままであり、自動修復は
 機能しません。
・DELETE HISTORYは、システムバージョン管理されたテーブルの現在のデータを削除する場合があります。

<クラッシュまたはハングを引き起こす可能性があるもの>
・KILL CONNECTIONまたはKILL QUERYがMariaDB Enterprise Clusterとマルチマスターセットアップで
 使用されるとハングする可能性があります。
・4096バイトを超える値を可変長フィールド(BLOB、TEXT、VARCHAR、および関連するタイプ)に
 挿入すると、MariaDB Enterprise Clusterでメモリが破損する可能性があります。
・innodb_flush_method=O_DIRECTは圧縮テーブルで失敗します。
・userstatを有効にして関数を呼び出すと、check_grantでサーバーがクラッシュします。
・--default-character-setが設定されていて、かつ、--character-sets-dirが未定義の場合、
 MariaDBクライアントがクラッシュします。
・テーブルを削除するとサーバーがクラッシュする可能性があります。テーブルごとにテーブルスペースを
 使用している場合、および、削除時にテーブルスペースのサイズが増加した場合にのみ、見られます。
・仮想列に対するUPDATE、INSERT、REPLACEのエラーが発生した後、InnoDBおよび
 インデックス付き仮想列でサーバーがハングする可能性があります。
・MariaDB Enterprise Clusterの競合解決の問題。
・FULLTEXT INDEXの中止によるインデックスカウントの不一致
・MariaDB Enterprise Clusterノードは、仮想列を含み、プライマリキーを持たないテーブルに行を
 挿入するとクラッシュします。
・InnoDBが新しい仮想列に新しいインデックスを追加できず、同時接続が解放された仮想列にアクセスする
 クエリを実行すると、サーバーがクラッシュします。
・ON式の相関関係を持つEXISTSサブクエリがクラッシュします。
・読み取り専用トランザクションのロールバック時に、row_undo_mod_clust_lowでサーバーが
 クラッシュします。
・ストアドプロシージャが無効なマルチテーブルUPDATEステートメントを使用してビューを更新すると、
 ストアドプロシージャの2回目の実行時にサーバーがクラッシュします。
・mysql.innodb_index_statsシステムテーブルまたはmysql.innodb_table_statsシステムテーブルに
 回復されたトランザクションが存在し、DDLトランザクションがロールバックされる必要がある場合、
 InnoDBの起動がハングします。
・InnoDBがFULLTEXT INDEXを含むテーブルからデータをフェッチしようとした時にサーバーが
 クラッシュし、テーブルのテーブルスペースが破棄されました。
・WHERE条件が派生テーブルを参照すると、SHOW TABLESでサーバーがクラッシュします。
・仮想インデックス付き列が存在する場合、InnoDBパージでハングする可能性があります。
・ON条件に存在しないフィールドを含むCREATE VIEW .. SELECTでのクラッシュ。
・ネストされたテーブル値コンストラクターでのクラッシュ。
・VALUES()関数またはVALUE()関数で作成されたテーブル値で集約関数が呼び出されると、サーバーが
 クラッシュします。
・SELECTステートメントにVALUES()関数またはVALUE()関数で作成されたテーブル値を参照する
 サブクエリがあると、サーバーがクラッシュします。
・SELECTステートメントにVALUES()関数またはVALUE()関数で作成された2つのテーブル値のUNIONを
 参照するIN()句があると、サーバーがクラッシュします。
・log_slave_updatesが無効になっていて、かつ、競合するトランザクションが優先度の高い
 トランザクションで中止されると、MariaDB Enterprise Cluster上のマルチマスターワークロードでの
 アサーションが原因でサーバーがクラッシュします。
・KILL CONNECTIONまたはKILL QUERYがMariaDB Enterprise Clusterおよびマルチマスターセットアップ
 で使用されると、ハングする可能性があります。
・MariaDB Enterprise Clusterでストリーミングレプリケーションが使用されると、メモリが破損する
 可能性があります。
・mysql.userシステムテーブルが切り捨てられると、MariaDB Enterprise Clusterノードがクラッシュします。
・wsrep_provider_optionsがNULLに設定されると、MariaDB Enterprise Clusterノードがクラッシュします。
・トランザクションのコミット中にテーブル定義がキャッシュから削除された場合、メモリの破損または
 クラッシュする可能性があります。
・DEFAULT()関数がBLOB列で呼び出されると、サーバーがクラッシュします。
・SELECTステートメントがインフォメーションスキーマテーブルにクエリを実行し、JOINを使用すると、
 サーバーがクラッシュします。
・information_schema.innodb_sys_columnsからのSELECT後、
 optimize_schema_tables_memory_usageでサーバーがクラッシュします。
・FULLTEXT INDEXがInnoDBテーブルに追加され、そのテーブルのテーブルスペースが以前に
 破棄された場合、サーバーがクラッシュします。
・列がINSTANTアルゴリズムを使用してInnoDBテーブルから削除されると、サーバーがクラッシュします。
・CREATE TABLE t1 ( .. ) SELECT .. FROM t2が実行されると、MariaDB Enterprise Clusterノードが
 クラッシュします。ここで、t1はInnoDBテーブルであり、t2は非InnoDBテーブルです。
・wsrep_onが有効になっている時にストリーミングレプリケーションを使用してコミットされていない
 トランザクションがレプリケートされ、wsrep_onが無効になっている時にそのトランザクションが
 コミットされると、MariaDB Enterprise Clusterノードがクラッシュします。
・オプティマイザーがサブクエリからGROUP BYを誤って削除すると、サーバーがクラッシュします。
 これは、列がSELECTリストとGROUPBYリストの両方で指定されているためです。
・非InnoDBテーブルがLOCK TABLEステートメントでロックされ、同時接続が同じテーブルを参照する
 CREATE VIEWを実行すると、サーバーがMariaDB Enterprise Clusterでクラッシュします。
・セカンダリインデックスでインスタントInnoDB ALTERに失敗した後、サーバーがクラッシュする
 可能性があります。
・SELECTステートメントのFROM句にGROUPBY句を含むサブクエリがあり、複数のインデックスが
 使用されている場合、サーバーがクラッシュします。1つのインデックスはGROUP BY句の解決に使用され、
 別のインデックスはLATERALDERIVED最適化に使用されます。
・thd_clear_errors()でのサーバーのクラッシュ
・MariaDB Enterprise Backupは、Windowsでパラメータなしで呼び出されると、クラッシュします。
・暗号化されたInnoDBテーブルのテーブルスペースに解放されたページが存在する場合、サーバーが
 クラッシュリカバリ中にクラッシュします。--prepare中のMariaDB Enterprise Backupにも
 影響します。
・MariaDB Enterprise Clusterの競合解決の問題。
・DROP INDEXまたはCREATE INDEXの後、セカンダリインデックスの変更バッファエントリは
 InnoDBの再起動時に失われます。

<予期しない動作を引き起こす可能性があるもの>
・CAST('0e1111111111' AS DECIMAL(38,0))は誤った結果を返します。
・プリペアドステートメントとして実行された時のSET STATEMENTの誤った動作。
・サブクエリに外部列を参照するON句を含むJOINが含まれている場合、クエリは
 ER_BAD_FIELD_ERRORエラーを返します。
・共通テーブル式(CTE)にUNIONが含まれている場合、クエリはER_BAD_FIELD_ERRORエラーを
 返します。
・MIN()またはMAX()の集約関数が使用され、集約された列にインデックスが付けられている場合、クエリは
 誤った結果を返します。
・インクリメンタルブロックのネストされたループハッシュでの間違った結果(余分な行と間違った値)。
・複合インデックスを使用したブロックネストループハッシュ(BLNH)の最適化を使用してJOINが
 評価されると、クエリが誤った結果を返します。
・サーバーは、mysqld_safeオプションを指定したmysqld_multiの使用を開始できません。
・MariaDB Enterprise Clusterの設定変更中に、重複キーが生成される場合があります。
・--log-binオプションがサーバーの起動時に値無しでコマンドラインで設定されると、
 MariaDB Enterprise Backupを使用したMariaDB Enterprise Clusterの
 状態スナップショット転送(SST)が失敗します。
・永続統計とRENAME TABLEまたはTRUNCATEの間の競合状態
・ANALYZE TABLEとSTATS_AUTO_RECALCの間の競合状態
・CHECK TABLEがInnoDBテーブルで実行されると、フィールド長に関する誤ったメッセージがエラーログに
 書き込まれます。
・派生テーブルのSUM列が無効な値を返します。
・オプティマイザが不明なテーブルエイリアスを含むサブクエリの冗長部分を削除しても、エラーは
 返されません。例えば、オプティマイザがIN()サブクエリから冗長なGROUP BY句を削除した場合、
 冗長部分の不明なテーブルエイリアスは無視されます。
・フィールド"filter"のEXPLAINで示される選択性は、BIT列では正しくありません。
・ヒストグラム統計は、optimizer_use_condition_selectivity=3でも使用されます。
・EXPLAINは、type=indexでkey_lenの無意味な値を示します。
・サーバーの証明書とクライアントの証明書が同じCAによって署名されている場合、SSL接続は失敗します。
・ST_GeomFromGeoJSONの呼び出し時のエラーメッセージの関数名が間違っています。
・MariaDB Enterprise Backupは、大規模バックアップで-prepareに失敗します。
・バックアップユーザーのパスワードがMYSQL_PWD環境変数を介して設定されている場合、
 MariaDB Enterprise Backupを使用したMariaDB Enterprise Clusterの
 状態スナップショット転送(SST)は失敗します。
・--innodbオプションがサーバーの起動時にコマンドラインで設定されると、MariaDB Enterprise Backupを
 使用したMariaDB Enterprise Clusterの状態スナップショット転送(SST)が失敗します。
・EXPLAIN EXTENDEDステートメントがプリペアドステートメントで実行されると、必要以上の警告が
 返されます。
・ストアドプロシージャの複雑なクエリは、間違った結果を返します。
・AFTERが使用されている場合、ALTER TABLEはフィールドのデフォルト値を誤って確認します。
・ON式のサブクエリの名前解決が正しくありません。
・FLUSH LOGSが実行されると、InnoDBグループコミットとバイナリログローテーションの間の競合状態に
 より、古いバイナリログファイルはInnoDBグループコミットが書き込まれる前に使われなくなります。
・MariaDB Enterprise Backupは、--backup中に無効なログブロックチェックサムを読み取ると、
 警告ではなくエラーをログに記録します。
・マルチバージョン同時実行制御(MVCC)を使用してInnoDBインデックスが読み取られると、行が誤って
 省略されます。
・仮想列のあるテーブルへのREPLACEが失敗した後、SELECTが中止されます。
・インデックスの不一致が発生すると、InnoDBはインデックスタイプのフェッチに失敗します。
・MariaDB Enterprise Clusterは、InnoDBモニター出力をサイレントに有効にし、wsrepスレーブスレッドが
 ブルートフォース(BF)キルを実行しようとした時にそれを無効にすることはありませんが、
 ロック待機時間が長いため失敗します。
・MariaDB EnterpriseBackupの場合、RENAME TABLEにより、"Ignoring data file ... with space ID xxxx,
 since the redo log references ... with space ID xxxx."が発生します。
・レプリケーションハートビートバイナリログイベント(Heartbeat_log_event)は、現在の
 バイナリログファイル内のログの位置を格納するために4バイトを使用します。そのため、
 バイナリログファイルのサイズが4GBを超えるとログの位置がオーバーフローします。
・InnoDB空間インデックスは、大きなジオメトリフィールドを見逃します。
・前のステートメントのテーブルエイリアスは、後のコマンドに干渉します。
・プライマリテーブルがVALUES()関数またはVALUE()関数で作成されたテーブル値である場合、
 EXPLAINステートメントはサブクエリに関する詳細を表示しません。
・split_materialized最適化が有効になっている場合、マテリアライズされた派生テーブルのJOINは
 誤った結果を返します。
・CREATE .. SELECT ... VALUEの初期化されていない値と様々なエンジンで発生する様々なエラー。
・サーバーは、INFORMATION_SCHEMA.OPTIMIZER_TRACEテーブルが問い合わせされる度に、
 一時的に4GBの余分なメモリを消費します。
・システムバージョン管理されたテーブルからプライマリキー列を削除すると、常にエラー1072で失敗します。
・ALTER TABLE .. ADD COLUMN .. AS ROW STARTは、誤解を招く
 ER_VERS_DUPLICATE_ROW_START_ENDエラーを返します。
・ALTER TABLEはMariaDB Enterprise Clusterで複製されません。
・sql_safe_updatesを設定すると、MariaDB Enterprise Clusterを使用する時に予期しない警告が発生する
 可能性があります。
・SET PASSWORDステートメントは、そのステートメントがプリペアドステートメントで実行され、
 ユーザーのパスワードの有効期限が切れている場合、ER_MUST_CHANGE_PASSWORDで失敗します。
・MariaDB Enterprise Cluster FlushSSLコマンドはwsrep証明書をリロードしません。
・システムバージョン管理されたテーブルからプライマリキー列が削除された時に、
 予期しないER_DUP_ENTRYエラーが発生しました。
・mariadb-dumpを使用したMariaDB Enterprise Clusterの状態スナップショット転送(SST)により、
 ドナーノードのシャットダウンが失敗します。
・slave_compressed_protocolは、半同期レプリケーションでは正しく機能しません。
・ある接続によって作成されたシーケンスは、別の接続からは見えないままです。
・information_schema.routinesのroutine_definitionは、_で始まり、バックティックされていない場合、
 テーブル名を失います。
・MariaDB Enterprise Spiderは、スパイダーテーブルの作成時に、
 The connect info 'tab' for table is too longを返します。
・garbdには接続の問題があります。
・Galera起動ログは、設定ファイルを介してサーバー監査ログを有効にすると、
 mysql.server_audit_filtersデータロードエラーを示します。
・集約関数を使用した派生テーブルのJOINは、誤った結果を返します。

<インストールまたはアップグレードに関連するもの>
・SLES 12およびSLES 15へのlibsepolの依存関係がありません。
・cache_sha2_password.soはDebianパッケージに含まれていません。

インターフェースの変更
・mariabackup --innodb-force-recoveryコマンドラインオプションが追加されました。
・mariadb_repo_setup --skip-check-installedコマンドラインオプションが追加されました。
・ST_DISTANCE_SPHERE関数が追加されました。

プラットフォーム
エンタープライズライフサイクルに合わせて、MariaDB Enterprise Server 10.4.19-12は
以下に対して提供されています。
・CentOS 7
・CentOS 8
・Debian 9
・Debian 10
・Red Hat Enterprise Linux 7
・Red Hat Enterprise Linux 8
・SUSE Linux Enterprise Server 12
・SUSE Linux Enterprise Server 15
・Ubuntu 18.04
・Ubuntu 20.04
・Microsoft Windows

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

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

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

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