NDB 叢集還原程式實作為獨立的命令列工具 ndb_restore,通常可以在 MySQL 的 bin
目錄中找到。此程式會讀取備份建立的檔案,並將儲存的資訊插入資料庫。
對於由 START BACKUP
命令建立的每個備份檔案,都必須執行一次 ndb_restore(請參閱 第 25.6.8.2 節,「使用 NDB 叢集管理用戶端建立備份」)。這等於建立備份時叢集中資料節點的數量。
除非您平行還原多個資料節點,否則在使用 ndb_restore 之前,建議叢集在單一使用者模式下執行。如需詳細資訊,請參閱第 25.6.6 節,「NDB 叢集單一使用者模式」。
下表顯示可以與 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 為
12
的備份,是在具有節點 ID2
和3
的兩個儲存節點的叢集中建立的,現在要將其還原到具有四個節點的叢集。那麼必須執行兩次 ndb_restore—針對備份所在叢集中的每個儲存節點各執行一次。但是,ndb_restore 並非總是可以將從執行某個 MySQL 版本的叢集建立的備份,還原到執行不同 MySQL 版本的叢集。請參閱第 25.3.7 節「升級和降級 NDB 叢集」以取得更多資訊。重要無法使用舊版本的 ndb_restore 還原從較新版本的 NDB 叢集建立的備份。您可以將從較新版本的 MySQL 建立的備份還原到較舊的叢集,但是您必須使用來自較新 NDB 叢集版本的 ndb_restore 副本來執行此操作。
例如,要將從執行 NDB 叢集 8.4.0 的叢集取得的叢集備份還原到執行 NDB 叢集 8.0.38 的叢集,您必須使用 NDB 叢集 8.0.38 發行版附帶的 ndb_restore。
為了更快速地還原,可以在有多個可用的叢集連線時平行還原資料。也就是說,當平行還原到多個節點時,您必須在叢集
config.ini
檔案中,為每個並行的 ndb_restore 處理程序提供一個[api]
或[mysqld]
區段。但是,資料檔案必須始終在記錄之前套用。-
命令列格式 --backup-password=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
) 輸入備份密碼,類似於在不於命令列上提供密碼的情況下,使用--password
時,以互動方式將密碼提供給 mysql 的方式。--backupid
=#
,-b
命令列格式 --backupid=#
類型 數值 預設值 無
此選項是必要的;它用於指定備份的 ID 或序號,並且與管理用戶端在備份完成時顯示的
備份
訊息中顯示的數字相同。(請參閱第 25.6.8.2 節「使用 NDB 叢集管理用戶端建立備份」。)backup_id
已完成重要還原叢集備份時,您必須確定從具有相同備份 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
=db-list
命令列格式 --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
=table-list
命令列格式 --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
=char
命令列格式 --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 會排除所有其他資料庫和資料表,因此不會還原。下表顯示使用
--include-*
選項(為了清楚起見,省略了其他可能需要的選項)多次調用 ndb_restore 的情況,以及這些選項對於從 NDB 叢集備份還原的影響。表 25.24 使用 --include-* 選項多次調用 ndb_restore,及其對從 NDB 叢集備份還原的影響。
選項 結果 --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=char
類型 字串 預設值 \n (換行符號)
指定用於結束每一行輸出的字串。預設值為換行符號 (
\n
)。 -
命令列格式 --login-path=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 叢集磁碟資料物件,例如表格空間和記錄檔群組;請參閱第 25.6.11 節「NDB 叢集磁碟資料表格」,以取得關於這些物件的更多資訊。
--no-upgrade
,-u
命令列格式 --no-upgrade
當使用 ndb_restore 還原備份時,使用舊固定格式建立的
VARCHAR
欄位會調整大小並使用目前使用的可變寬度格式重新建立。可以透過指定--no-upgrade
來覆寫此行為。-
命令列格式 --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-nodegroup-map
=map
,-z
命令列格式 --ndb-nodegroup-map=map
系統會忽略為此選項設定的任何值,並且該選項本身不做任何事。
-
命令列格式 --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 叢集來覆寫此值。 -
命令列格式 --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
的備份還原到具有節點 ID 為 1、2、3 和 4 的四個資料節點的叢集中,該備份位於每個資料節點上的節點檔案系統上的預設目錄/var/lib/mysql-cluster/BACKUP/BACKUP-3
中。若要使用五個切片執行此操作,請執行以下清單中顯示的命令集。使用 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
最後,使用此處顯示的命令還原紀元
$> ndb_restore -b 1 -n 1 --restore-epoch --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
您應該只使用切片來還原叢集資料;還原元資料、索引或紀元資訊時,不需要使用
--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
當將固定寬度的字元資料類型升級為其可變寬度等效類型時(也就是,當將
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 刪除。資料表名稱
$ST節點 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=
資料庫
.資料表
.資料行
:函式
:引數
命令列格式 --remap-column=字串
類型 字串 預設值 [無]
當與
--restore-data
一起使用時,此選項會將函式套用至指定資料行的值。引數字串中的值會列於此處資料庫
:資料庫名稱,遵循--rewrite-database
執行的任何重新命名。資料表
:資料表名稱。資料行
:要更新的資料行名稱。此資料行的類型必須為INT
或BIGINT
。此資料行也可以是但不一定要是UNSIGNED
。函式
:函式名稱;目前,唯一支援的名稱是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 原生備份(請參閱第 25.6.8.2 節「使用 NDB Cluster 管理用戶端建立備份」)和 ndb_restore 將多個 NDB Cluster 來源執行個體(全部使用相同結構描述)中儲存的資料合併到單一目標 NDB Cluster 時,此選項非常有用。在來源叢集之間主要索引鍵和唯一索引鍵的值重疊,且作為程序的一部分,必須將這些值重新對應至不重疊的範圍。也可能需要保留表格之間的其他關係。為了滿足這些需求,可以在同一次調用 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=string
類型 字串 預設值 無
此選項可讓還原至資料庫的名稱與備份中使用的名稱不同。例如,如果製作名為
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 Cluster 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、error 和 debug 記錄訊息以時間戳記為前綴。
預設情況下啟用此選項。使用
--timestamp-printouts=false
停用它。 -
命令列格式 --usage
顯示說明文字並結束;與
--help
相同。 -
命令列格式 --verbose=#
類型 數值 預設值 1
最小值 0
最大值 255
設定輸出詳細程度的層級。最小值為 0;最大值為 255。預設值為 1。
-
命令列格式 --version
顯示版本資訊並結束。
-
命令列格式 --with-apply-status
從備份的
ndb_apply_status
資料表還原所有列(除了使用--restore-epoch
產生的server_id = 0
的列)。此選項需要同時使用--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 Cluster 備份還原時,ndb_restore 至少需要 --nodeid
(簡寫:-n
)、--backupid
(簡寫:-b
)和 --backup-path
選項。
-c
選項用於指定連線字串,告知 ndb_restore
管理伺服器所在的位置(請參閱 第 25.4.3.3 節,「NDB Cluster 連線字串」)。如果未使用此選項,則 ndb_restore 會嘗試連線至 localhost:1186
上的管理伺服器。此工具的作用類似叢集 API 節點,因此需要一個空閒的連線「插槽」才能連線至叢集管理伺服器。這表示在叢集 config.ini
檔案中,必須至少有一個 [api]
或 [mysqld]
區段可供其使用。基於此原因,最好在 config.ini
中保留至少一個未被 MySQL 伺服器或其他應用程式使用的空 [api]
或 [mysqld]
區段(請參閱 第 25.4.3.7 節,「在 NDB Cluster 中定義 SQL 和其他 API 節點」)。
ndb_restore 可以使用 --decrypt
和 --backup-password
解密加密的備份。必須同時指定這兩個選項才能執行解密。如需建立加密備份的資訊,請參閱 START BACKUP
管理用戶端命令的文件。
您可以使用 SHOW
命令,在 ndb_mgm 管理用戶端中驗證 ndb_restore 是否已連線至叢集。您也可以從系統 shell 完成此操作,如下所示
$> ndb_mgm -e "SHOW"
錯誤報告。 ndb_restore 會報告暫時性和永久性錯誤。在發生暫時性錯誤的情況下,它可能會從中恢復,並在這種情況下報告 還原成功,但遇到暫時性錯誤,請檢閱設定
。
在使用 ndb_restore 初始化 NDB Cluster 以用於循環複寫之後,不會自動建立作為複本的 SQL 節點上的二進位記錄,您必須手動建立它們。若要讓二進位記錄建立,請在執行 START REPLICA
之前,在該 SQL 節點上發出 SHOW TABLES
陳述式。這是 NDB Cluster 中已知問題。