文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  将数据导入 MySQL 集群

25.6.9 将数据导入 MySQL 集群

在设置 NDB 集群的新实例时,通常需要从现有的 NDB 集群、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 客户端的 source 命令后再次启用 ndb_use_transactionforeign_key_checks。否则,同一会话中的后续语句也可能在不强制事务或外键约束的情况下执行,这会导致数据不一致。

从系统 shell,您可以使用带有 --init-command 选项的 mysql 客户端,在禁用事务和外键强制执行的情况下导入 SQL 文件,如下所示

$> 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 集群表执行批量 DELETEUPDATE 操作时,您可能也希望这样做。如果可能,尝试让应用程序分块执行这些操作,例如,通过在这些语句中添加 LIMIT

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