ndb_import 匯入 CSV 格式的資料,例如由 mysqldump --tab
產生的資料,直接使用 NDB API 匯入 NDB
。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
資料表。例如,假設您已使用適當的權限登入為 MySQL 使用者,則可以將資料庫名為 myinnodb
中的現有 InnoDB
資料表 myinnodb_table
匯出到資料庫名為 myndb
的 NDB
資料表 myndb_table
,如下所示
在 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=路徑
包含字元集的目錄。
-
命令列格式 --connections=#
類型 整數 預設值 1
最小值 1
最大值 4294967295
要建立的叢集連線數。
-
命令列格式 --connect-retries=#
類型 整數 預設值 12
最小值 0
最大值 12
放棄之前重試連線的次數。
-
命令列格式 --connect-retry-delay=#
類型 整數 預設值 5
最小值 0
最大值 5
嘗試聯絡管理伺服器時,在嘗試之間等待的秒數。
-
命令列格式 --connect-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=路徑
類型 字串 預設值 [無]
僅從指定的檔案讀取預設選項。
-
命令列格式 --defaults-extra-file=路徑
類型 字串 預設值 [無]
在讀取全域檔案後讀取指定的檔案。
-
命令列格式 --defaults-group-suffix=字串
類型 字串 預設值 [無]
也讀取 concat(group, suffix) 的群組。
--errins-type
=name
命令列格式 --errins-type=名稱
類型 列舉 預設值 [無]
有效值 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'
類型 Boolean 預設值 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
單位 列 設定每個列佇列的列數限制。使用 0 表示沒有限制。
-
命令列格式 --rowbytes=#
類型 整數 預設值 262144
最小值 0
最大值 4294967295
單位 bytes 設定每個列佇列的位元組數限制。使用 0 表示沒有限制。
-
命令列格式 --stats
將與效能和其他內部統計資料相關的選項資訊儲存在名為
*.sto
和*.stt
的檔案中。這些檔案在成功完成時一律會保留(即使未同時指定--keep-state
)。 --state-dir
=name
命令列格式 --state-dir=路徑
類型 字串 預設值 .
寫入程式執行所產生的狀態檔案的位置 (
、tbl_name
.map
、tbl_name
.rej
和tbl_name
.res
);預設值為目前目錄。tbl_name
.stt-
命令列格式 --table=名稱
類型 字串 預設值 [輸入檔案基本名稱]
依預設,ndb_import 會嘗試將資料匯入名稱為正在讀取資料的 CSV 檔案基本名稱的資料表。您可以使用
--table
選項(簡短格式為-t
)來指定資料表名稱,以覆寫資料表名稱的選擇。 -
命令列格式 --tempdelay=#
類型 整數 預設值 10
最小值 0
最大值 4294967295
單位 毫秒 暫時性錯誤之間睡眠的毫秒數。
-
命令列格式 --temperrors=#
類型 整數 預設值 0
最小值 0
最大值 4294967295
每個執行批次中,由於暫時性錯誤而導致交易失敗的次數。預設值為 0,表示任何暫時性錯誤都是致命的。暫時性錯誤不會導致任何列新增至
.rej
檔案。 --verbose
、-v
命令列格式 --verbose[=#]
類型 Boolean 預設值 false
啟用詳細輸出。
-
命令列格式 --usage
顯示說明文字並結束;與
--help
相同。 -
命令列格式 --version
顯示版本資訊並結束。
與 LOAD DATA
一樣,欄位和行格式化的選項必須與用於建立 CSV 檔案的選項相符,無論是使用 SELECT INTO ... OUTFILE
完成,還是透過其他方式完成。沒有與 LOAD DATA
陳述式 STARTING WITH
選項等效的選項。