在设置 NDB Cluster 的新实例时,通常需要从现有的 NDB Cluster、MySQL 实例或其他源导入数据。此数据通常以以下一种或多种格式提供:
由mysqldump或其他导出程序生成的 CSV 文件。可以将此类文件导入到 mysql客户
NDB
端中使用,或者使用NDB Cluster 发行版提供的ndb_import实用程序。有关后者的更多信息,请参阅 第 21.5.14 节,“ndb_import — 将 CSV 数据导入 NDB”。LOAD DATA INFILE
在 管理客户端中使用生成 的本机
NDB
备份 。要导入本机备份,您必须使用作为 NDB Cluster 一部分的ndb_restore 程序。有关使用此程序的更多信息, 请参阅 第 21.5.24 节,“ndb_restore - 恢复 NDB Cluster 备份” 。START BACKUP
NDB
从 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_transaction
后
foreign_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
语句或两者。否则可能会使数据库处于不一致状态。