2020.06.12

MySQL

MySQL NDB Cluster 7.6.14 GA版(リリース日:2020年4月28日)

主な変更点

■ 追加・変更された機能

● NDBクライアントプログラム:ndb_blob_toolユーティリティに2つのオプションが追加され、インラインパーツが存在する欠落しているBLOBパーツを検出し、これらを正しい長さのプレースホルダーBLOBパーツ(スペース文字で構成)に置き換えることができます。欠落しているBLOBパーツがあるかどうかを確認するためには、ndb_blob_tool --check-missingオプションを使用します。欠落しているblobパーツをプレースホルダーで置き換えるためには、本リリースで追加されたプログラムの--add-missingオプションを使用します。 (Bug #28583971)

● NDBクライアントプログラム:NDBTライブラリのndb_waiterおよびndb_show_tablesユーティリティプログラムから依存関係を削除しました。NDB開発でテスト用に使用されるこのライブラリは、通常使用には必要ありません。この変更によるユーザーへの目に見える影響は、これらのプログラムがNDBT_ProgramExit - 実行の完了後のステータスを出力しないことです。この動作に依存するアプリケーションは、本リリースにアップグレードする時に、この変更を反映するように更新する必要があります。

● MySQL NDB ClusterJ:ClusterJによって使用されるいくつかのJava APIが、最近のJavaバージョンで非推奨になりました。これらの調整がClusterJに対して行われました。

  ・全てのClass.newInstance()呼び出しをClass.getDeclaredConstructor().newInstance()呼び出しに置き換えました。また、必要に応じて例外処理とテストケースを更新しました。
  ・Stringまたはプリミティブ型からオブジェクトをインスタンス化するNumberクラスのコンストラクタが全て非推奨になりました。そのような全ての非推奨のインスタンス化呼び出しを、対応するvalueOf()メソッド呼び出しに置き換えました。
  ・Proxy.getProxyClass()を非推奨にしました。DomainTypeHandlerImplクラスは、Proxy.newProxyInstance()メソッドを使用して新しいインスタンスを直接作成するようになりました。Proxyクラスとそのコンストラクタへの全ての参照がDomainTypeHandlerImplクラスから削除されます。SessionFactoryImplクラスは、Proxyクラスを使用するのではなく、プロキシオブジェクトの基礎となるインターフェイスを使用してドメインクラスを識別します。DomainTypeHandlerFactoryTestも更新されました。
  ・finalize()メソッドは、非推奨になりました。このパッチは、オーバーライドするfinalize()メソッドを変更しませんが、それらに対する警告を抑制します。この非推奨は、今後のパッチで個別に処理されます。
  ・CMakeの設定を更新し、ClusterJのコンパイル時に非推奨の警告をエラーとして扱うようにしました。

 (Bug #29931625)

● MySQL NDB ClusterJ:ClusterJがMySQL NDB Cluster 8.0に対してサポートする最小Javaバージョンは、Java 8になりました。 (Bug #29931625)

● MySQL NDB ClusterJ:未使用のantlr3プラグインがClusterJ pomファイルから削除されました。 (Bug #29931625)

● 元のデータセットが全て同じスキーマを使用している時、NDB Clusterの個別のインスタンスからのデータを1つのターゲットNDB Clusterに統合できるようになりました。これは、本リリースで実装された--remap-columnオプションを(--restore-dataとおそらく他のオプションとともに)使用して、ndb_mgmでSTART BACKUPを使用して作成されたバックアップを使用し、ndb_restoreでそれらを復元する場合にサポートされます。
。--remap-columnを使用して、ソースクラスタ間でプライマリキー、UNIQUEキー、または両方の種類のキーの値が重複するという問題を処理できます。そして、ターゲットクラスタでそれらが重複しないようにする必要があります。これは、テーブル間の他の関係を維持するためにも実行できます。

 --restore-dataと一緒に使用される時、新しいオプションは指定された列の値に関数を適用します。このオプションに設定される値は、db.tbl.col:fn:args形式の文字列で、そのコンポーネントは次のとおりです。

  ・db:名前の変更を実行した後のデータベース名。
  ・tbl:テーブル名。
  ・col:更新される列の名前。この列は、MySQLの整数型の1つを使用する必要があります。
  ・fn:関数名。現在、唯一サポートされている名前はオフセットです。
  ・args:オフセットにより列値に追加されるオフセットのサイズ。引数の範囲は、列の型の符号付きバリアントの範囲です。したがって、負のオフセットがサポートされます。

 --remap-columnを使用して、同じテーブルの複数の列も、異なるテーブルの異なる列も、複数のテーブルと列の組み合わせも更新することができます。同じテーブルの異なる列に異なるオフセット値を使用できます。

 この作業の一環として、本リリースではndb_descに2つの新しいオプションも追加されています。

  ・--auto-inc(短縮形 -a):テーブルにAUTO_INCREMENT列がある場合、次の自動インクリメント値を出力に含めます。
  ・--context(短縮形 -x):スキーマ、データベース名、テーブル名、内部IDを含む、テーブルに関する追加情報を提供します。

 これらのオプションは、特にmysqlクライアントがすぐに利用できないかもしれない状況で、マージを計画する時にNDBテーブルに関する情報を取得するのに役立ちます。

 (Bug #30383950)

● ndb_restoreは、本リリースで導入された--allow-pk-changesオプションを使用して、NDBネイティブバックアップから復元する時にソーステーブルとターゲットテーブルの異なるプライマリキー定義をサポートするようになりました。元のプライマリキーを構成する列の数の増加と減少の両方がサポートされています。これは、データの復元中にスキーマバージョンの変更に対応する必要がある場合、または、それを行うことが復元操作後に非常に多くのテーブルでプライマリキーの変更を伴うALTER TABLEステートメントを実行するよりも効率的または時間を節約できる場合に役立ちます。

 追加の列でプライマリキーを拡張する時、追加された列はNULL可能であってはならず、そのような列に格納された値はバックアップの取得中に変更してはいけません。そのような列をテーブルのプライマリキーに追加しようとしている時にその列の値を変更すると、復元操作が失敗します。一部のアプリケーションは、1つ以上の列の値が変更されていなくても、1行を更新する時に全ての列の値を設定するため、本リリースでも追加された--ignore-extended-pk-updatesオプションを使用して、この動作を無効にすることができます。これを行う場合、確実にこのような列の値が実際に変更されないように注意する必要があります。

 テーブルのプライマリキーから列を削除する時、プライマリキーから削除された列が以後テーブルの一部のままである必要はありません。

 (Bug #26435136, Bug #30383947, Bug #30634010)

● mysqldに--ndb-log-fail-terminateオプションを追加しました。これを使用すると、全ての行イベントを記録できない場合、SQLノードが終了します。 (Bug #21911930)

 参照:Bug #30383919。

■ バグ修正

● MySQL NDB ClusterJ:Date値がNDBクラスタから読み取られた時、ClusterJが誤った年の値を行から抽出することがありました。これは、UtilityクラスがDate値をアンパックする時に、年に関する必要以上のビットを誤って抽出したためです。このパッチはClusterJに必要なビットのみを抽出させます。 (Bug #30600320)

● MySQL NDB ClusterJ:クラスタのNdbOperation::AbortOptionタイプがAO_IgnoreOnErrorの値を持つ場合、読み取りエラーが発生すると、行が見つからなかったためにClusterJはそれを受け取り、例外の代わりにnullを返しました。これは、AO_IgnoreOnErrorを使用すると、execute()メソッドが各トランザクションの後に常に成功コードを返し、ClusterJが個々の操作のいずれかでエラーをチェックすることになっているためです。ただし、この場合、読み取り操作はClusterJによってチェックされませんでした。このパッチでは、クエリの実行後に読み取り操作のエラーがチェックされるため、読み取りエラーが報告されます。 (Bug #30076276)

● 署名付きの自動インクリメント列を復元する時、ndb_restoreはデータに含まれる最大値を決定する時に誤って負の値を処理しました。 (Bug #30928710)

● CSVファイルを処理する時、ndb_importは、mysqlimportによって受け入れられた行の最後にある末尾のフィールドターミネータを受け入れませんでした。 (Bug #30434663)

● ノードID割り当てリクエストがNotMaster一時エラーで失敗した場合、ノードID割り当てはエラーの原因に関係なく常にすぐに再試行され、非常に高い率で再試行が実行されました。その影響は、ノードnnnのAllocノードIDの過剰な数の失敗したログメッセージ(1秒あたり約15,000メッセージ)として観察できます。 (Bug #30293495)

● NDBテーブルに明示的なプライマリキーがない場合、NdbReceiverBufferが小さすぎるサイズで割り当てられる可能性がありました。これは、データノードからNDBに送信される属性ビットマップに常にプライマリキーが含まれていることが原因です。このような場合に、非表示のプライマリキーに必要な追加のスペースが考慮されるようになりました。 (Bug #30183466)

MySQL NDB Cluster 7.6.14リリースノート(MySQLウェブサイト): https://dev.mysql.com/doc/relnotes/mysql-cluster/7.6/en/news-7-6-14.html

MySQL Editions

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

MySQL Editionsの詳細