Documentation Home
MySQL 8.0 参考手册  / 第 23 章 MySQL NDB Cluster 8.0  / 23.6 NDB Cluster的管理  /  18.6.9 导入数据到MySQL集群

18.6.9 导入数据到MySQL集群

在设置 NDB Cluster 的新实例时,通常需要从现有的 NDB Cluster、MySQL 实例或其他源导入数据。此数据通常以以下一种或多种格式提供:

从 SQL 文件导入数据时,通常不需要强制执行事务或外键,暂时禁用这些功能可以大大加快导入过程。这可以使用mysql客户端从客户端会话或通过在命令行上调用它来完成。在 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;

以这种方式执行导入时,您 必须在执行mysql客户端 命令ndb_use_transactionforeign_key_checks再次启用 。否则,同一会话中后面的语句也可能在不执行事务或外键约束的情况下执行,这可能导致数据不一致。 source

在系统 shell 中,您可以导入 SQL 文件,同时通过使用带有 选项的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 数据节点配置参数的值,这会保留更多内存以允许数据节点在其事务协调器停止时接管事务不料。

在 NDB Cluster 表上执行批量DELETE或 操作 时,您可能还希望这样做 。UPDATE如果可能,请尝试让应用程序以块的形式执行这些操作,例如,通过添加 LIMIT到此类语句。

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