2019.11.01

MySQL

MySQL NDB Cluster 7.5.16 GA版(リリース日:2019年10月15日)

主な変更点

■ 追加・変更された機能

● ndb_restoreは、バックアップの.ctlファイルからテーブル記述子をロードできない時に、特定のNDBエラー番号とメッセージを報告するようになりました。これは、より最近のバージョンのNDB Clusterソフトウェアから取得したバックアップを以前のバージョンを実行しているクラスターに復元しようとした時に発生する可能性があります。例えば、バックアップがその復元に使用されているndb_restoreのバージョンには不明な文字セットを使用するテーブルを含む場合。 (Bug #30184265)

■ バグ修正

● MySQL NDB ClusterJ:ClusterJがマルチモジュールWebアプリケーションの独立したモジュールとしてデプロイされた場合、アプリケーションがドメインオブジェクトの新しいインスタンスを作成しようとした時、例外java.lang.IllegalArgumentException: non-public interface is not defined by the given loaderが投げられました。これは、ClusterJが常にドメインオブジェクトをインスタンス化できるプロキシクラスを作成しようとし、プロキシクラスはドメインインターフェイスと保護されたDomainTypeHandlerImpl::Finalizableインターフェイスの実装であるからです。これらの2つのインターフェースのクラスローダーは、Webサーバーで稼働している別々のモジュールに属していたため、状況が異なりました。そのため、ClusterJがドメインオブジェクトインターフェイスのクラスローダーを使用してプロキシクラスを作成しようとすると、上記の例外が投げられました。この修正により、Finalizationインターフェースがパブリックになり、Webアプリケーションのクラスローダーがドメインインターフェースのクラスローダーとは異なるモジュールに属している場合でもアクセスできるようになりました。 (Bug #29895213)

● MySQL NDB ClusterJ:ClusterJは、NDB Clusterに再接続した後、セグメンテーション違反で失敗することがありました。これは、ClusterJが古い接続から古いデータベースメタデータオブジェクトを再利用したためです。この修正により、それらのオブジェクトはクラスタへの再接続の前に破棄されます。 (Bug #29891983)

● グローバルスキーマロック(GSL)を実行する場合、NDBはテーブルオブジェクト参照を取得しようとする時に、連続するリタイアのために単一のNdb_table_guardオブジェクトを使用しました。基礎となるオブジェクトポインターがその後にキャッシュされた参照から返される以前に取得されたポインターで初期化時に一度だけ決定されるとNdb_table_guardが仮定するために、これは最初の試行で失敗すると成功する可能性はありませんでした。

 これにより、GSLを取得するために無限の待機が発生し、binlogインジェクタースレッドがハングして、mysqldがすべてのNDBテーブルを読み取り専用と見なしました。この問題を回避するために、NDBはそのような再試行ごとにNdb_table_guardの新しいインスタンスを使用するようになりました。 (Bug #30120858)

 参照:この問題は、Bug #30086352のリグレッションです。

● NDB 7.4から作成されたバックアップからNDB 7.6を実行しているクラスターにパーティションを変更するためMAX_ROWSが使用されたテーブル復元が正しく機能しませんでした。これは、PartitionBalanceを処理するアップグレードコードがNDBディクショナリに有効なテーブル仕様を確実に提供するようにすることで解決されます。 (Bug #29955656)

● NDBインデックス統計は、順序付けされたインデックスの1つのフラグメントのトポロジに基づいて計算されます。特定のインデックスで選択されたフラグメントは、インデックスが最初に作成された時と、ノードまたはシステムの再起動がインデックスをローカルに再作成した時の両方で、インデックス作成時に決定されます。この計算は、インデックス内のフラグメントの数に一部基づいており、テーブルが再編成されると変更される可能性があります。これは、次回ノードが再起動される時に、このノードが別のフラグメントを選択する可能性があるため、インデックス統計の生成に1つまたは2つのフラグメントが使用されるか、フラグメントが全く使用されず、結果としてANALYZE TABLEからエラーが発生することを意味します。

 この問題は、選択したフラグメントをすぐに再計算するようにオンラインテーブル再編成を修正することで解決され、その後の再起動の前後にすべてのノードが整列されます。 (Bug #29534647)

● データノードが起動したがまだpresidentに選出されていない時の再起動中に、管理サーバーがnode ID already in useエラーを受信したため、過剰な再試行とロギングが発生しました。これは、このケースのために新しいエラー1705 Not ready for connection allocation yetを導入することで解決されています。

 データノードがノード障害処理をまだ完了していない時の再起動中に、誤ったFailed to allocate nodeIDエラーが返されました。これは、不完全なノード起動を検出し、代わりにエラー1703 Node failure handling not completedを返すチェックを追加することで解決されています。

 この修正の一部として、nodeIDエラーを割り当てる準備ができていない場合の再試行の頻度が減り、テスト目的で遅い再起動をシミュレートするためにエラー挿入が追加され、関連するノードID割り当てエラーがマイナーで一時的なものであることを示すためにログメッセージが書き直されました。 (Bug #27484514)

MySQL NDB Cluster 7.5.16リリースノート(MySQLウェブサイト): https://dev.mysql.com/doc/relnotes/mysql-cluster/7.5/en/news-7-5-16.html

MySQL Editions

MySQL EditionsMySQLのサブスクリプションは、24時間365日体制でお客様をサポートいたします。さらに MySQL Enterprise Edition では、データベース管理者支援ツール MySQL Enterprise Monitor やバックアップツール MySQL Enterprise Backup をご利用いただけます。

MySQL Editionsの詳細