PolarDB MySQL版提供的Fast Import特性,允許您在下發庫表恢複任務後,等待約5~10分鐘(和恢複資料量大小無關)即可查詢恢複任務中庫表的全量資料,無需等待恢複任務完成。
情境概述
Fast Import 特性與庫表恢複新流程相容,查詢操作可與恢複任務同時進行。
Fast Import特性可以加速以下兩種情境:
當資料或表被誤刪除,且無法確定具體時間點時,傳統的恢複任務可能需要等待很長時間才能完成。通過Fast Import特性,您無需等待恢複任務結束即可快速查詢和校正資料。
當少量資料被誤刪除,但所在表規模較大時,Fast Import特性支援您通過
INSERT ... SELECT ...的方式,快速從恢複任務的表中提取所需資料,並將其插入到被誤刪資料的表中,從而提升操作效率。
版本限制
適用的資料庫引擎版本為MySQL 8.0.1,且小版本需為8.0.1.1.49及以上版本。您可以通過查詢版本號碼來確認叢集版本。
注意事項
目前該功能在灰階中,如需使用,您可以聯絡我們加入白名單,啟用該功能。
僅支援file-per-table配置(預設配置),非壓縮且非加密表,在恢複任務執行過程中查詢資料。
恢複任務表的數量在1000以下,系統會預設啟用
Fast Import特性,從而支援在恢複過程中查詢全量資料。說明恢複任務數量在1000以上,系統不會啟用
Fast Import特性。管理工作流程會自動根據您當前下發任務判斷來是否開啟Fast Import特性。僅支援在讀寫(RW)節點和唯讀(RO)節點執行查詢操作。如果存在列存唯讀(RO)節點,可使用HINT文法強制路由到讀寫(RW)或者行存唯讀(RO)節點,否則可能會查詢不到資料。
當
buffer pool資源充足時,訪問恢複狀態表的效率與正常表相當,但在叢集負載較高的情境下,訪問恢複狀態表的效率會受到限制,以降低對正常業務的影響。在恢複任務完成之前,僅允許以唯讀模式訪問恢複的目標表。
使用說明
下發庫表恢複任務
在下發庫表恢複任務之後,可通過頁面右上方的詳情連結進入到任務詳情頁面
庫表恢複任務共包含 6 個步驟:
初始化任務
臨時節點全量恢複
臨時節點增量恢複(按需)
庫表恢複預先處理
庫表恢複
完成任務並回收資源
在任務詳情頁面可看到任務的即時進度,在步驟4結束後可通過show databases或 show tables等操作確認恢複任務已建立目標庫/表,此時即可查詢目標庫/表的全量資料。
唯讀快速存取
您可以通過查詢information_schema.fast_import_tablespaces表,擷取當前恢複任務中所有支援快速唯讀訪問的表資訊。
當前正處於匯入狀態的表可以進行快速唯讀訪問,但在下面的查詢結果中不會顯示具體表名。您可以通過執行SHOW PROCESSLIST命令來查看包含dbms_rman.import的SQL語句,擷取當前正在恢複的表名。
SELECT * FROM information_schema.fast_import_tablespaces;為處於恢複狀態的表可唯讀訪問全量資料。
| 106 | root | 127.0.0.1:49055 | NULL | Sleep | 13 | | NULL | | 146 | xxx | xxx | NULL | Sleep | 43 | | NULL | | 366 | xxx | xxx | NULL | Polar Log Dump | 0 | Reading log from innodb | NULL | | 368 | xxx | xxx | NULL | Polar Log Ack | 0 | Receiving from client | NULL | | 788 | xxx | xxx | NULL | Sleep | 295 | | NULL | | xxx | xxx | xxx | NULL | Query | 332 | altering table | /* rds internal mark */ call dbms_rman.import('test', 'sbtest1_bk03211652' | | 216448 | xxx | xxx | information_schema | Sleep | 7 | | NULL | | 216915 | xxx | xxx | NULL | Sleep | 0 | | NULL | | 216916 | xxx | xxx | NULL | Sleep | 0 | | NULL | | 536879884 | xxx | | test | Query | 0 | starting | show processlist | 31 rows in set (0.00 sec) mysql> show tables; +----------------------+ | Tables_in_test | +----------------------+ | sbtest1 | | sbtest1_bk03211652 | | sbtest2 | | sbtest2_bk03211652 | +----------------------+ 4 rows in set (0.00 sec) mysql> select count(*) from sbtest1; +-----------+ | count(*) | +-----------+ | 100000000 | +-----------+ 1 row in set (4.64 sec) mysql> select count(*) from sbtest1_bk03211652; +-----------+ | count(*) | +-----------+ | 100000000 | +-----------+ 1 row in set (48.21 sec)為其他已開啟快速存取的表可以唯讀訪問全量資料。
mysql> select * from information_schema.fast_import_tablespaces; +----------------+-------------------------+------------------------------------------------------------------+ | LOCAL_SPACE_ID | SPACE_NAME | REMOTE_DATA_PATH | +----------------+-------------------------+------------------------------------------------------------------+ | 18 | test/sbtest2_bk03211652 | xxx/test/sbtest2_bk03211652.ibd | +----------------+-------------------------+------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> show tables; +------------------------+ | Tables_in_test | +------------------------+ | sbtest1 | | sbtest1_bk03211652 | | sbtest2 | | sbtest2_bk03211652 | +------------------------+ 4 rows in set (0.00 sec) mysql> select count(*) from sbtest2_bk03211652; +----------+ | count(*) | +----------+ | 1000 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from sbtest2; +----------+ | count(*) | +----------+ | 1000 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from sbtest1; +-----------+ | count(*) | +-----------+ | 100000000 | +-----------+ 1 row in set (19.39 sec) mysql> select count(*) from sbtest1_bk03211652; +-----------+ | count(*) | +-----------+ | 100000000 | +-----------+ 1 row in set (4.39 sec) mysql> show processlist;