次の 2 つのセクションでは、ネイティブ NDB バックアップを、バックアップが作成されたバージョンとは異なるバージョンの NDB Cluster に復元する方法について説明します。
また、NDB ソフトウェアの別のバージョンを実行しているクラスタに NDB バックアップを復元しようとしたときに発生する可能性のあるその他の問題については、セクション23.2.7「NDB Cluster のアップグレードおよびダウングレード」 に相談してください。
NDB 8.0 と以前のバージョンの NDB Cluster の間で、特定の状況に関連する可能性のあるその他の変更については、NDB Cluster 8.0 の新機能 および セクション2.11.4「MySQL 8.0 での変更」 を確認することもお勧めします。
以前のバージョンには存在しない機能を使用しているため、新しいバージョンの NDB Cluster から以前のバージョンにバックアップを復元するときに問題が発生することがあります。 これらの問題の一部を次に示します:
NDB 8.0 で作成されたテーブルは、NDB 7.6 以前では使用できない
utf8mb4_ai_ci
文字セットをデフォルトで使用するため、これらの以前のバージョンのいずれかから ndb_restore バイナリによって読み取ることはできません。 このような場合は、バックアップを実行する前に古いバージョンでサポートされている文字セットを使用するように、utf8mb4_ai_ci
を使用してテーブルを変更する必要があります。-
MySQL Server および NDB がテーブルメタデータを処理する方法が変更されたため、含まれている MySQL サーバーバイナリを使用して NDB 8.0.14 以降から作成または変更されたテーブルは、ndb_restore を使用して以前のバージョンの NDB Cluster に復元できません。 このようなテーブルでは、古いバージョンの mysqld で認識されない
.sdi
ファイルが使用されます。NDB 8.0.13 以前で作成され、NDB 8.0.14 以降へのアップグレード以降に変更されていない NDB 8.0.14 以降のテーブルで作成されたバックアップは、古いバージョンの NDB Cluster に復元可能である必要があります。
メタデータとテーブルデータを別々にリストアできるため、このような場合は、mysqldump を使用して作成したダンプからテーブルスキーマをリストアするか、必要な
CREATE TABLE
ステートメントを手動で実行してから、--restore-data
オプションを指定した ndb_restore を使用してテーブルデータのみをインポートできます。 NDB 8.0.22 以降で作成された暗号化バックアップは、NDB 8.0.21 以前の ndb_restore を使用して復元することはできません。
NDB 8.0.18 より前では、
NDB_STORED_USER
権限はサポートされていません。NDB Cluster 8.0.18 以降では最大 144 個のデータノードがサポートされますが、それ以前のバージョンでは最大 48 個のデータノードのみがサポートされます。 この非互換性によって問題が発生する状況の詳細は、セクション23.4.23.2.1「元のノードより少ないノードへのリストア」 を参照してください。
一般に、古いバージョンの NDB で
ndb_mgm クライアントの
START BACKUP
コマンドを使用して作成されたバックアップは、新しいバージョンに付属の
ndb_restore
バイナリを使用している場合は、新しいバージョンに復元できます。
(古いバージョンの ndb_restore
を使用することもできますが、お薦めしません。)
その他の潜在的な問題を次に示します:
-
バックアップ (
--restore-meta
オプション) からメタデータをリストアする場合、ndb_restore は通常、取得したテーブルスキーマをバックアップの作成時とまったく同じように再現しようとします。8.0.14 より前のバージョンの NDB で作成されたテーブルは、そのメタデータに
.frm
ファイルを使用します。 これらのファイルは NDB 8.0.14 以降の mysqld で読み取ることができ、それに含まれる情報を使用して、MySQL データディクショナリで使用される.sdi
ファイルを新しいバージョンで作成できます。 古いバックアップを NDB の新しいバージョンに復元する場合、ハッシュマップパーティション分割、より多くのハッシュマップバケット、読み取りバックアップ、さまざまなパーティションレイアウトなどの新しい機能を利用できないことがあります。 このため、NDB が新しいスキーマ機能を利用できるように、mysqldump および mysql クライアントを使用して古いスキーマを復元することをお勧めします。
-
小数秒をサポートしていない古い時間型 (MySQL 5.6.4 および NDB 7.3.31 より前に使用されていた) を使用しているテーブルは、ndb_restore を使用して NDB 8.0 に復元できません。
CHECK TABLE
を使用してこのようなテーブルをチェックし、必要に応じて mysql クライアントでREPAIR TABLE
を使用して、新しい時間カラム形式にアップグレードできます。これは、バックアップを取得する前に行う必要があります。 詳しくはセクション2.11.5「アップグレード用のインストールの準備」,をご覧ください。また、mysqldump で作成されたダンプを使用して、このようなテーブルをリストアします。
NDB 7.6 以前で作成された分散付与テーブルは NDB 8.0 ではサポートされていません。 このようなテーブルは NDB 8.0 クラスタに復元できますが、アクセス制御には影響しません。