ndb_import 直接使用 NDB API 將 CSV 格式的資料 (例如 mysqldump --tab
所產生的資料) 匯入 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 叢集管理伺服器;因此,叢集 config.ini
檔案中必須有一個未使用的 [api]
插槽。
若要將現有的資料表 (使用不同的儲存引擎,例如 InnoDB
) 作為 NDB
資料表進行複製,請使用 mysql 用戶端執行 SELECT INTO OUTFILE
語句將現有的資料表匯出到 CSV 檔案,然後執行 CREATE TABLE LIKE
語句,建立與現有資料表具有相同結構的新資料表,然後在新資料表上執行 ALTER TABLE ... ENGINE=NDB
;完成此操作後,從系統 Shell 叫用 ndb_import 以將資料載入新的 NDB
資料表。例如,假設您已使用適當的權限以 MySQL 使用者身分登入,則可將名為 myinnodb
資料庫中名為 myinnodb_table
的現有 InnoDB
資料表匯出到名為 myndb
的資料庫中名為 myndb_table
的 NDB
資料表,如下所示
在 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=路徑
類型 字串 預設值 [無]
僅從給定的檔案讀取預設選項。
-
命令列格式 --defaults-extra-file=路徑
類型 字串 預設值 [無]
在讀取全域檔案後讀取給定的檔案。
-
命令列格式 --defaults-group-suffix=字串
類型 字串 預設值 [無]
也讀取 concat(group, suffix) 的群組。
-
命令列格式 --errins-type=名稱
類型 列舉 預設值 [無]
有效值 stopjob
stopall
sighup
sigint
list
錯誤插入類型;使用
list
作為名稱
值以取得所有可能的值。此選項僅用於測試目的。 -
命令列格式 --errins-delay=#
類型 整數 預設值 1000
最小值 0
最大值 4294967295
單位 毫秒 以毫秒為單位的錯誤插入延遲;會加上隨機變化。此選項僅用於測試目的。
-
命令列格式 --fields-enclosed-by=字元
類型 字串 預設值 [無]
其運作方式與
LOAD DATA
陳述式的FIELDS ENCLOSED BY
選項相同,指定一個要解譯為引述欄位值的字元。對於 CSV 輸入,這與--fields-optionally-enclosed-by
相同。 -
命令列格式 --fields-escaped-by=字元
類型 字串 預設值 \
指定跳脫字元的方式與 SQL
LOAD DATA
陳述式的FIELDS ESCAPED BY
選項相同。 --fields-optionally-enclosed-by
=字元
命令列格式 --fields-optionally-enclosed-by=字元
類型 字串 預設值 [無]
其運作方式與
LOAD DATA
陳述式的FIELDS OPTIONALLY ENCLOSED BY
選項相同,指定一個要解譯為選擇性引述欄位值的字元。對於 CSV 輸入,這與--fields-enclosed-by
相同。-
命令列格式 --fields-terminated-by=字元
類型 字串 預設值 \t
其運作方式與
LOAD DATA
陳述式的FIELDS TERMINATED BY
選項相同,指定一個要解譯為欄位分隔符號的字元。 -
命令列格式 --help
顯示說明文字並結束。
-
命令列格式 --idlesleep=#
類型 整數 預設值 1
最小值 1
最大值 4294967295
單位 毫秒 等待更多工作要執行的休眠毫秒數。
-
命令列格式 --idlespin=#
類型 整數 預設值 0
最小值 0
最大值 4294967295
在休眠之前重試的次數。
-
命令列格式 --ignore-lines=#
類型 整數 預設值 0
最小值 0
最大值 4294967295
使 ndb_import 忽略輸入檔案的前
#
行。這可以用來跳過不包含任何資料的檔案標頭。 --input-type
=名稱
命令列格式 --input-type=名稱
類型 列舉 預設值 csv
有效值 random
csv
設定輸入類型。預設值為
csv
;random
僅用於測試目的。-
命令列格式 --input-workers=#
類型 整數 預設值 4
最小值 1
最大值 4294967295
設定處理輸入的執行緒數。
-
命令列格式 --keep-state
預設情況下,ndb_import 會在完成作業時移除所有狀態檔案 (非空的
*.rej
檔案除外)。指定此選項 (不需要引數) 以強制程式保留所有狀態檔案。 -
命令列格式 --lines-terminated-by=字元
類型 字串 預設值 \n
其運作方式與
LOAD DATA
陳述式的LINES TERMINATED BY
選項相同,指定一個要解譯為行尾的字元。 -
命令列格式 --log-level=#
類型 整數 預設值 0
最小值 0
最大值 2
以給定的層級執行內部記錄。此選項主要用於內部和開發用途。
僅在 NDB 的偵錯版本中,可以使用此選項將記錄層級設定為最大 4。
-
命令列格式 --login-path=路徑
類型 字串 預設值 [無]
從登入檔案讀取給定的路徑。
-
命令列格式 --no-login-paths
略過從登入路徑檔案讀取選項。
-
命令列格式 --max-rows=#
類型 整數 預設值 0
最小值 0
最大值 4294967295
單位 位元組 僅匯入此數量的輸入資料列;預設值為 0,這會匯入所有列。
-
命令列格式 --missing-ai-column='名稱'
類型 布林值 預設值 FALSE
匯入單個資料表或多個資料表時,可以使用此選項。使用時,它表示要匯入的 CSV 檔案不包含任何
AUTO_INCREMENT
欄位的值,且 ndb_import 應該提供它們;如果使用該選項,且AUTO_INCREMENT
欄位包含任何值,則無法繼續執行匯入作業。 -
命令列格式 --monitor=#
類型 整數 預設值 2
最小值 0
最大值 4294967295
單位 位元組 如果執行中的作業發生變更 (狀態、拒絕的列、暫時性錯誤),則定期列印其狀態。設定為 0 可停用此報告。設定為 1 會列印所看到的任何變更。較高的值會降低此狀態報告的頻率。
-
命令列格式 --ndb-connectstring=連線字串
類型 字串 預設值 [無]
設定連線到 ndb_mgmd 的連線字串。語法:
[nodeid=
。會覆寫id
;][host=]hostname
[:port
]NDB_CONNECTSTRING
和my.cnf
中的項目。 -
命令列格式 --ndb-mgm-tls=層級
類型 列舉 預設值 relaxed
有效值 relaxed
strict
設定連線到管理伺服器所需的 TLS 支援層級;
relaxed
或strict
其中之一。relaxed
(預設值) 表示會嘗試 TLS 連線,但不需要成功;strict
表示需要 TLS 才能連線。 -
命令列格式 --ndb-mgmd-host=連線字串
類型 字串 預設值 [無]
與
--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=清單
類型 路徑名稱 預設值 (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
單位 位元組 設定每次執行批次的作業數量(包括 blob 作業)上限,因此也設定了非同步交易的數量上限。
-
命令列格式 --opbytes=#
類型 整數 預設值 0
最小值 0
最大值 4294967295
單位 位元組 設定每次執行批次的位元組數量上限。使用 0 表示沒有限制。
--output-type
=name
命令列格式 --output-type=name
類型 列舉 預設值 ndb
有效值 null
設定輸出類型。
ndb
是預設值。null
僅用於測試。-
命令列格式 --output-workers=#
類型 整數 預設值 2
最小值 1
最大值 4294967295
設定處理輸出或轉發資料庫操作的執行緒數量。
-
命令列格式 --pagesize=#
類型 整數 預設值 4096
最小值 1
最大值 4294967295
單位 位元組 將 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
單位 位元組 設定每個資料列佇列的位元組數量上限。使用 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
選項。