お知らせ - 11系 — Mroonga vmrn_version documentation

本文へスキップ
`Ctrl`+`K`

# お知らせ - 11系

## 11.13リリース - 2022-01-29

### Improvements

- [CentOS] MySQL 5.7.37をサポートしました。

- [CentOS][AlmaLinux] MySQL 8.0.28をサポートしました。

  There are below restrictions in the MySQL 8.0 package.

  > - [ラッパーモード] Wrapper mode is not supported yet.

  > - [ストレージモード] ストレージモードでは、以下の機能が未対応です。

  >   - 最適化関連の機能

- [CentOS][AlmaLinux] Percona Server 8.0.26-17をサポートしました。

- [Ubuntu] Ubuntu 21.04 (Hirsute Hippo) のサポートをやめました。

  - Ubuntu 21.04 は、2022年1月20日でEOLとなったためです。

## 11.11リリース - 2021-12-29

### Improvements

- [CentOS] CentOS 8のサポートをやめました。

  CentOS 8は、2021年12月31日でEOLとなるためです。

### Fixes

- [AlmaLinux] MariaDB 10.3、10.4、10.5、10.6向けMroongaを提供していなかった問題を修正しました。 [Gitter][shibanao4870さんの報告]

- [Documentation][インストール] 誤記を修正しました。[GitHub #469,#470][Marc Laporteさんがパッチ提供]

- [Documentation][CentOS] `percona-release-latest.noarch.rpm` のURLを修正しました。 [GitHub #471][santalexさんがパッチ提供]

### Thanks

- shibanao4870さん

- Marc Laporteさん

- santalexさん

## 11.10リリース - 2021-11-29

### Improvements

- [AlmaLinux] AlmaLinux 8 をサポートしました。

> - [AlmaLinux] MySQL 8.0.27をサポートしました。

>   > - There are below restrictions in the MySQL 8.0 package.

>   >   - [ラッパーモード] Wrapper mode is not supported yet.

>   >   - [ストレージモード] ストレージモードでは、以下の機能が未対応です。

>   >     - 最適化関連の機能

> > - [AlmaLinux] Percona Server 8.0.26をサポートしました。

> > - [AlmaLinux] MariaDB 10.3.32、10.4.22、10.5.13、10.6.5をサポートしました。

- [CentOS] MariaDB 10.2.41、10.3.32、10.4.22、10.5.13、10.6.5をサポートしました。

- [Ubuntu] Ubuntu 21.04 (Hirsute Hippo) と 21.10 (Impish Indri) の MySQL 8.0 をサポートしました。

  - There are below restrictions in the MySQL 8.0 package.

    - [ラッパーモード] Wrapper mode is not supported yet.

    - [ストレージモード] ストレージモードでは、以下の機能が未対応です。

      - 最適化関連の機能

### Fixes

- [CentOS] MariaDB 10.6向けMroongaを提供していなかった問題を修正しました。

- [最適化] Mroongaが行カウントの最適化を誤って適用する問題を修正しました。[MDEV-16922][Josep Sanzさんの報告]

  通常、Mroongaは、 `SELECT` が `COUNT(*)` だけを取得し、 `WHERE` の条件がインデックスだけで処理できる時に、行カウントの最適化を適用します。

  しかし、以下のケースのように `WHERE` の条件がインデックスだけで処理できない場合でも、Mroongaは、行カウントの最適化を適用していました。

  結果として、 `SELECT COUNT(*) WHERE ...` の結果が間違っていました。

      CREATE TABLE roles (
        id INT
      );

      INSERT INTO roles VALUES (1), (2), (3), (4), (5);

      CREATE TABLE users (
        id INT,
        role_id INT,
        INDEX (role_id)
      );

      INSERT INTO users VALUES (10, 1);
      INSERT INTO users VALUES (11, 2);
      INSERT INTO users VALUES (13, 3);
      INSERT INTO users VALUES (14, 4);
      INSERT INTO users VALUES (15, 5);
      INSERT INTO users VALUES (20, 1);
      INSERT INTO users VALUES (21, 2);
      INSERT INTO users VALUES (23, 3);
      INSERT INTO users VALUES (24, 4);
      INSERT INTO users VALUES (25, 5);

      SELECT COUNT(*)
        FROM (
          SELECT roles.id
            FROM roles
                 LEFT JOIN users ON users.id <= 100 AND
                                    users.role_id = roles.id
        ) roles_users;

- Mroongaが 'STRING_FIELD =' のコンディションプッシュダウンで適切なエンコーディングを設定しない問題を修正しました。[groonga-dev,04913][Tomohiro 'Tomo-p' KATOさんの報告]

  以下ケースでは、 Mroongaが 'STRING_FIELD =' の条件をコンディションプッシュダウンしますが、この時、Mroongaは適切なエンコーディングを検索キーワードに設定しません。結果として、Mroongaは検索キーワードのノーマライズに失敗します。

      CREATE TABLE memos (
        id INT PRIMARY KEY,
        title TEXT,
        INDEX (title)
      ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;

      INSERT INTO memos VALUES (1, 'Groonga');
      INSERT INTO memos VALUES (2, 'Mroonga');

      SELECT *
        FROM memos
        WHERE title = 'mroonga'
        ORDER BY id;

### Thanks

- Josep Sanzさん

- かとうさん

## 11.09リリース - 2021-11-04

### Improvements

- [CentOS] MySQL 5.7.36, 8.0.27をサポートしました。

- [CentOS] Percona Server 8.0.26をサポートしました。

## 11.08リリース - 2021-10-06

### Fixes

- MySQL 5.7で作成されたDBをMySQL 8.0にアップグレードすると、Mroongaがクラッシュする問題を修正しました。

## 11.07リリース - 2021-09-29

> 警告

> Mroongaには、MySQL 5.7で作成されたDBをMySQL 8.0にアップグレードすると、Mroongaがクラッシュする問題がありました。

> この問題は、Mroonga 11.08で修正されています。MySQL 8.0 より前のバージョンでMroongaを使用しているユーザーは、Mroonga 11.08以降を使うことを強くおすすめします。

### Improvements

- [Ubuntu] Ubuntu 20.04 (Focal Fossa) の MySQL 8.0 をサポートしました。

  - There are below restrictions in the MySQL 8.0 package.

    - [ラッパーモード] Wrapper mode is not supported yet.

    - [ストレージモード] ストレージモードでは、以下の機能が未対応です。

      - 最適化関連の機能

- [mroonga_snippet_html()] ノーマライザーのカスタマイズに対応しました。

  - この機能によって、以下のように `mroonga_snippet_html()` でカスタマイズしたノーマライザーを使えます。

        CREATE TABLE terms (
          term VARCHAR(64) NOT NULL PRIMARY KEY
        ) COMMENT='normalizer "NormalizerNFKC130(''unify_kana'', true)"'
          DEFAULT CHARSET=utf8mb4
          COLLATE=utf8mb4_unicode_ci;

        SELECT mroonga_snippet_html('これはMroonga（ムルンガ）です。',
                                    'terms' as lexicon_name,
                                    'むるんが') as snippet;

        snippet
        <div class="snippet">これはMroonga（<span class="keyword">ムルンガ</span>）です。</div>

- ベクターカラムの値をバイナリーではなくテキストとして出力できるようにしました。

  - この機能によって、ベクターカラムの値をダンプするのに、 `mysqldump` を使えます。

- 存在しないテーブルを削除した際に、 .mrn ファイルを作らないようにしました。 [groonga-dev: 04893][kenichi arimotoさんの報告]

- ベクターの要素に対して W プラグマを使えるようにしました。

  - この機能によって、ベクターの要素に重みをセットできますが、この場合、Mroongaは指定したセクションのみ検索します。通常のマルチカラムインデックスでは、Mroongaは指定していないセクションもデフォルトの重みで検索します。

### Fixes

- WHERE句に "WHERE primary_key IN ("")" と指定した際にMroongaが誤ったレコードを返すことがある問題を修正しました。 [groonga-dev,04855][Katsuhito Watanabeさんが報告]

  - 例えば、以下ようなケースでMroongaが誤ったレコードを返すことがあります。

        CREATE TABLE ids (
          id varchar(7) PRIMARY KEY,
          parent_id varchar(7)
        )ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

        INSERT INTO ids VALUES("abcdefg", "");
        INSERT INTO ids VALUES("hijklmn", "");
        INSERT INTO ids VALUES("opqrstu", "hijklmn");

        SELECT * FROM ids WHERE id IN (SELECT parent_id FROM ids);
        +---------+-----------+
        | id      | parent_id |
        +---------+-----------+
        | abcdefg |           |
        | hijklmn |           |
        +---------+-----------+
        2 rows in set (0.00 sec)

### Thanks

- Katsuhito Watanabeさん

- kenichi arimotoさん

## 11.06リリース - 2021-08-29

### Improvements

- [CentOS] MariaDB 10.2.40、10.3.31、10.4.21、10.5.12をサポートしました。

- [CentOS] MariaDB 10.6.4をサポートしました。 [GitHub#434][Tomohiro KATOさんがパッチ提供]

- [CentOS] Percona Server 5.7.35をサポートしました。

- [Debian GNU/Linux] Debian 11 (bullseye)をサポートしました。

### Thanks

- かとうさん

## 11.05リリース - 2021-07-30

### Improvements

- [CentOS] Percona Server 8.0.25 をサポートしました。

- [CentOS] MySQL 5.7.35, 8.0.26をサポートしました。

  - There are below restrictions in the MySQL 8.0 package.

    - [ラッパーモード] Wrapper mode is not supported yet.

    - [ストレージモード] ストレージモードでは、以下の機能が未対応です。

      - 最適化関連の機能

- [Ubuntu] Ubuntu 20.10 (Groovy Gorilla) のサポートをやめました。

  - Ubuntu 20.10 は、2021年7月22日でEOLとなったためです。

### Fixes

- MySQL/MariaDBのアップグレード後にクラッシュすることがある問題を修正しました。[GitHub#423][Vincent Pelletierさんの報告]

  - MySQL/MariaDB をアップグレード後に、 `SELECT ... MATCH AGAINST` を実行するとMroongaがクラッシュすることがあります。

### Thanks

- Vincent Pelletierさん

## 11.04リリース - 2021-06-29

### Improvements

- [サーバ変数の一覧] `mroonga_enable_operations_recording` をデフォルトで無効にしました。

  `mroonga_enable_operations_recording` 自動リカバリーのために操作の記録を有効にするかどうかを決めるものです。

  この操作記録はMroongaがクラッシュしたときに自動的にリカバリーするためのものです。通常、Mroonga内にロックが残留している場合、INSERT/DELETE/UPDATEは実行できませんが、 `mroonga_enable_operations_recording` が有効な場合、INSERT/DELETE/UPDATEに加えてSELECTも実行出来ないことがあります。自動リカバリーがロックの残留によって、ブロックされるためです。

  したがって、このバージョンから、デフォルト値を `OFF` にしました。ISERT/DELETE/UPDATE は、ロックの残留によって変わらずブロックされますが、操作記録を無効にすることで、SELECTは動作する可能性があります。

  残留したロックに対する正しい対処は以下の通りです。

  > - https://www.clear-code.com/blog/2021/6/1/mroonga-recover-lock-failed-2021.html (日本語のみ)

- [Debian GNU/Linux] Debian GNU/Linux 向けの Oracle の MySQLパッケージ を使用した Mroonga のインストール手順を追加しました。

  Mroonga 11.03にて、Debian GNU/Linux 向けの Oracle の MySQLパッケージ を使用した Mroongaをサポートしました。これらのパッケージのインストール手順をドキュメントに記載しました。これらのパッケージをインストールする際には、このドキュメントを参考にしてください。

- [CentOS] MariaDB 10.2.39、10.3.30、10.4.20、10.5.11をサポートしました。

### Fixes

- 検索を実行した際にクラッシュする問題を修正しました。

  この問題は通常は発生しません。

  発生条件は以下の通りです。

  > - `mroonga_command` を使ってGroongaに直接テーブルやカラムを作成している。

  > - 検索の実行と同時に上記のテーブルやカラムを削除する。

  上記の条件が成立した時にMroongaがクラッシュします。

## 11.03リリース - 2021-05-31

> 警告

> このリリースにはアップグレードとアンインストールに関する重大な問題があります。もし、このバージョンをインストールした場合、Mroongaのアップグレードとアンインストールに失敗します。

> したがって、このバージョンのMroongaは使用しないでください。

> すでにこのバージョンのMroongaをインストール済みの場合、以下の回避策を使うことでMroongaをアップグレードしたりアンインストールしたりできます。

> > 1. % echo "#!/bin/sh" > /usr/share/mroonga/deb/postrm.sh

> > 2. % chmod u+x /usr/share/mroonga/deb/postrm.sh

> > 3. Mroongaのアップグレード、または、アンインストール

> 警告

> このリリースから、パッケージ名が変更されます。この変更の影響でこのバージョンにアップグレード後、Mroongaが無効になることがあります。このバージョンにアップグレードする場合、以下の点を必ず確認してください。

> アップグレード後にMroongaが無効だった場合は、Mroongaを手動でインストールし直す必要があります。Mroongaの手動インストール及び、Mroongaが有効かどうかの確認については、以下のURLを参照してください。

> > - https://mroonga.org/docs/tutorial/installation_check.html

> また、今後も、Mroonga 11.03をまたいでMroongaをアップグレードする場合は、この現象が発生するので、注意してください。

> このバージョンにアップグレード後に、Mroongaは有効だがバージョンが古いという場合は、MySQL、MariaDB、PerconaServerを再起動する必要があります。Mroongaのバージョンは以下のコマンドで確認できます。

> > - `SHOW VARIABLES LIKE 'mroonga_version';`

> 警告

> このバージョンには非互換の変更があります。

> `GEOMETRY` 型を使用しているユーザーは、Mroonga 11.03にアップグレードする前に現在のデータを保存し、アップグレード後に保存したデータをリストアする必要があります。 データのダンプ/リストアには、以下の方法が使えます。

> 上記の処置を実施せずに、アップグレードするとデータが破損するので注意してください。

> データのダンプ/リストアには、以下の方法が使えます。

> > - mysqldump

> > - アップグレード前に `ALTER TABLE ENGINE=InnoDB` を実行し、アップグレード後に `ALTER TABLE ENGINE=Mroonga` を実行する。

> この修正を適用しない場合、 `INSERT/UPDATE/SELECT/SELECT` はうまく動作しますが、データはGroongaが誤った(緯度と経度はGroonga内で逆にされます)保存をします。そのため、 空間データに対する、 `mroonga_command('select ...')` は動作しません。

### Improvements

- 以下のようにパッケージ名を変更しました。

  - `mariadb-server-10.x-mroonga` -> `mariadb-10.x-mroonga`

  - `mysql-server-5.x-mroonga` -> `mysql-community-5.x-mroonga`

  - `mysql-server-8.x-mroonga` -> `mysql-community-8.x-mroonga`

  - `percona-server-5x-mroonga` -> `percona-server-5.x-mroonga`

  - `percona-server-8x-mroonga` -> `percona-server-8.x-mroonga`

- [Debian GNU/Linux] Oracle の MySQL 5.7 と Oracle の MySQL 8.0 をサポートしました。

  - このリリースから、新たに Debian GNU/Linux 向けに Oracle の MySQL 5.7 と 8.0 を使用した Mroonga パッケージを提供しました。

    - これにより、MroongaのDockerイメージをDocker公式のMySQLイメージを使って作成できます。

  - There are below restrictions in the MySQL 8.0 package.

    - [ラッパーモード] Wrapper mode is not supported yet.

    - [ストレージモード] ストレージモードでは、以下の機能が未対応です。

      - 最適化関連の機能

- 空間インデックスのSRIDをサポートしました。

  - 今回のリリースから MBRContains 関数を使った検索で、Mroongaのインデックスが使用されます。

- コンディションプッシュダウンを適用する条件式を増やしました。

  注釈

  コンディションプッシュダウンは、MySQLではなく、Mroonga内で条件式を評価します。したがって、多くのクエリーは、高速になりますが、Mroongaが条件式を評価することで、今までと異なる検索結果を返すことがあります。もし、Mroongaが意図しない検索結果を返した場合、以下のURLから報告してください。そして、コンディションプッシュダウンを無効にしてください。

  > - mroonga/mroonga#

  コンディションプッシュダウンは以下のように無効にできます。

  > - `SET GLOBAL mroonga_condition_push_down_type = "NONE"`

- [CentOS] Percona Server 8.0.23 をサポートしました。

### Fixes

- 緯度と経度を逆に保存していた問題を修正しました。

  警告

  この修正によって、後方互換性が壊れます。

  `GEOMETRY` 型を使用しているユーザーは、Mroonga 11.03にアップグレードする前に現在のデータを保存し、アップグレード後に保存したデータをリストアする必要があります。 データのダンプ/リストアには、以下の方法が使えます。

  > - `mysqldump`

  > - アップグレード前に `ALTER TABLE ENGINE=InnoDB` を実行し、アップグレード後に `ALTER TABLE ENGINE=Mroonga` を実行する。

  この修正を適用しない場合、 `INSERT/UPDATE/SELECT/SELECT` はうまく動作しますが、データはGroongaが誤った(緯度と経度はGroonga内で逆にされます)保存をします。そのため、 空間データに対する、 `mroonga_command('select ...')` は動作しません。

## 11.02リリース - 2021-05-10

### Improvements

- [CentOS] MySQL 5.7.34, 8.0.25をサポートしました。

  - There are below restrictions in the MySQL 8.0 package.

    - [ラッパーモード] Wrapper mode is not supported yet.

    - [ストレージモード] ストレージモードでは、以下の機能が未対応です。

      - 最適化関連の機能

      - 空間インデックスのSRID

        - 例えば、MBRContains関数を使った検索では、Mroongaのインデックスは使用されません。 (シーケンシャルサーチで検索します。)

- [CentOS] MariaDB 10.2.38、10.3.29、10.4.19、10.5.10をサポートしました。

- [Ubuntu] Ubuntu 16.04 (Xenial Xerus)のサポートをやめました。

  - 2021年4月でEnd of Standard Supportとなったためです。

## 11.01リリース - 2021-04-02

### Improvements

- [CentOS] MariaDB 10.2.37、10.3.28、10.4.18、10.5.9をサポートしました。

- [CentOS] Percona Server 5.7.33をサポートしました。

- 以下のように、JSON形式のテキストを使って、参照ベクターカラムに値を追加できるようになりました。

  - この機能によって、参照元のテーブルから参照先のカラムへ値を直接入力できるため、参照カラムにJSONデータを追加しやすくなります。

      CREATE TABLE attributes (
        _id int,
        name varchar(255),
        value varchar(255)
      ) DEFAULT CHARSET=utf8mb4;

      CREATE TABLE items (
        id int PRIMARY KEY AUTO_INCREMENT,
        attributes text DEFAULT NULL flags='COLUMN_VECTOR' groonga_type='attributes'
      );

      INSERT INTO items (attributes)
        VALUES ('[{"name": "color", "value": "white"},
                  {"name": "size",  "value": "big"}]');
      INSERT INTO items (attributes)
        VALUES ('[{"name": "color", "value": "black"}]');
      INSERT INTO items (attributes) VALUES ('');

      SELECT * FROM attributes;
        _id      name    value
        1        color   white
        2        size    big
        3        color   black

      SELECT * FROM items;
      id attributes
      1  [1,2]
      2  [3]
      3  []

### Fixes

- 外部キー制約が登録されない問題を修正しました。 [GitHub#393] [Kosuke Yamashitaさんが報告]

  - この問題は MySQL8.0 でのみ発生します。

  - 例えば、以下のように外部キー制約を定義しても、外部キー制約の情報が出力されていませんでした。

        CREATE TABLE referred (
          id int PRIMARY KEY AUTO_INCREMENT
        );

        CREATE TABLE refer (
          id int PRIMARY KEY AUTO_INCREMENT,
          id_referred int NOT NULL,
          CONSTRAINT id_referred FOREIGN KEY (id_referred) REFERENCES referred (id)
        );

        SELECT CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME
               FROM information_schema.REFERENTIAL_CONSTRAINTS;
        Empty set (0.000 sec)

- 以下のように、対象のデータベースに外部キー制約があると、 `DROP DATABASE` に失敗する問題を修正しました。[GitHub#390][Kosuke Yamashitaさんが報告]

      CREATE DATABASE another;
      USE another;

      CREATE TABLE referred (
        id int PRIMARY KEY AUTO_INCREMENT
      ) ENGINE=mroonga DEFAULT CHARSET utf8mb4;

      CREATE TABLE refer (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_referred int NOT NULL,
        CONSTRAINT id_referred FOREIGN KEY (id_referred) REFERENCES referred (id)
      ) ENGINE=mroonga DEFAULT CHARSET utf8mb4;

      DROP DATABASE another;
      ERROR 1016 (HY000): [table][remove] a column that references the table exists: <refer.id_referred> -> <referred>

- 以下のように、対象のテーブルが別のテーブルから参照されていると、 `DROP COLUMN` に失敗する問題を修正しました。[GitHub#389][Kosuke Yamashitaさんが報告]

      CREATE TABLE referred (
        id int PRIMARY KEY AUTO_INCREMENT,
        name varchar(255),
        text text
      ) ENGINE=mroonga DEFAULT CHARSET utf8mb4;

      CREATE TABLE refer (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_referred int NOT NULL,
        CONSTRAINT id_referred FOREIGN KEY (id_referred) REFERENCES referred (id)
      ) ENGINE=mroonga DEFAULT CHARSET utf8mb4;

      ALTER TABLE referred DROP COLUMN name;
      ERROR 1016 (HY000): [table][remove] a column that references the table exists: <refer.id_referred> -> <#sql2-3bc-25>

- MariaDB 10.3.28、 10.4.18、 10.5.9 との組み合わせでMroongaをビルドすると、ビルドエラーになる問題を修正しました。[GitHub#392][Tomohiro KATOさんがパッチ提供]

- MariaDBのMroongaでアップデートに失敗する問題を修正しました。 [Reported by ひじー]

### Thanks

- Kosuke Yamashitaさん

- かとうさん

- ひじーさん

## 11.00リリース - 2021-02-09

メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなく11.00へアップグレードできます。

今回のリリースでは、MySQL、MariaDB、PerconaServerが自動的に再起動します。Mroonga 11.00が必要としているGroonga 11.0.0が、MySQL、MariaDB、PerconaServerが再起動されるまで有効にならないためです。

### Improvements

- [CentOS] MySQL 5.6のサポートをやめました。

  - 2021年2月1日でEOLとなったためです。

- [CentOS] Percona Server 5.6 のサポートをやめました。

- Ubuntu 18.04 LTSのMariaDB 10.1のサポートをやめました。

  - MariaDB 10.1は、既にアップストリームでEOLとなったためです。

- Mroongaが要求するGroongaのバージョンを11.0.0以降に更新しました。

  - Groonga 11.0.0 で影響の大きなインデックス破損の問題が修正されているためです。