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;