注意StarRocks的恢复盲区:drop schema

注意StarRocks的恢复盲区:drop schema

                       --2022-05-21 春雷

---------------------------前言-------------------------

日常删除库 ,MySQL的语法是:DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;DATABASE | SCHEMA 是同义词,都可以用于删除数据库。

在StarRocks 里面,有个特别好的功能:那就是删除库、表、partition可以恢复。恢复命令如下:

  • 恢复名为 example_db 的 database

RECOVER DATABASE example_db;

  • 恢复名为 example_tbl 的 table

RECOVER TABLE example_db.example_tbl;

  • 恢复表 example_tbl 中名为 p1 的 partition

RECOVER PARTITION p1 FROM example_tbl;

---------------------------- 测试 -----------------------------------

StarRocks的建库、建表、删除库、恢复库的测试:

【建库】:

create database lcl1;

create schema lcl2;

【建表与模拟数据】

use lcl1;

CREATE TABLE test1 (

id int,

name varchar(50)

) ENGINE=OLAP

DUPLICATE KEY(id)

COMMENT “test”

DISTRIBUTED BY HASH(id) BUCKETS 8

PROPERTIES (

“replication_num” = “3”,

“in_memory” = “false”,

“storage_format” = “DEFAULT”

);

insert into test1 values(1,‘a’);

insert into test1 values(2,‘b’);

select * from test1;

±-----±-----+

| id | name |

±-----±-----+

| 1 | a |

| 2 | b |

±-----±-----+

【建表与模拟数据】

use lcl2;

CREATE TABLE test2 (

id int,

name varchar(50)

) ENGINE=OLAP

DUPLICATE KEY(id)

COMMENT “test”

DISTRIBUTED BY HASH(id) BUCKETS 8

PROPERTIES (

“replication_num” = “3”,

“in_memory” = “false”,

“storage_format” = “DEFAULT”

);

insert into test2 values(3,‘c’);

insert into test2 values(4,‘d’);

select * from test2;

±-----±-----+

| id | name |

±-----±-----+

| 4 | d |

| 3 | c |

±-----±-----+

模拟删除库与恢复库lcl1:drop database 方式

drop database lcl1;

recover database lcl1;

use lcl1

show tables;

±---------------+

| Tables_in_lcl1 |

±---------------+

| test1 |

±---------------+

select * from test1;

±-----±-----+

| id | name |

±-----±-----+

| 1 | a |

| 2 | b |

±-----±-----+

模拟删除库与恢复库lcl2:drop database 方式

drop database lcl2;

recover database lcl2;

use lcl2;

show tables;

±---------------+

| Tables_in_lcl2 |

±---------------+

| test2 |

±---------------+

select * from test2;

±-----±-----+

| id | name |

±-----±-----+

| 4 | d |

| 3 | c |

±-----±-----+

模拟删除库与恢复库lcl1:drop schema 方式

drop schema lcl2;

recover database lcl2;

ERROR 1064 (HY000): Unknown database ‘default_cluster:lcl2’

recover schema lcl2;

ERROR 1064 (HY000): Syntax error in line 1:

recover schema lcl2

^

Encountered: SCHEMA

Expected

------------------------结果说明------------------------------------

正常的drop database 是可以正常恢复回来的,但是使用drop schema 是无法恢复回来的!

所以大家要注意删除库的命令,一定要用drop database。否则没法恢复。

无法恢复的原因:当前drop schema是drop database xxx force,这个不进trash,是没法恢复的。

日常注意:手动写删除库的命令,要使用drop database。

同时注意第三方的客户端:删除库的命令可能是drop schema,例如:DBeaver 。

不过,好消息是:官方会在后续版本把drop schem的无法恢复的问题给解决掉,敬请期待吧~

综上,大家在删除表与库的时候,还是要多次确认为好。

2赞