试用EsgynDB新特性:在线备份及恢复功能
EsgynDB是基于开源版本Apache Trafodion的基础上实现的商业版本,除了Trafodion本身的特性之外,EsgynDB还附带了很多其他的功能,如界面化的管理工具EsgynDB Manager,多数据中心支持,在线备份等功能。
备份恢复是数据库中比较重要的功能,定期的数据库备份是必要的,这可以防止数据库在出现突发状况时保持数据不丢失,或者可以防止由于管理员操作不当误删除表而无法恢复的问题(毕竟人不是机器,也会有失误)。
开源版本的Trafodion提供了离线备份及恢复的功能,关于离线备份及恢复。本文介绍试用商业版本的EsgynDB的在线备份功能备份数据。
目前最新版本的EsgynDB的在线备份功能可以支持多粒度的数据库备份,包括全量备份或子集备份。全量备份就是备份整个数据库,包括所有用户数据及元数据;子集备份提供备份指定schema备份和指定table备份,即可以备份单个schema或几个schema的数据,也可以备份单个表或几个表的数据。具体语法如下,
BACKCUP TRAFODION {br-optioins1, [br-options2,]...[br-optionsN]} br-option is: {TAG 'tag -name '} [SCHEMA (sch ema -name )] [SCHEMAS (sch ema -name1 ,… sch ma -name N)] [TABLE (table -name )] [TABLES (table -name 1,…table -name N)] [SHOW OBJECTS ]
上述的br-option中,”{TAG ‘tag -name ‘}”是必须的,其余是可选的。举个例子,以下是SEABASE下面的所有表,我们希望备份TEST-[A-F] 这些表,应该怎么实现呢?
SQL>get tables; Tables in Schema TRAFODION.SEABASE ================================== SB_HISTOGRAMS SB_HISTOGRAM_INTERVALS SB_PERSISTENT_SAMPLES TEST_1 TEST_2 TEST_A TEST_B TEST_C TEST_D TEST_E TEST_F
根据上面的备份语法,我们可以先使用以下命令确认要备份的数据,其中”show objects”表示显示要备份的对象而不真正执行备份,
SQL>backup trafodion,tag 'bk_test_a_to_e',tables (seabase.test_a,seabase.test_b,seabase.test_c,seabase.test_c,seabase.test_d,seabase.test_e,seabase.test_f),show objects; DDL_OUTPUT -------------------------------------------------------------------------------------------------------------------------------- MetaData objects to be backed up ================================ TRAFODION._BACKUP_bk_test_a_to_e_.COLUMNS TRAFODION._BACKUP_bk_test_a_to_e_.INDEXES TRAFODION._BACKUP_bk_test_a_to_e_.KEYS TRAFODION._BACKUP_bk_test_a_to_e_.OBJECTS TRAFODION._BACKUP_bk_test_a_to_e_.REF_CONSTRAINTS TRAFODION._BACKUP_bk_test_a_to_e_.SEQ_GEN TRAFODION._BACKUP_bk_test_a_to_e_.TABLES TRAFODION._BACKUP_bk_test_a_to_e_.TABLE_CONSTRAINTS TRAFODION._BACKUP_bk_test_a_to_e_.TEXT TRAFODION._BACKUP_bk_test_a_to_e_.UNIQUE_REF_CONSTR_USAGE TRAFODION._BACKUP_bk_test_a_to_e_.VIEWS TRAFODION._BACKUP_bk_test_a_to_e_.VIEWS_USAGE TRAFODION._BACKUP_bk_test_a_to_e_.COLUMN_PRIVILEGES TRAFODION._BACKUP_bk_test_a_to_e_.OBJECT_PRIVILEGES TRAFODION._BACKUP_bk_test_a_to_e_.SCHEMA_PRIVILEGES TRAFODION._BACKUP_bk_test_a_to_e_.SB_HISTOGRAMS TRAFODION._BACKUP_bk_test_a_to_e_.SB_HISTOGRAM_INTERVALS TRAFODION._BACKUP_bk_test_a_to_e_.SB_PERSISTENT_SAMPLES User objects to be backed up ============================ TRAFODION.SEABASE.TEST_A TRAFODION.SEABASE.TEST_B TRAFODION.SEABASE.TEST_C TRAFODION.SEABASE.TEST_D TRAFODION.SEABASE.TEST_E TRAFODION.SEABASE.TEST_F --- SQL operation complete.
上述结果表明,在备份用户数据的同时也会备份相关的元数据信息,这些元数据信息也不可缺少,元数据信息和用户表组合一起用来做后续恢复用途。确认需要备份的表列表无误后,我们使用以下的命令执行真正的备份工作,
SQL>backup trafodion,tag 'bk_test_a_to_e',tables (seabase.test_a,seabase.test_b,seabase.test_c,seabase.test_c,seabase.test_d,seabase.test_e,seabase.test_f); --- SQL operation complete.
备份完成后,我们可以使用以下命令获取备份的数据集,
SQL>get all backups; BackupTag Type Status Timestamp ========================================================================== bk_test_a_to_e SUBSET VALID 2018-01-25 18:01:58 --- SQL operation complete. SQL>get backup, tag 'bk_test_a_to_e'; BackupTag Type Status Timestamp ========================================================================== bk_test_a_to_e SUBSET VALID 2018-01-25 18:01:58 --- SQL operation complete.
现在备份完成了,现在我们来模拟一个场景:用户误删除表test_f,使用上述备份集恢复。步骤如下,
//模拟误删表test_f SQL>drop table test_f; --- SQL operation complete. SQL>select * from test_f; *** ERROR[4082] Object TRAFODION.SEABASE.TEST_F does not exist or is inaccessible. [2018-01-25 18:11:14] //使用备份集恢复表test_f,查看恢复的内容 SQL>restore trafodion, tag 'bk_test_a_to_e', table (seabase.test_f), show objects; DDL_OUTPUT -------------------------------------------------------------------------------------------------------------------------------- MetaData objects to be restored =============================== TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.COLUMNS TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.COLUMN_PRIVILEGES TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.INDEXES TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.KEYS TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.OBJECTS TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.OBJECT_PRIVILEGES TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.REF_CONSTRAINTS TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SB_HISTOGRAMS TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SB_HISTOGRAM_INTERVALS TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SB_PERSISTENT_SAMPLES TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SCHEMA_PRIVILEGES TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SEQ_GEN TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.TABLES TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.TABLE_CONSTRAINTS TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.TEXT TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.UNIQUE_REF_CONSTR_USAGE TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.VIEWS TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.VIEWS_USAGE User objects to be restored =========================== TRAF_RSRVD_3:TRAFODION.SEABASE.TEST_F --- SQL operation complete. 使用备份集恢复表test_f,执行恢复动作 SQL>restore trafodion, tag 'bk_test_a_to_e', table (seabase.test_f); --- SQL operation complete. //查看表是否被恢复 SQL>select count(*) from test_f; (EXPR) -------------------- 2 --- 1 row(s) selected.
至此,简单的在线备份恢复功能已经展示完成,在后续的文章中,我们会继续了解下如何导出并导入这些备份的数据集并恢复到新的集群中。