注意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的无法恢复的问题给解决掉,敬请期待吧~
综上,大家在删除表与库的时候,还是要多次确认为好。