Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

25.6.9 将数据导入 MySQL 集群

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

从SQL文件中导入数据时,通常不需要强制事务或外键约束,并且临时禁用这些功能可以大大加速导入过程。这可以使用mysql客户端实现, either从客户端会话中或在命令行上调用。从mysql客户端会话中,您可以使用以下SQL语句来执行导入:

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,以便在执行mysql客户端的source命令后。否则,可能会导致同一会话中的后续语句也不会执行事务或外键约束,从而导致数据不一致。

从系统 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集群表进行优化。如果可能,请让应用程序在执行这些操作时将其分 chunk,例如通过添加LIMIT语句。

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