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_table
的现有 InnoDB
表(位于名为 myinnodb
的数据库中)导出到名为 myndb_table
的 NDB
表(位于名为 myndb
的数据库中),如下所示,假设您已经以具有适当权限的 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
值以获取所有可能的值。 此选项仅用于测试目的。-
命令行格式 --errins-delay=#
类型 整数 默认值 1000
最小值 0
最大值 4294967295
单位 毫秒 错误插入延迟(以毫秒为单位);会添加随机变化。 此选项仅用于测试目的。
--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
单位 毫秒 等待执行更多工作时休眠的毫秒数。
-
命令行格式 --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
单位 毫秒 为已完成的异步事务设置每次轮询的超时;轮询将持续进行,直到所有轮询都完成,或者直到发生错误。
-
命令行格式 --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
单位 毫秒 临时错误之间休眠的毫秒数。
-
命令行格式 --temperrors=#
类型 整数 默认值 0
最小值 0
最大值 4294967295
每个执行批次中,由于临时错误导致事务失败的次数。默认值为 0,这意味着任何临时错误都是致命的。临时错误不会导致任何行添加到
.rej
文件中。 --verbose
,-v
命令行格式 --verbose[=#]
类型 布尔值 默认值 false
启用详细输出。
-
命令行格式 --usage
显示帮助文本并退出;与
--help
相同。 -
命令行格式 --version
显示版本信息并退出。
与 LOAD DATA
一样,字段和行格式的选项必须与用于创建 CSV 文件的选项匹配,无论此操作是通过 SELECT INTO ... OUTFILE
还是其他方式完成的。没有等效于 LOAD DATA
语句的 STARTING WITH
选项。