本文介紹如何通過控制台或手動遷移方式將自建ClickHouse遷移到雲資料庫 ClickHouse 企業版叢集。
前提條件
自建叢集:已建立資料庫帳號和密碼,且帳號許可權需具備庫表讀許可權、SYSTEM命令執行許可權(如果需要遷移涉及賬戶密碼的外表,要求賬戶有
displaySecretsInShowAndSelect許可權)。網路連通性
如果自建叢集和目的地組群位於同一個VPC下,您還需要將目的地組群所有節點的IP地址以及其交換器的IPv4網段,添加到自建叢集的白名單中。
雲資料庫ClickHouse中如何添加白名單,請參見設定白名單。
自建叢集如何添加白名單,請參見自身產品文檔。
可通過
SELECT * FROM system.clusters WHERE internal_replication = 1;查看雲資料庫ClickHouse叢集所有節點的IP地址。
如果自建叢集和目的地組群位於不同VPC,或自建叢集位於本地IDC或其他雲廠商時,請先解決網路問題,具體操作請參見如何解決目的地組群與資料來源網路互連問題?。
說明在此情況下,為避免不同VPC之間的網段衝突問題,可能會出現IP映射的情況,若您做了IP映射相關的操作,則映射後的IP也需要添加到兩端叢集的白名單中。
遷移驗證
在您正式開始遷移資料前,強烈建議您建立一個測試環境,以驗證業務的相容性、效能以及遷移是否能夠順利完成。在遷移驗證完成後,再在生產環境中進行資料移轉。這一步驟至關重要,它可以協助您提前識別並解決潛在問題,確保遷移過程順利,並且避免對生產環境造成不必要的影響。
建立遷移任務,進行資料移轉。
效能瓶頸分析以及是否能完成遷移。
上雲相容性驗證提供兩種方式:
手工驗證,請參見相容性分析與解決。
控制台驗證,請參見(可選)檢查SQL相容性。
選擇方案
遷移方案 | 優點 | 缺點 | 適用情境 |
控制台遷移 | 可視化操作,無需手動遷移中繼資料。 | 只能進行整叢集資料的全量和增量遷移,無法僅遷移指定的部分庫表或部分歷史資料。 | 整個叢集資料移轉。 |
手動遷移 | 可自主控制遷移哪些庫表資料。 | 操作繁雜,需要手動遷移中繼資料。 |
|
操作步驟
控制台遷移
注意事項
遷移過程中
目的地組群進行遷移的庫表會暫停合并(Merge),但自建叢集不會。
說明遷移資料時間過長,將會導致目的地組群的中繼資料積累過多,建議遷移任務的持續時間長度不要超過5天。超過5天,任務將自動取消。
目的地組群必須使用default叢集。如果您自建叢集的命名使用了其他名字,則會自動將分布式表中的cluster定義轉化為default。
支援遷移的內容
部分引擎的庫表結構在遷移時,會發生轉換,遷移後的引擎資訊請參見下方。
庫結構:支援遷移的庫引擎如下表所示。
引擎名
引擎轉換說明
Atomic
Replaced with Replicated database
Replicated
無變化
Ordinary
Replaced with Replicated database
表結構:支援遷移的表引擎如下表所示。
引擎名
引擎轉換說明
MaterializedView
無變化
View
GenerateRandom
Buffer
URL
Null
Merge
SharedMergeTree
SharedVersionedCollapsingMergeTree
SharedSummingMergeTree
SharedReplacingMergeTree
SharedAggregatingMergeTree
SharedCollapsingMergeTree
SharedGraphiteMergeTree
MergeTree
It will be replaced with SharedMergeTree
ReplicatedMergeTree
VersionedCollapsingMergeTree
It will be replaced with SharedVersionedCollapsingMergeTree
ReplicatedVersionedCollapsingMergeTree
SummingMergeTree
It will be replaced with SharedSummingMergeTree
ReplicatedSummingMergeTree
ReplacingMergeTree
It will be replaced with SharedReplacingMergeTree
ReplicatedReplacingMergeTree
AggregatingMergeTree
It will be replaced with SharedAggregatingMergeTree
ReplicatedAggregatingMergeTree
ReplicatedCollapsingMergeTree
It will be replaced with SharedCollapsingMergeTree
CollapsingMergeTree
GraphiteMergeTree
It will be replaced with SharedGraphiteMergeTree
ReplicatedGraphiteMergeTree
資料:增量遷移MergeTree族表的資料。
以上所示的庫表結構能夠正常遷移,其餘庫表結構需根據遷移過程中的警告、錯誤資訊手動處理。
如果資料不滿足以上條件,可選擇手動遷移。
叢集影響
自建叢集
讀取自建叢集過程中,自建叢集的CPU和記憶體使用量率會升高。
不允許進行DDL操作。
目的地組群
寫入資料過程中,目的地組群的CPU和記憶體使用量率會升高。
遷移的庫表不允許進行DDL操作,不需要遷移的庫表沒有此限制。
遷移中的庫錶停止merge,不需要遷移的庫表不會停止merge。
遷移結束後,叢集會持續一段時間高頻merge操作,這會導致IO使用率上升,從而引起業務請求的延遲增加。建議您計算遷移結束後的merge時間,提前規劃以應對業務請求延遲的潛在影響。
步驟一:檢查自建叢集並開啟使用系統資料表system
在資料移轉之前,需要根據自建叢集是否已啟用system.part_log和system.query_log,對config.xml檔案進行修改配置,以實現增量遷移。
未啟用system.part_log和system.query_log
如果您未啟用system.part_log和system.query_log,您需在config.xml檔案中增加以下內容。
system.part_log
<part_log>
<database>system</database>
<table>part_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>
system.query_log
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
已啟用system.part_log和system.query_log
-
您需根據下述內容,檢查config.xml中
system.part_log和system.query_log的配置,如果存在不一致之處,需將其修改為以下配置,否則可能會導致遷移失敗或遷移速度緩慢。system.part_log
<part_log> <database>system</database> <table>part_log</table> <partition_by>event_date</partition_by> <order_by>event_time</order_by> <ttl>event_date + INTERVAL 15 DAY DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </part_log>system.query_log
<query_log> <database>system</database> <table>query_log</table> <partition_by>event_date</partition_by> <order_by>event_time</order_by> <ttl>event_date + INTERVAL 15 DAY DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </query_log> -
修改配置後,您還需執行語句
drop table system.part_log和drop table system.query_log,在業務表插入資料後,會重新觸發建立system.part_log和system.query_log。
步驟二:配置目的地組群相容自建叢集版本
為確保目的地組群與自建叢集的行為儘可能相容,需串連目的地組群,修改compatibility參數,使目的地組群與自建叢集的版本號碼一致。
若將compatibility設定到低版本,會導致ParallelRepica等部分新特性失效。
樣本如下:
SELECT currentProfiles(); //擷取使用者使用的profile
SELECT
profile_name,
setting_name,
value
FROM system.settings_profile_elements
WHERE (setting_name = 'compatibility') AND (profile_name = 'xxxx'); // 查詢compatibility配置值
ALTER PROFILE XXXX SETTINGS compatibility = '23.8'; // 修改profile步驟三:建立遷移任務
登入雲資料庫ClickHouse控制台,在集群清單頁面,選擇企业版实例列表,並單擊目的地組群ID。
在左側導覽列,單擊。
單擊創建遷移任務。
選擇源及目標執行個體。
配置項
說明
樣本
任務名稱
遷移任務名稱,只能由大小寫英文字母和數字組成,且不允許重複,大小寫不敏感。
MigrationTask1229
源实例cluster名称
通過
SELECT * FROM system.clusters;擷取自建執行個體cluster名稱。default
VPC IP地址
叢集每個shard的IP和PORT地址,使用英文逗號隔開。格式:
IP:PORT,IP:PORT,....您可以使用以下SQL擷取自建叢集的IP和PORT:
SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = '<cluster_name>' and replica_num = 1;參數說明:
cluster_name:目的地組群的名字。
replica_num=1表示選擇第一個複本集,也可以選擇其他複本集或者自行挑選每個shard的一個副本組成。
重要不能使用ClickHouse的VPC網域名稱地址或者SLB地址。
如果IP和連接埠發生轉換後映射到阿里雲,則需要根據網路打通情況配置對應的IP和PORT。
192.168.0.5:9000,192.168.0.6:9000
數據庫賬號
自建叢集資料庫帳號。
test
數據庫密碼
自建叢集資料庫帳號密碼。
test******
源实例内核版本
單擊获取版本。
22.8.5.29
根據擷取到的源執行個體版本資訊,執行對應操作:
源執行個體版本大於等於22.10:單擊下一步。
源執行個體版本小於22.10:根據提示填寫目標實例信息,單擊下一步。
擷取版本失敗:源執行個體資訊填寫錯誤、網路未打通等情況會導致擷取版本失敗,請根據提示資訊處理後,重新單擊获取版本。
說明由於低版本社區版與企業版之間存在參數不相容的問題,當源執行個體版本低於22.10時,需要通過源端向目的端推送資料的方式進行同步。在這種情況下,需要將目的端的IP映射至自建網路。如果自建網路與企業版執行個體處於同一 VPC,或雙方網路已通過VPC對等串連連通,則可直接使用原有IP地址進行串連。
檢查連通性和配置。
單擊開始検査。
檢查過程中可以單擊右上方的
即時查看檢查進度。檢查完成後,請根據檢查結果,完成後續操作。
您可以選擇结果级别與檢查項,然後單擊
按鈕,查看對應的檢查結果,檢查結果說明如下。成功:若所有檢查項均通過,單擊下一步繼續操作。
警告:非強制卡點項,需自行確認該警告項是否會對業務和遷移任務造成影響。您可選擇忽略警示,或根據警示內容處理對應的警示項後,再次單擊開始検査,重新檢查連通性與配置。
錯誤:強制卡點項,需根據錯誤內容處理對應的錯誤項後,再次單擊開始検査,重新檢查連通性與配置。
檢測報錯資訊以及解決方案,請參見常見問題。
檢查庫表結構。
檢查連通性和配置成功後,進入檢查庫表結構步驟。此步驟分為選擇需要遷移的庫、選擇需要遷移的表和檢查庫表結構三個子步驟。
重要其中選擇需要遷移的庫和選擇需要遷移的表兩個步驟可以跳過。若您確認需要遷移源端的所有庫表,則不需要進行這兩個子步驟,可以直接跳到子步驟3(檢查庫表結構)。
子步驟1:選擇需要遷移的庫(可跳過)
單擊查詢源端,後台會自動查詢源端的庫。
查詢過程中,您可以點擊查询结果,來查看即時查詢結果。
當源端庫查詢完畢後,您可以根據業務需求選擇需要遷移的庫,選擇完畢後,點擊確認提交即可。
子步驟2:選擇需要遷移的表(可跳過)
選擇完需要遷移的庫後,會進入選擇需要遷移的表的介面,單擊查詢源端,後台會自動查詢您選擇的庫中的所有表。
查詢過程中,您可以點擊查询结果,來查看即時查詢結果。
當源端表查詢完畢後,您可以根據業務需求選擇需要遷移的表,選擇完畢後,點擊確認提交即可。
重要選擇需要遷移的表時,系統預設全選,若您只需要遷移部分表,可以取消對應庫的全選框,開啟下拉框後即可選擇您需要的表。
子步驟3:檢查庫表結構
單擊開始検査,後台會進行庫結構檢查、表結構檢查、UDF檢查,此步驟主要檢查源端執行個體的庫、表、UDF是否存在與目的端不相容的情況。
檢測過程中,您可以選擇通過結果層級、檢查項,並點擊重新整理按鈕,來查看即時檢查結果。
檢測結果分為成功、警告、失敗三類。
檢測成功:可直接單擊下一步,進行後續遷移流程。
檢測過程出現警示
您可以將結果層級設定為警告,並找到對應檢查項查看對應的警告原因。
重要結果層級為警告的檢查項非強制卡點項,需要您自行確認該警告項是否會對您的業務和遷移任務造成影響,在您自行確認後,有以下兩種選擇:
忽略警示,直接單擊下一步,進行後續的遷移流程。
根據警示內容處理對應的警示項後,單擊開始検査,重新檢查庫表結構。檢測警示資訊以及解決方案,請參見本文檢查庫表結構中的報錯資訊及解決方案。
檢測失敗
您可以將結果層級設定為錯誤,並找到對應檢查項查看對應的錯誤原因。
重要結果層級為錯誤的檢查項為強制卡點項,您需要根據錯誤內容處理對應的錯誤項後,單擊開始検査,重新檢查庫表結構。檢測報錯資訊以及解決方案,請參見本文檢查庫表結構中的報錯資訊及解決方案。
庫表結構遷移。
單擊开始迁移。
遷移過程中可以單擊右上方的
即時查看遷移進度。檢查完成後,請根據檢查結果,完成後續操作。
檢查結果說明請參見步驟5。
(可選)檢查SQL相容性。
SQL相容性檢查通過在目標執行個體上對自建執行個體的SQL語句進行回放,來驗證不同核心版本的文法相容性,請您根據自身需求,決定是否需要執行此步驟。
無需執行,則單擊跳过兼容性验证。
若需要執行,需選擇请求重放时间後,再單擊開始検査。檢查通過後單擊下一步,檢查不通過時的處理方法請參見步驟5。
重要執行個體庫表無資料,僅提供驗證文法相容性的能力。如果需要有資料,可先執行下一步驟遷移部分資料。
由於回放SQL的用戶端版本和目標執行個體不匹配,可能存在誤判。針對異常情況,您可以自行執行SQL驗證。
記錄並清理 Kafka/RabbitMQ 引擎表。
啟動同步前,需要在自建叢集中記錄 Kafka/RabbitMQ 引擎表及其下遊物化視圖的定義,處理隱式表後刪除這些表,以避免遷移異常。
登入自建叢集,查詢所有 Kafka 和 RabbitMQ 引擎表及其下遊依賴關係。
/* create_table_query:表定義 dependencies_database:依賴此表的庫 dependencies_table:依賴此表的表 從 dependencies_database 和 dependencies_table 可以拿到依賴 Kafka/RabbitMQ 表的物化視圖表 */ SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka');查看物化視圖定義,確認其目標表是否為隱式表。
/* 查看物化視圖定義 如果物化視圖的目標表是隱式表,則特別注意:刪除物化視圖表會同步刪除隱式表,導致資料丟失 舉例:CREATE MATERIALIZED VIEW [db.]table_name [TO[db.]name] 中沒有指定 TO, 則系統會自動建立出來一個隱式表,可能格式為 '.inner_id.<TABLE_UUID>' 或 '.inner.<TABLE>' */ SELECT * FROM system.tables WHERE database='<DATABASE>' AND name = '<MATERIALIZED_VIEW_NAME>';如果物化視圖目標表是隱式表,則 RENAME 物化視圖目標表到一個新名字,避免後續刪除物化視圖時同步刪除目標表導致資料丟失。
-- 將隱含顯示目標表 rename 到新名字,保護資料 RENAME TABLE <DATABASE>.`.inner_id.<TABLE_UUID>` TO <DATABASE>.<new_target_table_name>;刪除 Kafka/RabbitMQ 引擎表及其下遊物化視圖。
-- 先刪除物化視圖 DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>; -- 再刪除 Kafka/RabbitMQ 引擎表 DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
重要請務必儲存好所有記錄的建表語句(DDL)。後續需要在自建叢集和目的地組群上重建這些表。如果執行了 RENAME 操作,重建物化視圖時需要指向已被 RENAME 的目標表。
啟動同步。
單擊開始同步。
同步過程中可以單擊右上方的
即時查看同步進度。在自建叢集上,使用之前儲存的 DDL 語句重建 Kafka/RabbitMQ 引擎表及其下遊物化視圖。重建後增量資料將恢複流入並自動同步到目的地組群。
重要如果之前對隱含顯示目標表執行了 RENAME 操作,重建物化視圖時需要使用 TO 子句指向已被 RENAME 的目標表,具體請參見CREATE MATERIALIZED VIEW。
-- 在自建叢集重建 Kafka/RabbitMQ 引擎表 CREATE TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME> (...) ENGINE = Kafka/RabbitMQ SETTINGS ...; -- 重建物化視圖(指向已 RENAME 的目標表) CREATE MATERIALIZED VIEW <DATABASE>.<MATERIALIZED_VIEW_NAME> TO <DATABASE>.<new_target_table_name> AS SELECT ... FROM <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;當執行到迁移数据時,切換到迁移数据頁簽,單擊
按鈕查看遷移進度及预估剩余时间。重要您需重點監控目標任務的遷移進度,根據预估剩余时间,主動停寫自建叢集並處理Kafka和RabbitMQ引擎表。
目前遷移最長時間閾值統一設定為5天,當持續遷移時間滿5天時,後台將自動取消遷移任務,若您的遷移任務需要更長的遷移時間,請提交工單聯絡支援人員調整閾值。
當遷移進度為100%,且確認源端執行個體已經進入停寫狀態後,需要您單擊停止按鈕結束遷移流程,執行後續流程。
單擊迁移数据 Tab 可查看遷移詳情,單擊右上方重新整理表徵圖可更新遷移狀態。
同步完成後單擊完成。
重要當“啟動同步”步驟完成後,該遷移任務將被鎖定,即不允許修改遷移流程,您可通過上一步、下一步或重繪按鈕查看遷移步驟執行結果。
步驟四:遷移非MergeTree類型表的業務資料
遷移任務中,非MergeTree類型的表僅支援遷移表結構(例如MySQL表)或者不支援遷移(例如Log表)。因此,遷移任務完成後,目的地組群可能存在只有表結構,沒有具體的業務資料的表,您需自主完成業務資料移轉,具體操作如下:
登入自建叢集,查看需要遷移資料的非MergeTree類型的表。
SELECT `database` AS database_name, `name` AS table_name, `engine` FROM `system`.`tables` WHERE (`engine` NOT LIKE '%MergeTree%') AND (`engine` != 'Distributed') AND (`engine` != 'MaterializedView') AND (`engine` NOT IN ('Kafka', 'RabbitMQ')) AND (`database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema')) AND (`database` NOT IN ( SELECT `name` FROM `system`.`databases` WHERE `engine` IN ('MySQL', 'MaterializedMySQL', 'MaterializeMySQL', 'Lazy', 'PostgreSQL', 'MaterializedPostgreSQL', 'SQLite') ))登入目的地組群,通過remote函數執行資料移轉。
手動遷移
從自建ClickHouse向企業版遷移
在雲資料庫 ClickHouse 企業版中,無論您的源表是否存在分區或副本,您只需建立對應的目標表即可(在該表中,您可以省略Engine參數,因為系統將自動使用SharedMergeTree表引擎)。雲資料庫 ClickHouse 企業版叢集會自動處理垂直和水平擴充,您無需擔心複製和分區的具體實現方式。
操作概述
從自建ClickHouse向雲資料庫 ClickHouse 企業版叢集遷移的流程如下。
在源叢集中添加一個唯讀使用者。
在目的地組群上複製源表結構。
如果源叢集支援從外部網路訪問時,您可以將源叢集資料讀取至目的地組群;如果源叢集不支援從外部網路訪問時,您可以將源叢集資料推送至目的地組群。
(可選)在目的地組群上將源叢集的IP地址刪除。
從源叢集中刪除唯讀使用者。
操作步驟
在源叢集上執行以下操作(源表中已有資料):
增加一個唯讀使用者到表db.table中。
CREATE USER exporter IDENTIFIED WITH SHA256_PASSWORD BY 'password-here' SETTINGS readonly = 1;GRANT SELECT ON db.table TO exporter;複製源表結構。
SELECT create_table_query FROM system.tables WHERE database = 'db' and table = 'table'
在目的地組群上執行以下操作。
建立資料庫。
CREATE DATABASE db使用來源資料表的
CREATE TABLE語句來建立目標資料表。說明在運行
CREATE TABLE語句時,將ENGINE更改為SharedMergeTree,但是不能包含任何參數,因為雲資料庫 ClickHouse 企業版叢集始終會複製表並提供正確的參數。ORDER BY、PRIMARY KEY、PARTITION BY、SAMPLE BY、TTL和SETTINGS子句定義了表的結構和中繼資料資訊,請保留這些子句,以確保表在目標雲資料庫 ClickHouse 企業版叢集中正確地建立。CREATE TABLE db.table ...使用
Remote函數讀取資料或推送資料。說明如果源ClickHouse伺服器不可從外部網路訪問,您可以選擇將資料推送而不是讀取,因為
Remote函數適用於選擇和插入操作。在目的地組群中使用
Remote函數從源叢集的源表中讀取資料。
INSERT INTO db.table SELECT * FROM remote('source-hostname:9000', db, table, 'exporter', 'password-here')在源叢集中使用
Remote函數將資料推送到目的地組群中。
說明為了使
Remote函數能夠串連到您的雲資料庫 ClickHouse 企業版叢集上,您需要將源叢集的IP地址添加到目的地組群的白名單中。具體操作,請參見設定白名單。INSERT INTO FUNCTION remote('target-hostname:9000', 'db.table', 'default', 'PASS') SELECT * FROM db.table
常見問題
檢查連通性與配置中的報錯資訊及解決方案
報錯資訊 | 含義 | 解決方案 |
| 自建叢集網路連接逾時。 | 根據報錯資訊,排查網路問題。 |
| 自建叢集中不存在建立遷移任務時配置的cluster。 | 通過SQL查詢自建叢集的cluster,並修改遷移任務的配置。 |
| 自建叢集不存在 | 在自建叢集建立對應的系統資料表。 |
| 自建叢集與目的地組群時區不匹配。 | 修改時區,使其匹配。 |
| 目的地組群compatibility配置與自建叢集版本不一致。 | 調整目的地組群compatibility配置,使其與自建叢集版本一致。 重要 若將compatibility設定到低版本,會導致ParallelReplica等部分新特性失效。 |
檢查庫表結構中的報錯資訊及解決方案
報錯資訊 | 含義 | 解決方案 |
| 在自建叢集中,不同節點之間的資料庫表不一致。 | 檢查自建叢集各節點上的庫表,解決不一致問題。 |
| 庫表密碼不可見。 | 設定display_secrets_in_show_and_select=1,並重啟。 注意:此操作要求帳號擁有displaySecretsInShowAndSelect許可權。 |
| 自建叢集的庫引擎不支援遷移。 | 考慮更換目的端支援的庫引擎。 |
| 自建叢集的庫引擎不支援遷移。 | 後台自動替換為Replicated資料庫,以繞過遷移異常。 |
| 自建叢集的庫引擎不支援遷移。 | 請使用DTS(Data Transmission Service)替代同步功能,或建立同名資料庫以繞過遷移異常。 |
| 自建叢集的庫引擎不支援遷移。 | 在遷移過程中自動被忽略。 |
| 雲資料庫 ClickHouse 企業版不建議使用分布式表。 | 在自建叢集刪除分布式表,遷移後直接查詢MergeTree表。 |
| 引用外部引擎,可能存在無法訪問的問題,但並不一定存在問題。 | 需要您自行確認所引用的IP地址在目標執行個體是否可以訪問。若無法訪問,則需要打通網路連接,並加白IP地址。 |
| 部分引擎的表只會遷移表結構,不支援遷移資料。 | 需要您通過remote函數等方式自行遷移資料 |
| 部分引擎的表不支援遷移。 | 需要客戶在目標端建立同名的MergeTree表,並自行遷移資料。 |
| 部分引擎的表不支援遷移。 | 請參見操作步驟中的步驟四。 |
| 檢查庫表結構時,對應的表在目標執行個體應為空白表,不能有資料。 | 刪除目標執行個體對應表的資料。 |
| 只支援遷移客戶自訂的 | 自行在目標執行個體中建立對應的function。 |
其他
遷移過程中的其他問題及解決方案請參見常見問題。
