跳转至

集群整体闪回

集群整体闪回

功能描述:

允许集群整体恢复到某一指定时刻的状态

工作原理:

在 SeaboxMPP 中,根据mvcc原理,删除或者更新元组并没有立即删除旧数据,而只是标记为已删除,在vacuum清理之前,这些数据还存在page页中,根据元组可见性,通过闪回查询过去某个时间点或某个事务可见的数据,然后恢复到表中。 通过恢复系统表和普通表数据,可以达到将集群整体恢复到某一时刻的目的。

配置参数
  • track_commit_timestamp 设置track_commit_timestamp = 'on',记录事务提交的时间戳,需要重启数据库服务

  • flashback_mode 设置flashback_mode = 'mod',来保证不涉及删除表文件的事务可以被闪回,不必重启服务,但需要重新加载配置参数。 设置flashback_mode = 'all',来保证所有事务可以被闪回,不必重启服务,但需要重新加载配置参数。

  • autovacuum 控制是否使用autovacuum功能,设置autovacuum = 'off',关闭该功能。

  • sdtrashcan 需要在所有数据库下安装扩展

    create extension sdtrashcan
    

注意事项:

安装sdtrashcan扩展应在需要闪回的时间点之前,否则库级闪回会将扩展一起闪回,导致闪回过程中报错

集群指定时间点闪回

功能描述:

通过seabox mirrorcluster upgrade工具将集群整体闪回到指定时间点的状态

集群整体指定时间点闪回语法:

seabox mirrorcluster upgrade -m flashback -T '2023-06-01 00:00:00'

时间格式为“YYYY-MM-DD HH24:MI:SS”。

注意事项:

指定的集群时间戳对应的事务在闪回之后是不可见的

示例:

seaboxsql=# CREATE USER test_user;
CREATE ROLE
seaboxsql=# CREATE TABLE t1(a int, b text) distributed by (a);
CREATE TABLE
seaboxsql=# CREATE TABLE t2(a int, b text) distributed by (a);
CREATE TABLE
seaboxsql=# insert into t1 select g, g||'abcd' from generate_series(1, 10)g;
INSERT 0 10
seaboxsql=# insert into t2 select g, g||'abcd' from generate_series(1, 10)g;
INSERT 0 10
seaboxsql=# select * from sd_record_timestamp_gxid();
          time          | gxid  | dboid 
------------------------+--------+-------
 2023-10-08 11:43:24+08 | 60015 | 14760
(1 row)
seaboxsql=# insert into t1 select g, g||'abcd' from generate_series(11, 20)g;
INSERT 0 10
seaboxsql=# insert into t2 select g, g||'abcd' from generate_series(11, 20)g;
INSERT 0 10
seaboxsql=# drop table t1,t2;
DROP TABLE
seaboxsql=# DROP USER test_user;
DROP ROLE
  • 执行集群整体闪回
seabox mirrorcluster upgrade -m flashback -T '2023-10-08 11:43:24+08'
  • 查看闪回之后集群状态
seaboxsql=# select count(*) from t1;
 count
-------
    10
(1 row)
seaboxsql=# select count(*) from t2;
 count
-------
    10
(1 row)
seaboxsql=# select count(*) from pg_roles where rolname = 'test_user';
 count 
-------
     1
(1 row)
集群指定事务号闪回

功能描述:

通过seabox mirrorcluster upgrade 工具将集群整体闪回到指定集群事务号的状态

集群整体指定时间点闪回语法:

seabox mirrorcluster upgrade -m flashback -x GID

注意事项:

指定的集群事务号对应的事务在闪回之后是可见的

示例:

seaboxsql=# CREATE USER test_user;
CREATE ROLE
seaboxsql=# CREATE TABLE t1(a int, b text) distributed by (a);
CREATE TABLE
seaboxsql=# CREATE TABLE t2(a int, b text) distributed by (a);
CREATE TABLE
seaboxsql=# insert into t1 select g, g||'abcd' from generate_series(1, 10)g;
INSERT 0 10
seaboxsql=# insert into t2 select g, g||'abcd' from generate_series(1, 10)g;
INSERT 0 10
seaboxsql=# select * from sd_record_timestamp_gxid();
          time          | gxid  | dboid 
------------------------+--------+-------
 2023-10-08 11:43:24+08 | 60015 | 14760
(1 row)
seaboxsql=# insert into t1 select g, g||'abcd' from generate_series(11, 20)g;
INSERT 0 10
seaboxsql=# insert into t2 select g, g||'abcd' from generate_series(11, 20)g;
INSERT 0 10
seaboxsql=# drop table t1,t2;
DROP TABLE
seaboxsql=# DROP USER test_user;
DROP ROLE
  • 执行集群整体闪回
seabox mirrorcluster upgrade -m flashback -x 60015
  • 查看闪回之后集群状态
seaboxsql=# select count(*) from t1;
 count
-------
    10
(1 row)
seaboxsql=# select count(*) from t2;
 count
-------
    10
(1 row)
seaboxsql=# select count(*) from pg_roles where rolname = 'test_user';
 count 
-------
     1
(1 row)