NDB Cluster 還原程式是以獨立的命令列公用程式 ndb_restore 實作,通常可以在 MySQL bin
目錄中找到。此程式會讀取備份產生的檔案,並將儲存的資訊插入資料庫中。
對於 ndb_restore,必須針對由用來建立備份的 START BACKUP
命令建立的每個備份檔案執行一次(請參閱 章節 25.6.8.2,「使用 NDB Cluster 管理用戶端建立備份」)。這等於在建立備份時叢集中資料節點的數量。
在使用 ndb_restore 之前,建議叢集在單一使用者模式下執行,除非您要平行還原多個資料節點。請參閱 章節 25.6.6,「NDB Cluster 單一使用者模式」,以取得更多資訊。
下表顯示可與 ndb_restore 搭配使用的選項。其他說明在表格之後。
-
命令列格式 --allow-pk-changes[=0|1]
類型 整數 預設值 0
最小值 0
最大值 1
當此選項設為
1
時,ndb_restore 允許表格定義中的主索引鍵與備份中相同表格的主索引鍵不同。當在不同結構描述版本之間備份和還原,且一個或多個表格的主索引鍵變更時,這可能是理想的,而且使用 ndb_restore 執行還原作業似乎比在還原表格結構描述和資料之後發出許多ALTER TABLE
陳述式更簡單或更有效率。--allow-pk-changes
支援以下主索引鍵定義的變更延伸主索引鍵:備份中表格結構描述中存在的不可為 Null 的資料行會成為資料庫中表格主索引鍵的一部分。
重要在延伸表格的主索引鍵時,在備份進行期間,任何成為主索引鍵一部分的資料行都不得更新;ndb_restore 發現的任何此類更新都會導致還原作業失敗,即使沒有發生值變更也是如此。在某些情況下,可能會使用
--ignore-extended-pk-updates
選項來覆寫此行為;如需更多資訊,請參閱此選項的說明。縮減主索引鍵 (1):備份結構描述中已屬於表格主索引鍵一部分的資料行不再屬於主索引鍵的一部分,但仍保留在表格中。
縮減主索引鍵 (2):備份結構描述中已屬於表格主索引鍵一部分的資料行會從表格中完全移除。
這些差異可以與 ndb_restore 支援的其他結構描述差異結合,包括需要使用暫存表格的 Blob 和文字資料行的變更。
以下列出使用主索引鍵結構描述變更之典型案例中的基本步驟
使用 ndb_restore
--restore-meta
還原表格結構描述將結構描述變更為所需結構描述,或建立結構描述
備份所需的結構描述
使用上一步的備份執行 ndb_restore
--disable-indexes
,以捨棄索引和限制執行 ndb_restore
--allow-pk-changes
(可能與--ignore-extended-pk-updates
、--disable-indexes
以及可能其他所需的選項一起),以還原所有資料使用所需結構描述製作的備份執行 ndb_restore
--rebuild-indexes
,以重建索引和限制
在延伸主索引鍵時,ndb_restore 可能需要在還原作業期間使用暫時性的次要唯一索引,以將舊的主索引鍵對應到新的主索引鍵。只有在需要將備份記錄中的事件套用至具有延伸主索引鍵的表格時,才會建立此類索引。此索引名為
NDB$RESTORE_PK_MAPPING
,且會針對每個需要它的表格建立;如有需要,可以讓平行執行的多個 ndb_restore 執行個體共用。(在還原程序結束時執行 ndb_restore--rebuild-indexes
會導致捨棄此索引。) -
命令列格式 --append
與
--tab
和--print-data
選項搭配使用時,這會導致資料附加到任何具有相同名稱的現有檔案。 --backup-path
=dir_name
命令列格式 --backup-path=路徑
類型 目錄名稱 預設值 ./
備份目錄的路徑是必要的;這是使用
--backup-path
選項提供給 ndb_restore,且必須包含對應於要還原之備份的 ID 備份的子目錄。例如,如果資料節點的DataDir
是/var/lib/mysql-cluster
,則備份目錄為/var/lib/mysql-cluster/BACKUP
,而 ID 為 3 的備份的備份檔案可以在/var/lib/mysql-cluster/BACKUP/BACKUP-3
中找到。此路徑可以是絕對路徑或相對於 ndb_restore 可執行檔所在之目錄的路徑,並且可以選擇性地以backup-path=
作為前置詞。可以將備份還原到與建立時配置不同的資料庫。例如,假設在具有節點 ID
2
和3
的兩個儲存節點的叢集中建立的備份,其備份 ID 為12
,要還原到具有四個節點的叢集。那麼,必須執行兩次 ndb_restore,每次針對備份建立時的叢集中的每個儲存節點執行一次。但是,ndb_restore 並非總是能將從執行某個 MySQL 版本的叢集所建立的備份還原到執行不同 MySQL 版本的叢集。請參閱第 25.3.7 節,「升級和降級 NDB Cluster」,以取得更多資訊。重要無法使用較舊版本的 ndb_restore 來還原從較新版本的 NDB Cluster 所建立的備份。您可以將從較新版本的 MySQL 所建立的備份還原到較舊的叢集,但是您必須使用來自較新 NDB Cluster 版本的 ndb_restore 副本來執行此操作。
例如,若要將從執行 NDB Cluster 8.4.0 的叢集所建立的叢集備份還原到執行 NDB Cluster 8.0.38 的叢集,您必須使用 NDB Cluster 8.0.38 發行版隨附的 ndb_restore。
為了更快速地還原,如果可用叢集連線的數量足夠,可以平行還原資料。也就是說,當平行還原到多個節點時,您必須在叢集
config.ini
檔案中針對每個並行的 ndb_restore 程序提供[api]
或[mysqld]
區段。但是,資料檔案必須始終在記錄之前套用。-
命令列格式 --backup-password=密碼
類型 字串 預設值 [無]
此選項指定使用
--decrypt
選項解密加密備份時要使用的密碼。這必須是加密備份時所使用的相同密碼。密碼長度必須為 1 到 256 個字元,並且必須以單引號或雙引號括住。它可以包含字元碼為 32、35、38、40-91、93、95 和 97-126 的任何 ASCII 字元;換句話說,它可以使用除了
!
、'
、"
、$
、%
、\
和^
之外的任何可列印 ASCII 字元。可以省略密碼,在這種情況下,ndb_restore 會等待從
stdin
提供密碼,就像使用--backup-password-from-stdin
時一樣。 --backup-password-from-stdin[=TRUE|FALSE]
命令列格式 --backup-password-from-stdin
當取代
--backup-password
時,此選項可以從系統 Shell (stdin
) 輸入備份密碼,類似於在使用 mysql 時,當未使用在命令列上提供密碼的情況下使用--password
時以互動方式提供密碼的方式。--backupid
=#
,-b
命令列格式 --backupid=#
類型 數值 預設值 無
此選項是必要的;它用於指定備份的 ID 或序號,並且與管理用戶端在備份完成時顯示的
Backup
訊息中所顯示的相同數字。(請參閱第 25.6.8.2 節,「使用 NDB Cluster 管理用戶端建立備份」。)備份_id
completed重要還原叢集備份時,您必須確保從具有相同備份 ID 的備份還原所有資料節點。使用來自不同備份的檔案充其量會導致將叢集還原為不一致的狀態,並且很可能完全失敗。
-
命令列格式 --character-sets-dir=路徑
包含字元集的目錄。
--connect
,-c
命令列格式 --connect=連線字串
類型 字串 預設值 localhost:1186
--ndb-connectstring
的別名。-
命令列格式 --connect-retries=#
類型 整數 預設值 12
最小值 0
最大值 12
在放棄之前重試連線的次數。
-
命令列格式 --connect-retry-delay=#
類型 整數 預設值 5
最小值 0
最大值 5
嘗試連線管理伺服器之間等待的秒數。
-
命令列格式 --connect-string=連線字串
類型 字串 預設值 [無]
與
--ndb-connectstring
相同。 -
命令列格式 --core-file
發生錯誤時寫入核心檔案;用於偵錯。
-
命令列格式 --decrypt
使用
--backup-password
選項提供的密碼解密加密備份。 -
命令列格式 --defaults-extra-file=路徑
類型 字串 預設值 [無]
在讀取全域檔案後讀取給定的檔案。
-
命令列格式 --defaults-file=路徑
類型 字串 預設值 [無]
僅從給定的檔案讀取預設選項。
-
命令列格式 --defaults-group-suffix=字串
類型 字串 預設值 [無]
也讀取具有 concat(group, suffix) 的群組。
-
命令列格式 --disable-indexes
在還原來自原生
NDB
備份的資料期間,停用索引的還原。之後,您可以使用--rebuild-indexes
,利用索引的多執行緒建置來一次還原所有資料表的索引,這應該比同時重建非常大的資料表的索引更快。此選項也會捨棄在備份中指定的任何外來索引鍵。
MySQL 可以開啟找不到一個或多個索引的
NDB
資料表,前提是查詢未使用任何受影響的索引;否則,查詢會因為ER_NOT_KEYFILE
而遭到拒絕。在後者的情況下,您可以執行如下的ALTER TABLE
陳述式來暫時解決此問題ALTER TABLE tbl ALTER INDEX idx INVISIBLE;
這會導致 MySQL 忽略資料表
tbl
上的索引idx
。請參閱主要索引鍵和索引,以取得更多資訊,以及第 10.3.12 節,「隱形索引」。 -
命令列格式 --dont-ignore-systab-0
通常,在還原資料表資料和中繼資料時,ndb_restore 會忽略備份中存在的
NDB
系統資料表的複本。--dont-ignore-systab-0
會導致還原系統資料表。此選項僅適用於實驗和開發用途,不建議在生產環境中使用。 --exclude-databases
=資料庫清單
命令列格式 --exclude-databases=清單
類型 字串 預設值 不應還原的一或多個資料庫的逗號分隔清單。
此選項通常與
--exclude-tables
搭配使用;請參閱該選項的說明以取得更多資訊和範例。--exclude-intermediate-sql-tables[
=TRUE|FALSE]
命令列格式 --exclude-intermediate-sql-tables[=TRUE|FALSE]
類型 布林值 預設值 TRUE
在執行複製
ALTER TABLE
操作時,mysqld 會建立中間資料表(其名稱以#sql-
為前綴)。當TRUE
時,--exclude-intermediate-sql-tables
選項會阻止 ndb_restore 還原可能從這些操作中遺留下來的此類資料表。預設情況下,此選項為TRUE
。-
命令列格式 --exclude-missing-columns
可以使用此選項僅還原選定的資料表欄位,這會導致 ndb_restore 忽略與備份中找到的資料表版本相比,正在還原的資料表中遺失的任何欄位。此選項適用於所有正在還原的資料表。如果您希望僅將此選項應用於選定的資料表或資料庫,您可以將其與本節中其他地方描述的一個或多個
--include-*
或--exclude-*
選項結合使用,然後使用一組互補的這些選項將資料還原到其餘的資料表。 -
命令列格式 --exclude-missing-tables
可以使用此選項僅還原選定的資料表,這會導致 ndb_restore 忽略目標資料庫中找不到的備份中的任何資料表。
--exclude-tables
=資料表清單
命令列格式 --exclude-tables=清單
類型 字串 預設值 要排除的一個或多個資料表清單;每個資料表參照必須包含資料庫名稱。通常與
--exclude-databases
一起使用。當使用
--exclude-databases
或--exclude-tables
時,只會排除該選項指定的資料庫或資料表;所有其他資料庫和資料表都會由 ndb_restore 還原。此表格顯示了使用
--exclude-*
選項的 ndb_restore 的幾個呼叫(為了清楚起見,省略了其他可能需要的選項),以及這些選項對從 NDB Cluster 備份還原的影響表 25.23:使用 --exclude-* 選項的 ndb_restore 的幾個呼叫,以及這些選項對從 NDB Cluster 備份還原的影響。
選項 結果 --exclude-databases=db1
還原除了 db1
之外的所有資料庫中的所有資料表;不還原db1
中的任何資料表--exclude-databases=db1,db2
(或--exclude-databases=db1
--exclude-databases=db2
)還原除了 db1
和db2
之外的所有資料庫中的所有資料表;不還原db1
或db2
中的任何資料表--exclude-tables=db1.t1
還原資料庫 db1
中除了t1
之外的所有資料表;還原db1
中的所有其他資料表;還原所有其他資料庫中的所有資料表--exclude-tables=db1.t2,db2.t1
(或--exclude-tables=db1.t2
--exclude-tables=db2.t1
)還原資料庫 db1
中除了t2
之外的所有資料表,以及資料庫db2
中除了資料表t1
之外的所有資料表;不還原db1
或db2
中的其他資料表;還原所有其他資料庫中的所有資料表您可以將這兩個選項一起使用。例如,以下命令會導致還原所有資料庫中 除了 資料庫
db1
和db2
以及資料庫db3
中的資料表t1
和t2
之外的所有資料表$> ndb_restore [...] --exclude-databases=db1,db2 --exclude-tables=db3.t1,db3.t2
(再次說明,為了清楚和簡潔起見,我們在剛才顯示的範例中省略了其他可能需要的選項。)
您可以將
--include-*
和--exclude-*
選項一起使用,但須遵守以下規則所有
--include-*
和--exclude-*
選項的作用是累積的。所有
--include-*
和--exclude-*
選項都按照傳遞給 ndb_restore 的順序從右到左進行評估。如果選項發生衝突,則第一個(最右邊的)選項優先。換句話說,與給定的資料庫或資料表匹配的第一個選項(從右到左)“獲勝”。
例如,以下選項集會導致 ndb_restore 還原資料庫
db1
中的所有資料表,但db1.t1
除外,同時不還原任何其他資料庫中的其他資料表--include-databases=db1 --exclude-tables=db1.t1
但是,反轉剛才給出的選項順序只會導致還原資料庫
db1
中的所有資料表(包括db1.t1
,但不包括任何其他資料庫中的資料表),因為--include-databases
選項位於最右側,是與資料庫db1
匹配的第一個選項,因此優先於任何其他與db1
或db1
中的任何資料表匹配的選項--exclude-tables=db1.t1 --include-databases=db1
-
命令列格式 --fields-enclosed-by=字元
類型 字串 預設值 每個欄位值都由傳遞給此選項的字串括起來(無論資料類型為何;請參閱
--fields-optionally-enclosed-by
的說明)。 --fields-optionally-enclosed-by
命令列格式 --fields-optionally-enclosed-by
類型 字串 預設值 傳遞給此選項的字串用於括住包含字元資料的欄位值(例如
CHAR
、VARCHAR
、BINARY
、TEXT
或ENUM
)。-
命令列格式 --fields-terminated-by=字元
類型 字串 預設值 \t (跳格符號)
傳遞給此選項的字串用於分隔欄位值。預設值為跳格符號 (
\t
)。 -
命令列格式 --help
顯示說明文字並結束。
-
命令列格式 --hex
如果使用此選項,則所有二進位值都將以十六進位格式輸出。
-
命令列格式 --ignore-extended-pk-updates[=0|1]
類型 整數 預設值 0
最小值 0
最大值 1
當使用
--allow-pk-changes
時,成為資料表主鍵一部分的欄位在擷取備份時不得更新;此類欄位應從將值插入其中時起,直到包含這些值的列被刪除時,都保持相同的值。如果 ndb_restore 在還原備份時遇到對這些欄位的更新,則還原將失敗。由於某些應用程式在更新列時可能會為所有欄位設定值,即使某些欄位值未更改,備份也可能包含看似更新了實際上未修改的欄位的記錄事件。在這種情況下,您可以將--ignore-extended-pk-updates
設定為1
,強制 ndb_restore 忽略此類更新。重要當導致忽略這些更新時,使用者有責任確保不會對成為主鍵一部分的任何欄位的值進行更新。
如需更多資訊,請參閱
--allow-pk-changes
的說明。 --include-databases
=db-list
命令列格式 --include-databases=清單
類型 字串 預設值 要還原的一個或多個資料庫的逗號分隔清單。通常與
--include-tables
一起使用;有關詳細資訊和範例,請參閱該選項的描述。-
命令列格式 --include-stored-grants
ndb_restore 預設不會將共用使用者和權限(請參閱第 25.6.13 節,「權限同步和 NDB_STORED_USER」)還原到
ndb_sql_metadata
資料表。指定此選項會使其執行此操作。 --include-tables
=table-list
命令列格式 --include-tables=清單
類型 字串 預設值 要還原的資料表的逗號分隔清單;每個資料表參考必須包含資料庫名稱。
當使用
--include-databases
或--include-tables
時,只會還原選項指定的那些資料庫或資料表;所有其他資料庫和資料表都會被 ndb_restore 排除,並且不會還原。下表顯示了 ndb_restore 使用
--include-*
選項的幾個調用(為了清楚起見,省略了其他可能需要的選項),以及這些選項對從 NDB Cluster 備份還原的影響表 25.24:使用 --include-* 選項調用 ndb_restore 的幾個範例,以及它們對從 NDB Cluster 備份還原的影響。
選項 結果 --include-databases=db1
僅還原資料庫 db1
中的資料表;所有其他資料庫中的所有資料表都會被忽略--include-databases=db1,db2
(或--include-databases=db1
--include-databases=db2
)僅還原資料庫 db1
和db2
中的資料表;所有其他資料庫中的所有資料表都會被忽略--include-tables=db1.t1
僅還原資料庫 db1
中的資料表t1
;db1
或任何其他資料庫中的其他資料表都不會還原--include-tables=db1.t2,db2.t1
(或--include-tables=db1.t2
--include-tables=db2.t1
)僅還原資料庫 db1
中的資料表t2
和資料庫db2
中的資料表t1
;db1
、db2
或任何其他資料庫中的其他資料表都不會還原您也可以一起使用這兩個選項。例如,以下操作會導致還原資料庫
db1
和db2
中的所有資料表,以及資料庫db3
中的資料表t1
和t2
(以及沒有其他資料庫或資料表)$> ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2
(同樣,我們在剛剛顯示的範例中省略了其他可能需要的選項。)
也可以僅還原選定的資料庫,或從單一資料庫中選定的資料表,而無需任何
--include-*
(或--exclude-*
)選項,使用此處顯示的語法ndb_restore other_options db_name,[db_name[,...] | tbl_name[,tbl_name][,...]]
換句話說,您可以指定以下任一項進行還原
一個或多個資料庫中的所有資料表
單一資料庫中的一個或多個資料表
-
命令列格式 --lines-terminated-by=字元
類型 字串 預設值 \n (換行符號)
指定用於結束每行輸出的字串。預設值為換行符號 (
\n
)。 -
命令列格式 --login-path=路徑
類型 字串 預設值 [無]
從登入檔讀取給定路徑。
-
命令列格式 --no-login-paths
跳過從登入路徑檔讀取選項。
-
命令列格式 --lossy-conversions
此選項旨在補充
--promote-attributes
選項。使用--lossy-conversions
允許在從備份還原資料時對欄位值進行有損轉換(類型降級或符號變更)。除了某些例外情況外,控制降級的規則與 MySQL 複寫的規則相同;請參閱第 19.5.1.9.2 節,「具有不同資料類型的欄位複寫」,以取得有關目前屬性降級支援的特定類型轉換的資訊。此選項還可讓您將
NULL
欄位還原為NOT NULL
。該欄位不得包含任何NULL
項目;否則,ndb_restore 將會停止並顯示錯誤。ndb_restore 會針對它在有損轉換期間執行的任何資料截斷,每個屬性和欄位報告一次。
-
命令列格式 --no-binlog
此選項會防止任何已連線的 SQL 節點將 ndb_restore 還原的資料寫入其二進位日誌。
-
命令列格式 --no-restore-disk-objects
此選項會阻止 ndb_restore 還原任何 NDB Cluster 磁碟資料物件,例如資料表空間和記錄檔群組;請參閱 第 25.6.11 節,「NDB Cluster 磁碟資料表」,以取得有關這些的更多資訊。
--no-upgrade
,-u
命令列格式 --no-upgrade
當使用 ndb_restore 還原備份時,使用舊的固定格式建立的
VARCHAR
欄位會調整大小,並使用現在使用的變寬格式重新建立。可以透過指定--no-upgrade
來覆寫此行為。-
命令列格式 --ndb-connectstring=連線字串
類型 字串 預設值 [無]
設定用於連線至 ndb_mgmd 的連線字串。語法:
[nodeid=
。覆寫id
;][host=]hostname
[:port
]NDB_CONNECTSTRING
和my.cnf
中的項目。 -
命令列格式 --ndb-mgm-tls=層級
類型 列舉 預設值 寬鬆
有效值 寬鬆
嚴格
設定連線至管理伺服器所需的 TLS 支援層級;
寬鬆
或嚴格
之一。寬鬆
(預設值)表示會嘗試 TLS 連線,但不需要成功;嚴格
表示需要 TLS 連線。 -
命令列格式 --ndb-mgmd-host=連線字串
類型 字串 預設值 [無]
與
--ndb-connectstring
相同。 --ndb-nodegroup-map
=map
,-z
命令列格式 --ndb-nodegroup-map=對應
針對此選項設定的任何值都會被忽略,而且該選項本身不會執行任何操作。
-
命令列格式 --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-defaults
不從登入檔以外的任何選項檔案讀取預設選項。
--nodeid
=#
,-n
命令列格式 --nodeid=#
類型 數值 預設值 無
指定進行備份的資料節點的節點 ID;這是必要的。
當還原到與進行備份的叢集具有不同資料節點數量的叢集時,此資訊有助於識別要還原到給定節點的正確檔案集合。(在這種情況下,通常需要將多個檔案還原到單一資料節點。)請參閱還原到不同數量的資料節點,以取得其他資訊和範例。
-
命令列格式 --num-slices=#
類型 整數 預設值 1
最小值 1
最大值 1024
當按區塊還原備份時,此選項設定要將備份分割成的區塊數。這允許 ndb_restore 的多個執行個體平行還原不相交的子集,這可能會減少執行還原操作所需的時間。
區塊是給定備份中的資料子集;也就是說,它是具有相同區塊 ID 的片段集合,使用
--slice-id
選項指定。這兩個選項必須始終一起使用,且--slice-id
設定的值必須始終小於區塊數。ndb_restore 會遇到片段,並為每個片段指派一個片段計數器。當按區塊還原時,會為每個片段指派一個區塊 ID;此區塊 ID 的範圍為 0 到小於區塊數 1。對於非
BLOB
資料表的資料表,給定片段所屬的區塊是使用此處顯示的公式判定的[slice_ID] = [fragment_counter] % [number_of_slices]
對於
BLOB
資料表,不使用片段計數器;而是使用片段編號以及BLOB
資料表的主資料表 ID(回想一下,NDB
會在內部將BLOB
值儲存在個別的資料表中)。在這種情況下,給定片段的區塊 ID 計算方式如下所示[slice_ID] = ([main_table_ID] + [fragment_ID]) % [number_of_slices]
因此,按
N
個區塊還原表示執行N
個 ndb_restore 執行個體,所有執行個體都帶有--num-slices=
(以及任何其他必要的選項),且每個執行個體都分別帶有N
--slice-id=1
、--slice-id=2
、--slice-id=3
,依此類推,直到slice-id=
。N
-1範例。假設您想要將名為
BACKUP-1
的備份還原,此備份可在每個資料節點的節點檔案系統上預設目錄/var/lib/mysql-cluster/BACKUP/BACKUP-3
中找到,並還原到具有節點 ID 1、2、3 和 4 的四個資料節點的叢集。若要使用五個區塊執行此操作,請執行下列清單中顯示的命令集使用 ndb_restore 還原叢集的中繼資料,如下所示
$> ndb_restore -b 1 -n 1 -m --disable-indexes --backup-path=/home/ndbuser/backups
將叢集資料還原到資料節點,如下所示叫用 ndb_restore
$> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
只要有足夠的叢集連線插槽,此步驟中剛才顯示的所有命令都可以平行執行(請參閱
--backup-path
選項的說明)。照常還原索引,如下所示
$> ndb_restore -b 1 -n 1 --rebuild-indexes --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
最後,使用此處顯示的命令還原 epoch
$> ndb_restore -b 1 -n 1 --restore-epoch --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
您應該只使用區塊來還原叢集資料;還原中繼資料、索引或 epoch 資訊時,不需要使用
--num-slices
或--slice-id
。如果將其中一個或兩個選項與控制還原的 ndb_restore 選項一起使用,程式會忽略它們。使用
--parallelism
選項對還原速度的影響與使用多個 ndb_restore 執行個體進行區塊或平行還原所產生的影響無關(--parallelism
指定單一 ndb_restore 執行緒執行的平行交易數),但它可以與其中一個或兩個一起使用。您應該知道增加--parallelism
會導致 ndb_restore 對叢集施加更大的負載;如果系統可以處理此負載,還原應該會更快完成。--num-slices
的值不直接取決於與硬體相關的值,例如 CPU 數量或 CPU 核心數、RAM 量等等,也不取決於 LDM 的數量。可以在相同還原的一部分中,在不同的資料節點上使用此選項的不同值;這樣做本身不應產生任何不良影響。
--parallelism
=#
,-p
命令列格式 --parallelism=#
類型 數值 預設值 128
最小值 1
最大值 1024
ndb_restore 使用單列交易來同時套用許多列。此參數決定 ndb_restore 的執行個體嘗試使用的平行交易(同時列)數量。預設值為 128;最小值為 1,最大值為 1024。
執行插入的工作會跨所涉及的資料節點中的執行緒平行處理。此機制用於從
.Data
檔案還原大量資料,也就是資料的模糊快照;它不用於建置或重建索引。變更記錄會循序套用;索引捨棄和建置是 DDL 操作,並且單獨處理。還原的用戶端端沒有執行緒層級的平行處理。--preserve-trailing-spaces
,-P
命令列格式 --preserve-trailing-spaces
導致在將固定寬度字元資料類型升級到其可變寬度等效類型時保留尾隨空格,也就是在將
CHAR
資料行值升級到VARCHAR
,或將BINARY
資料行值升級到VARBINARY
時。否則,當將此類資料行值插入到新的資料行時,會從中捨棄任何尾隨空格。-
命令列格式 --print
導致 ndb_restore 將所有資料、中繼資料和記錄列印到
stdout
。相當於一起使用--print-data
、--print-meta
和--print-log
選項。注意使用
--print
或任何--print_*
選項實際上是在執行試執行。包括其中一個或多個選項會導致任何輸出重新導向至stdout
;在這種情況下,ndb_restore 不會嘗試將資料或中繼資料還原到 NDB 叢集。 -
命令列格式 --print-data
導致 ndb_restore 將其輸出導向至
stdout
。通常與以下一個或多個選項一起使用:--tab
、--fields-enclosed-by
、--fields-optionally-enclosed-by
、--fields-terminated-by
、--hex
和--append
。TEXT
和BLOB
資料行值始終會被截斷。此類值會在輸出中截斷為前 256 個位元組。使用--print-data
時,目前無法覆寫此行為。 -
命令列格式 --print-defaults
列印程式引數列表並結束。
-
命令列格式 --print-log
使 ndb_restore 將其日誌輸出到
stdout
。 -
命令列格式 --print-meta
將所有中繼資料列印到
stdout
。 -
命令列格式 --print-sql-log
將 SQL 陳述式記錄到
stdout
。使用此選項啟用;通常此行為會停用。此選項會在嘗試記錄之前檢查要還原的所有表格是否已明確定義主索引鍵;在僅由NDB
實作隱藏主索引鍵的表格上的查詢無法轉換為有效的 SQL。此選項不適用於具有
BLOB
資料行的表格。 -
命令列格式 --progress-frequency=#
類型 數值 預設值 0
最小值 0
最大值 65535
在備份進行期間,每
N
秒列印一次狀態報告。0(預設值)表示不列印任何狀態報告。最大值為 65535。 -
命令列格式 --promote-attributes
ndb_restore 支援有限的屬性提升,其方式與 MySQL 複寫支援的方式非常相似;也就是說,從指定類型資料行備份的資料通常可以還原到使用「較大、相似」類型的資料行。例如,來自
CHAR(20)
資料行的資料可以還原到宣告為VARCHAR(20)
、VARCHAR(30)
或CHAR(30)
的資料行;來自MEDIUMINT
資料行的資料可以還原到類型為INT
或BIGINT
的資料行。請參閱 第 19.5.1.9.2 節「複寫具有不同資料類型的資料行」,以取得目前屬性提升支援的類型轉換表格。此選項也可以將
NOT NULL
資料行還原為NULL
。ndb_restore 的屬性提升必須明確啟用,如下所示
準備要還原備份的表格。ndb_restore 無法用於重新建立與原始定義不同的表格;這表示您必須手動建立表格,或在還原表格中繼資料之後但在還原資料之前,使用
ALTER TABLE
變更您想要提升的資料行。在還原表格資料時,使用
--promote-attributes
選項(簡短形式-A
)叫用 ndb_restore。如果未使用此選項,則不會發生屬性提升;而是還原作業會失敗並顯示錯誤。
在字元資料類型和
TEXT
或BLOB
之間轉換時,只能同時執行字元類型(CHAR
和VARCHAR
)和二進位類型(BINARY
和VARBINARY
)之間的轉換。例如,您無法在同一次叫用 ndb_restore 時,將INT
資料行提升為BIGINT
,同時將VARCHAR
資料行提升為TEXT
。不支援使用不同字元集在
TEXT
資料行之間進行轉換,且明確禁止此動作。使用 ndb_restore 將字元或二進位類型轉換為
TEXT
或BLOB
時,您可能會注意到它會建立並使用一個或多個名為
的暫存表格。這些表格之後不需要,通常會在成功還原後由 ndb_restore 刪除。table_name
$STnode_id
-
命令列格式 --rebuild-indexes
啟用多執行緒重建已排序的索引,同時還原原生
NDB
備份。使用此選項時,ndb_restore 用於建立已排序索引的執行緒數由BuildIndexThreads
資料節點組態參數和 LDM 數量控制。只有在第一次執行 ndb_restore 時才需要使用此選項;這會導致重建所有已排序的索引,而無需在還原後續節點時再次使用
--rebuild-indexes
。您應該在將新列插入資料庫之前使用此選項;否則,可能會插入一個列,該列之後在嘗試重建索引時導致唯一性限制違規。預設情況下,已排序的索引的建立會與 LDM 的數量平行處理。可以使用
BuildIndexThreads
資料節點組態參數來加速在節點和系統重新啟動期間執行的離線索引建立;此參數對 ndb_restore 執行線上的索引捨棄和重建沒有影響。重建唯一索引會使用磁碟寫入頻寬來進行重做記錄和本機檢查點。此頻寬不足可能會導致重做緩衝區溢位或記錄溢位錯誤。在這種情況下,您可以再次執行 ndb_restore
--rebuild-indexes
;此程序會從發生錯誤的位置繼續。您也可以在遇到暫時性錯誤時執行此操作。您可以無限期地重複執行 ndb_restore--rebuild-indexes
;您可以透過減少--parallelism
的值來停止此類錯誤。如果問題是空間不足,您可以增加重做記錄的大小(FragmentLogFileSize
節點組態參數),或者您可以加快執行 LCP 的速度(MaxDiskWriteSpeed
和相關參數),以便更快釋放空間。 --remap-column=
db
.tbl
.col
:fn
:args
命令列格式 --remap-column=字串
類型 字串 預設值 [無]
當與
--restore-data
一起使用時,此選項會將函式套用至指示資料行的值。引數字串中的值在此處列出db
:資料庫名稱,遵循--rewrite-database
執行的任何重新命名。tbl
:表格名稱。col
:要更新的資料行名稱。此資料行的類型必須是INT
或BIGINT
。資料行也可以是但並非必須是UNSIGNED
。fn
:函式名稱;目前,唯一支援的名稱是offset
。args
:傳遞給函式的引數。目前僅支援單一引數,即offset
函式要增加的偏移量大小。支援負值。引數的大小不能超過欄位型別的帶符號變體的大小;例如,如果col
是INT
欄位,則傳遞給offset
函式的引數允許的範圍是-2147483648
到2147483647
(請參閱第 13.1.2 節「整數類型(精確值)- INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT」)。如果將偏移值套用至欄位會導致溢位或下溢,則還原操作會失敗。舉例來說,如果欄位是
BIGINT
,且選項嘗試在欄位值為 4294967291 的列上套用偏移值 8,就會發生這種情況,因為4294967291 + 8 = 4294967299 > 4294967295
。
當您希望將儲存在多個 NDB Cluster 來源執行個體(全部使用相同結構描述)中的資料合併到單一目的地 NDB Cluster 時,此選項非常有用,方法是使用 NDB 原生備份(請參閱第 25.6.8.2 節「使用 NDB Cluster 管理用戶端建立備份」)和 ndb_restore 來合併資料,其中來源叢集之間的主要和唯一索引鍵值重疊,並且在程序中必須將這些值重新對應至不重疊的範圍。可能也需要保留表格之間的其他關係。為了滿足這些需求,可以在同一次 ndb_restore 的叫用中多次使用此選項,以重新對應不同表格的欄位,如下所示
$> ndb_restore --restore-data --remap-column=hr.employee.id:offset:1000 \ --remap-column=hr.manager.id:offset:1000 --remap-column=hr.firstaiders.id:offset:1000
(此處未顯示其他選項。)
--remap-column
也可用於更新同一個表格的多個欄位。可以組合使用多個表格和欄位。同一個表格的不同欄位也可以使用不同的偏移值,如下所示$> ndb_restore --restore-data --remap-column=hr.employee.salary:offset:10000 \ --remap-column=hr.employee.hours:offset:-10
當來源備份包含不應合併的重複表格時,您可以使用
--exclude-tables
、--exclude-databases
,或在您的應用程式中使用其他方式來處理。可以使用
SHOW CREATE TABLE
;ndb_desc 工具;以及MAX()
、MIN()
、LAST_INSERT_ID()
和其他 MySQL 函式來取得要合併的表格的結構和其他特性相關資訊。不支援在不同的 NDB Cluster 執行個體中,將變更從已合併表格複寫到未合併表格,或從未合併表格複寫到已合併表格。
-
命令列格式 --restore-data
輸出
NDB
表格資料和日誌。 -
命令列格式 --restore-epoch
將 (或還原) Epoch 資訊新增至叢集複寫狀態表格。這對於在 NDB Cluster 複本上啟動複寫很有用。使用此選項時,如果
mysql.ndb_apply_status
中的列的id
欄位中已存在0
,則會更新該列;如果不存在,則會插入此類列。(請參閱第 25.7.9 節「使用 NDB Cluster 複寫的 NDB Cluster 備份」。) -
命令列格式 --restore-meta
此選項會讓 ndb_restore 列印
NDB
表格中繼資料。第一次執行 ndb_restore 還原程式時,您也需要還原中繼資料。換句話說,您必須重新建立資料庫表格,這可以藉由使用
--restore-meta
(-m
) 選項執行來完成。還原中繼資料只需要在單一資料節點上執行;這足以將其還原到整個叢集。ndb_restore 使用目標叢集的預設分割數,除非本機資料管理員執行緒的數量也從原始叢集中資料節點的數量變更。
使用此選項時,建議停用自動同步,方法是將
ndb_metadata_check=OFF
,直到 ndb_restore 完成還原中繼資料後,才能再次開啟以同步 NDB 字典中新建立的物件。注意當開始還原備份時,叢集應該具有空的資料庫。(換句話說,您應該先使用
--initial
啟動資料節點,然後再執行還原。) -
命令列格式 --restore-privilege-tables
已過時 是 不再使用。
--rewrite-database
=olddb,newdb
命令列格式 --rewrite-database=字串
類型 字串 預設值 無
此選項可讓您還原至資料庫的名稱與備份中使用的名稱不同。例如,如果備份的資料庫名稱為
products
,您可以使用此選項將其中包含的資料還原至名為inventory
的資料庫,如下所示(省略任何可能需要的其他選項)$> ndb_restore --rewrite-database=product,inventory
此選項可以在單次 ndb_restore 的叫用中多次使用。因此,可以使用
--rewrite-database=db1,db2 --rewrite-database=db3,db4
同時從名為db1
的資料庫還原到名為db2
的資料庫,並從名為db3
的資料庫還原到名為db4
的資料庫。可以在多個--rewrite-database
出現之間使用其他 ndb_restore 選項。如果多個
--rewrite-database
選項之間發生衝突,則從左到右讀取,最後使用的--rewrite-database
選項會生效。例如,如果使用--rewrite-database=db1,db2 --rewrite-database=db1,db3
,則只會採用--rewrite-database=db1,db3
,而會忽略--rewrite-database=db1,db2
。也可以從多個資料庫還原至單一資料庫,因此--rewrite-database=db1,db3 --rewrite-database=db2,db3
會將所有表格和資料從資料庫db1
和db2
還原到資料庫db3
。重要當使用
--rewrite-database
從多個備份資料庫還原至單一目標資料庫時,不會檢查表格或其他物件名稱之間是否有衝突,並且不保證還原列的順序。這表示在這種情況下,可能會覆寫列並遺失更新。-
命令列格式 --skip-broken-objects
此選項會讓 ndb_restore 在讀取原生
NDB
備份時忽略損毀的表格,並繼續還原任何剩餘的表格(未損毀的表格)。目前,--skip-broken-objects
選項僅在遺失 Blob 部分表格的情況下有效。 -
命令列格式 --skip-table-check
可以還原資料而不還原表格中繼資料。預設情況下,執行此操作時,如果表格資料和表格結構描述之間發現不符,ndb_restore 會失敗並顯示錯誤;此選項會覆寫該行為。
使用 ndb_restore 還原資料時,放寬了對欄定義不符的一些限制;當遇到其中一種不符類型時,ndb_restore 不會像之前那樣停止並顯示錯誤,而是接受資料並將其插入目標表格,同時向使用者發出警告,告知正在執行此操作。無論是否使用
--skip-table-check
或--promote-attributes
選項,都會發生這種行為。這些欄定義的差異類型如下:不同的
COLUMN_FORMAT
設定(FIXED
、DYNAMIC
、DEFAULT
)不同的
STORAGE
設定(MEMORY
、DISK
)不同的預設值
不同的分佈索引鍵設定
-
命令列格式 --skip-unknown-objects
此選項會使 ndb_restore 在讀取原生
NDB
備份時,忽略任何無法辨識的綱要物件。這可以用於將從執行(例如)NDB 7.6 的叢集建立的備份還原到執行 NDB 叢集 7.5 的叢集。 -
命令列格式 --slice-id=#
類型 整數 預設值 0
最小值 0
最大值 1023
當按切片還原時,這是要還原的切片的 ID。此選項總是與
--num-slices
一起使用,而且其值必須始終小於--num-slices
的值。有關更多資訊,請參閱本節其他地方的
--num-slices
的說明。 --tab
=dir_name
,-T
dir_name
命令列格式 --tab=路徑
類型 目錄名稱 使
--print-data
建立傾印檔案,每個表格一個,每個檔案名為
。它需要將檔案儲存的目錄路徑作為其引數;使用tbl_name
.txt.
表示目前目錄。-
命令列格式 --timestamp-printouts{=true|false}
類型 布林值 預設值 true
使 info、錯誤和偵錯日誌訊息加上時間戳記前綴。
預設會啟用此選項。使用
--timestamp-printouts=false
停用它。 -
命令列格式 --usage
顯示說明文字並結束;與
--help
相同。 -
命令列格式 --verbose=#
類型 數值 預設值 1
最小值 0
最大值 255
設定輸出的詳細程度。最小值為 0;最大值為 255。預設值為 1。
-
命令列格式 --version
顯示版本資訊並結束。
-
命令列格式 --with-apply-status
從備份的
ndb_apply_status
表格還原所有列(但具有server_id = 0
的列除外,該列是使用--restore-epoch
產生的)。此選項要求也必須使用--restore-data
。如果備份中的
ndb_apply_status
表格已包含具有server_id = 0
的列,則 ndb_restore--with-apply-status
會刪除它。因此,我們建議您在使用--with-apply-status
選項叫用 ndb_restore 之後,使用 ndb_restore--restore-epoch
。您也可以在用於還原叢集的任何最後一個 ndb_restore--with-apply-status
叫用時,同時使用--restore-epoch
。有關更多資訊,請參閱 ndb_apply_status 表格。
此公用程式的典型選項如下所示:
ndb_restore [-c connection_string] -n node_id -b backup_id \
[-m] -r --backup-path=/path/to/backup/files
通常,從 NDB 叢集備份還原時,ndb_restore 至少需要 --nodeid
(簡寫形式:-n
)、--backupid
(簡寫形式:-b
)和 --backup-path
選項。
-c
選項用於指定連線字串,該字串會告知 ndb_restore
管理伺服器的位置(請參閱 第 25.4.3.3 節, 「NDB 叢集連線字串」)。如果未使用此選項,則 ndb_restore 會嘗試連線到 localhost:1186
上的管理伺服器。此公用程式充當叢集 API 節點,因此需要空閒的連線「插槽」才能連線到叢集管理伺服器。這表示在叢集的 config.ini
檔案中,必須至少有一個 [api]
或 [mysqld]
區段可供其使用。因此,最好在 config.ini
中保留至少一個空的 [api]
或 [mysqld]
區段,該區段未用於 MySQL 伺服器或其他應用程式(請參閱 第 25.4.3.7 節, 「在 NDB 叢集中定義 SQL 和其他 API 節點」)。
ndb_restore 可以使用 --decrypt
和 --backup-password
解密加密的備份。必須指定這兩個選項才能執行解密。請參閱 START BACKUP
管理用戶端命令的文件,以瞭解有關建立加密備份的資訊。
您可以藉由在 ndb_mgm 管理用戶端中使用 SHOW
命令來驗證 ndb_restore 是否已連線到叢集。您也可以從系統 Shell 完成此動作,如下所示:
$> ndb_mgm -e "SHOW"
錯誤報告。 ndb_restore 會報告暫時性和永久性錯誤。如果發生暫時性錯誤,它可能會從中復原,並在這種情況下報告 還原成功,但遇到暫時性錯誤,請查看組態
。
在使用 ndb_restore 初始化用於循環複寫的 NDB 叢集之後,不會自動建立充當複寫項的 SQL 節點上的二進位日誌,而且您必須手動使其建立。若要使建立二進位日誌,請在執行 START REPLICA
之前,在該 SQL 節點上發出 SHOW TABLES
陳述式。這是 NDB 叢集中的已知問題。