ndb_import 将 CSV 格式的数据(例如由 mysqldump --tab
生成的)直接导入到 NDB
中,使用 NDB API。 ndb_import 需要连接到 NDB 管理服务器(ndb_mgmd)才能正常工作;它不需要连接到 MySQL 服务器。
用法
ndb_import db_name file_name options
ndb_import 需要两个参数。 db_name
是包含要导入数据的表的数据库的名称;file_name
是要读取数据的 CSV 文件的名称;如果该文件不在当前目录中,则必须包含该文件的路径。文件名必须与表名匹配;文件的扩展名(如果有)将不被考虑。 ndb_import 支持的选项包括用于指定字段分隔符、转义符和行终止符的选项,这些选项将在本节后面介绍。
ndb_import 会拒绝从 CSV 文件中读取的任何空行,除非导入单个列,在这种情况下,可以将空值用作列值。 ndb_import 的处理方式与 LOAD DATA
语句相同。
ndb_import 必须能够连接到 NDB Cluster 管理服务器;因此,集群 config.ini
文件中必须存在一个未使用的 [api]
槽。
要复制一个使用不同存储引擎(例如 InnoDB
)的现有表作为 NDB
表,请使用 mysql 客户端执行 SELECT INTO OUTFILE
语句以将现有表导出到 CSV 文件,然后执行 CREATE TABLE LIKE
语句以创建结构与现有表相同的表,然后在新表上执行 ALTER TABLE ... ENGINE=NDB
;完成此操作后,从系统 shell 中调用 ndb_import 将数据加载到新的 NDB
表中。例如,现有数据库名为 myinnodb
中名为 myinnodb_table
的 InnoDB
表可以导出到名为 myndb
的数据库中的 myndb_table
中,如下所示,假设您已以具有相应权限的 MySQL 用户身份登录
在 mysql 客户端中
mysql> USE myinnodb; mysql> SELECT * INTO OUTFILE '/tmp/myndb_table.csv' > FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' > LINES TERMINATED BY '\n' > FROM myinnodbtable; mysql> CREATE DATABASE myndb; mysql> USE myndb; mysql> CREATE TABLE myndb_table LIKE myinnodb.myinnodb_table; mysql> ALTER TABLE myndb_table ENGINE=NDB; mysql> EXIT; Bye $>
创建目标数据库和表后,就不再需要运行 mysqld 了。如果您愿意,可以使用 mysqladmin shutdown 或其他方法在继续之前停止它。
在系统 shell 中
# if you are not already in the MySQL bin directory: $> cd path-to-mysql-bin-dir $> ndb_import myndb /tmp/myndb_table.csv --fields-optionally-enclosed-by='"' \ --fields-terminated-by="," --fields-escaped-by='\\'
输出应类似于以下内容
job-1 import myndb.myndb_table from /tmp/myndb_table.csv job-1 [running] import myndb.myndb_table from /tmp/myndb_table.csv job-1 [success] import myndb.myndb_table from /tmp/myndb_table.csv job-1 imported 19984 rows in 0h0m9s at 2277 rows/s jobs summary: defined: 1 run: 1 with success: 1 with failure: 0 $>
可以使用 ndb_import 的所有选项都显示在下面的表格中。表格下方提供了其他描述。
-
命令行格式 --abort-on-error
在任何致命错误时转储核心文件;仅用于调试。
-
命令行格式 --ai-increment=#
类型 整数 默认值 1
最小值 1
最大值 4294967295
对于具有隐藏主键的表,请指定自增增量,类似于 MySQL 服务器中的
auto_increment_increment
系统变量。 -
命令行格式 --ai-offset=#
类型 整数 默认值 1
最小值 1
最大值 4294967295
对于具有隐藏主键的表,请指定自增偏移量。类似于
auto_increment_offset
系统变量。 -
命令行格式 --ai-prefetch-sz=#
类型 整数 默认值 1024
最小值 1
最大值 4294967295
对于具有隐藏主键的表,请指定预取的自增值的个数。与 MySQL 服务器中的
ndb_autoincrement_prefetch_sz
系统变量的行为相同。 -
命令行格式 --character-sets-dir=path
包含字符集的目录。
-
命令行格式 --connections=#
类型 整数 默认值 1
最小值 1
最大值 4294967295
要创建的集群连接数。
-
命令行格式 --connect-retries=#
类型 整数 默认值 12
最小值 0
最大值 12
放弃连接之前要重试的次数。
-
命令行格式 --connect-retry-delay=#
类型 整数 默认值 5
最小值 0
最大值 5
尝试联系管理服务器之间等待的秒数。
-
命令行格式 --connect-string=connection_string
类型 字符串 默认值 [无]
与
--ndb-connectstring
相同。 -
命令行格式 --continue
作业失败时,继续执行下一个作业。
-
命令行格式 --core-file
在错误时写入核心文件;用于调试。
--csvopt
=string
命令行格式 --csvopt=opts
类型 字符串 默认值 [无]
提供了一种设置典型 CSV 导入选项的快捷方法。此选项的参数是一个字符串,它包含以下一个或多个参数
c
: 字段以逗号结尾d
: 使用默认值,除非被另一个参数覆盖n
: 行以\n
结尾q
: 字段可以选择用双引号字符 ("
) 括起来r
: 行以\r
结尾
此选项中使用的参数顺序处理方式是,最右侧的参数始终优先于同一参数值中已使用的任何可能冲突的参数。这也适用于给定参数的任何重复实例。
此选项旨在用于在难以传输转义符或引号的条件下进行测试。
-
命令行格式 --db-workers=#
类型 整数 默认值 4
最小值 1
最大值 4294967295
每个数据节点执行数据库操作的线程数。
-
命令行格式 --defaults-file=path
类型 字符串 默认值 [无]
仅从给定文件中读取默认选项。
-
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [无]
在读取全局文件后读取给定文件。
-
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [无]
也读取带有 concat(group, suffix) 的组。
--errins-type
=name
命令行格式 --errins-type=name
类型 枚举 默认值 [无]
有效值 stopjob
stopall
sighup
sigint
list
错误插入类型;使用
list
作为name
值以获取所有可能的 value。此选项仅用于测试目的。-
命令行格式 --errins-delay=#
类型 整数 默认值 1000
最小值 0
最大值 4294967295
单位 ms 错误插入延迟(以毫秒为单位);会添加随机变化。此选项仅用于测试目的。
--fields-enclosed-by
=char
命令行格式 --fields-enclosed-by=char
类型 字符串 默认值 [无]
此选项的工作方式与
LOAD DATA
语句中的FIELDS ENCLOSED BY
选项相同,它指定一个字符作为引用字段值的解释。对于 CSV 输入,这与--fields-optionally-enclosed-by
相同。--fields-escaped-by
=name
命令行格式 --fields-escaped-by=char
类型 字符串 默认值 \
指定转义字符,与 SQL
LOAD DATA
语句中的FIELDS ESCAPED BY
选项相同。--fields-optionally-enclosed-by
=char
命令行格式 --fields-optionally-enclosed-by=char
类型 字符串 默认值 [无]
此选项的工作方式与
LOAD DATA
语句中的FIELDS OPTIONALLY ENCLOSED BY
选项相同,指定一个字符作为可选的字段值引号。对于 CSV 输入,这与--fields-enclosed-by
相同。-
命令行格式 --fields-terminated-by=char
类型 字符串 默认值 \t
此选项的工作方式与
LOAD DATA
语句中的FIELDS TERMINATED BY
选项相同,指定一个字符作为字段分隔符。 -
命令行格式 --help
显示帮助文本并退出。
-
命令行格式 --idlesleep=#
类型 整数 默认值 1
最小值 1
最大值 4294967295
单位 ms 等待更多工作执行的休眠毫秒数。
-
命令行格式 --idlespin=#
类型 整数 默认值 0
最小值 0
最大值 4294967295
在休眠前重试的次数。
-
命令行格式 --ignore-lines=#
类型 整数 默认值 0
最小值 0
最大值 4294967295
使 ndb_import 忽略输入文件的前
#
行。这可以用来跳过不包含任何数据的文件头。 --input-type
=name
命令行格式 --input-type=name
类型 枚举 默认值 csv
有效值 random
csv
设置输入类型。默认值为
csv
;random
仅用于测试目的。-
命令行格式 --input-workers=#
类型 整数 默认值 4
最小值 1
最大值 4294967295
设置处理输入的线程数。
-
命令行格式 --keep-state
默认情况下,ndb_import 会在完成作业时删除所有状态文件(除了非空的
*.rej
文件)。指定此选项(不需要参数)强制程序保留所有状态文件。 -
命令行格式 --lines-terminated-by=char
类型 字符串 默认值 \n
此选项的工作方式与
LOAD DATA
语句中的LINES TERMINATED BY
选项相同,指定一个字符作为行尾。 -
命令行格式 --log-level=#
类型 整数 默认值 0
最小值 0
最大值 2
以给定的级别执行内部日志记录。此选项主要用于内部和开发使用。
在 NDB 的调试版本中,可以使用此选项将日志记录级别设置为最大 4。
-
命令行格式 --login-path=path
类型 字符串 默认值 [无]
从登录文件中读取给定的路径。
-
命令行格式 --no-login-paths
跳过从登录路径文件中读取选项。
-
命令行格式 --max-rows=#
类型 整数 默认值 0
最小值 0
最大值 4294967295
单位 bytes 仅导入此数量的输入数据行;默认值为 0,表示导入所有行。
-
命令行格式 --missing-ai-column='name'
类型 布尔值 默认值 FALSE
此选项可以在导入单个表或多个表时使用。使用时,它表示要导入的 CSV 文件不包含任何
AUTO_INCREMENT
列的值,并且 ndb_import 应该提供这些值;如果使用此选项并且AUTO_INCREMENT
列包含任何值,则导入操作无法继续。 -
命令行格式 --monitor=#
类型 整数 默认值 2
最小值 0
最大值 4294967295
单位 bytes 如果运行的作业状态发生变化(状态、拒绝的行、临时错误),则定期打印状态。设置为 0 可禁用此报告。设置为 1 将打印看到的任何更改。更高的值将降低此状态报告的频率。
-
命令行格式 --ndb-connectstring=connection_string
类型 字符串 默认值 [无]
设置连接到 ndb_mgmd 的连接字符串。语法:
[nodeid=
。覆盖id
;][host=]hostname
[:port
]NDB_CONNECTSTRING
和my.cnf
中的条目。 -
命令行格式 --ndb-mgm-tls=level
类型 枚举 默认值 relaxed
有效值 relaxed
strict
设置连接到管理服务器所需的 TLS 支持级别;
relaxed
或strict
之一。relaxed
(默认值)表示尝试建立 TLS 连接,但不需要成功;strict
表示连接需要 TLS。 -
命令行格式 --ndb-mgmd-host=connection_string
类型 字符串 默认值 [无]
与
--ndb-connectstring
相同。 -
命令行格式 --ndb-nodeid=#
类型 整数 默认值 [无]
设置此节点的节点 ID,覆盖由
--ndb-connectstring
设置的任何 ID。 --ndb-optimized-node-selection
命令行格式 --ndb-optimized-node-selection
为选择事务节点启用优化。默认情况下启用;使用
--skip-ndb-optimized-node-selection
禁用。-
命令行格式 --ndb-tls-search-path=list
类型 路径名 默认值(Unix) $HOME/ndb-tls
默认值(Windows) $HOMEDIR/ndb-tls
指定要搜索 CA 文件的目录列表。在 Unix 平台上,目录名用冒号 (
:
) 分隔;在 Windows 系统上,分号 (;
) 作为分隔符。目录引用可以是相对的或绝对的;它可以包含一个或多个环境变量,每个环境变量都用前缀美元符号 ($
) 表示,并在使用前进行扩展。搜索从最左边的命名目录开始,从左到右进行,直到找到文件。空字符串表示空搜索路径,这会导致所有搜索失败。由单个点 (
.
) 组成的字符串表示搜索路径仅限于当前工作目录。如果没有提供搜索路径,则使用编译时默认值。此值取决于使用的平台:在 Windows 上,这是
\ndb-tls
;在其他平台(包括 Linux)上,它是$HOME/ndb-tls
。这可以通过使用-DWITH_NDB_TLS_SEARCH_PATH
编译 NDB Cluster 来覆盖。 -
命令行格式 --no-asynch
以批处理方式运行数据库操作,在单个事务中运行。
-
命令行格式 --no-defaults
不从除登录文件之外的任何选项文件中读取默认选项。
-
命令行格式 --no-hint
不使用分布式键提示来选择数据节点。
-
命令行格式 --opbatch=#
类型 整数 默认值 256
最小值 1
最大值 4294967295
单位 bytes 设置每个执行批次的操作(包括 blob 操作)的数量限制,从而限制异步事务的数量。
-
命令行格式 --opbytes=#
类型 整数 默认值 0
最小值 0
最大值 4294967295
单位 bytes 设置每个执行批次的字节数限制。使用 0 表示无限制。
--output-type
=name
命令行格式 --output-type=name
类型 枚举 默认值 ndb
有效值 null
设置输出类型。
ndb
是默认值。null
仅用于测试。-
命令行格式 --output-workers=#
类型 整数 默认值 2
最小值 1
最大值 4294967295
设置处理输出或中继数据库操作的线程数。
-
命令行格式 --pagesize=#
类型 整数 默认值 4096
最小值 1
最大值 4294967295
单位 bytes 将 I/O 缓冲区对齐到给定大小。
-
命令行格式 --pagecnt=#
类型 整数 默认值 64
最小值 1
最大值 4294967295
将 I/O 缓冲区的大小设置为页面大小的倍数。CSV 输入工作程序分配的缓冲区大小加倍。
-
命令行格式 --polltimeout=#
类型 整数 默认值 1000
最小值 1
最大值 4294967295
单位 ms 为已完成的异步事务设置每个轮询的超时时间;轮询将持续进行,直到所有轮询完成,或直到发生错误。
-
命令行格式 --print-defaults
打印程序参数列表并退出。
-
命令行格式 --rejects=#
类型 整数 默认值 0
最小值 0
最大值 4294967295
限制数据加载中拒绝的行数(出现永久性错误的行)。默认值为 0,表示任何被拒绝的行都会导致致命错误。任何导致超出限制的行都会被添加到
.rej
文件中。此选项施加的限制对当前运行有效。使用
--resume
重新启动的运行被视为此目的的 “新的” 运行。 -
命令行格式 --resume
如果作业被中止(由于临时数据库错误或用户中断),请使用尚未处理的任何行恢复。
-
命令行格式 --rowbatch=#
类型 整数 默认值 0
最小值 0
最大值 4294967295
单位 rows 设置每行队列的行数限制。使用 0 表示无限制。
-
命令行格式 --rowbytes=#
类型 整数 默认值 262144
最小值 0
最大值 4294967295
单位 bytes 设置每行队列的字节数限制。使用 0 表示无限制。
-
命令行格式 --stats
将与性能和其它内部统计信息相关的选项信息保存到名为
*.sto
和*.stt
的文件中。这些文件在成功完成时始终被保存(即使没有同时指定--keep-state
)。 --state-dir
=name
命令行格式 --state-dir=path
类型 字符串 默认值 .
写入状态文件的位置 (
,tbl_name
.map
,tbl_name
.rej
和tbl_name
.res
),由程序运行生成;默认值为当前目录。tbl_name
.stt-
命令行格式 --table=name
类型 字符串 默认值 [输入文件基本名称]
默认情况下,ndb_import 尝试将数据导入到一个表中,该表的名称是正在从中读取数据的 CSV 文件的基本名称。可以通过使用
--table
选项(短格式-t
)来覆盖表的名称选择。 -
命令行格式 --tempdelay=#
类型 整数 默认值 10
最小值 0
最大值 4294967295
单位 ms 临时错误之间睡眠的毫秒数。
-
命令行格式 --temperrors=#
类型 整数 默认值 0
最小值 0
最大值 4294967295
每个执行批次中,由于临时错误,事务可以失败的次数。默认值为 0,这意味着任何临时错误都是致命的。临时错误不会导致任何行被添加到
.rej
文件中。 --verbose
,-v
命令行格式 --verbose[=#]
类型 布尔值 默认值 false
启用详细输出。
-
命令行格式 --usage
显示帮助文本并退出;与
--help
相同。 -
命令行格式 --version
显示版本信息并退出。
与 LOAD DATA
一样,字段和行格式的选项必须与用于创建 CSV 文件的选项匹配,无论这是使用 SELECT INTO ... OUTFILE
完成的,还是通过其它方式完成的。没有等效于 LOAD DATA
语句的 STARTING WITH
选项。