Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Importing Data Into MySQL Cluster

25.6.9 将数据导入 MySQL 集群

在设置新的 NDB 集群实例时,通常需要从现有的 NDB 集群、MySQL 实例或其他来源导入数据。这些数据通常以以下格式提供:

从 SQL 文件导入数据时,通常不需要执行事务或外键,因此临时禁用这些功能可以大大加速导入过程。这可以使用 mysql 客户端来完成,或者从命令行调用它。

SET ndb_use_transactions=0;
SET foreign_key_checks=0;

source path/to/dumpfile;

SET ndb_use_transactions=1;
SET foreign_key_checks=1;

在执行导入时,必须重新启用 ndb_use_transactionforeign_key_checks,否则可能会导致数据不一致。

从系统 shell 中,可以使用 mysql 客户端的 --init-command 选项禁用事务和外键约束,例如:

$> mysql --init-command='SET ndb_use_transactions=0; SET foreign_key_checks=0' < path/to/dumpfile

也可以将数据加载到 InnoDB 表中,然后使用 ALTER TABLE ... ENGINE NDB 将其转换为使用 NDB 存储引擎。请注意,对于许多表,这可能需要执行多个操作;此外,如果使用外键,必须小心地执行 ALTER TABLE 语句的顺序,因为外键不能在使用不同 MySQL 存储引擎的表之间工作。

您应该注意,前面描述的方法不适合非常大的数据集或大事务。如果应用程序需要大事务或许多并发事务作为正常操作的一部分,您可能需要增加 MaxNoOfConcurrentOperations 数据节点配置参数的值,以便为数据节点预留更多内存,以便在事务协调器意外停止时接管事务。

您也可能希望在执行批量DELETEUPDATE操作时对 NDB 集群表执行此操作。如果可能,尝试让应用程序以块的形式执行这些操作,例如,通过将LIMIT添加到这些语句中。

如果数据导入操作未能成功完成,无论出于什么原因,您都应该准备好执行必要的清理操作,包括可能需要执行一个或多个DROP TABLE语句、DROP DATABASE语句,或者两者。否则,可能会使数据库处于不一致的状态。