文档主页
MySQL 8.4 参考手册
相关文档 下载本手册

MySQL 8.4 参考手册  /  ...  /  将数据导入 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 语句,或两者都执行。否则,可能会导致数据库处于不一致状态。