数据是企业的核心资产和生命线。怎样确保在故障或极端的情况下,数据能够有效且快速地恢复,以最大限度避免或减少企业的损失。数据恢复的前提必须依赖于备份策略及有效的备份集,因此,备份重于泰山,一点都不为过。
通常我们的备份恢复主要用于以下场景:
- 监管要求:如金融行业,数据保存年限,有严格的要求
- 数据保护:防止软/硬件损坏、人为误操作等对数据的破坏
- 环境构建:如搭建备库、恢复准生产环境或开发测试环境等
今天主要介绍YashanDB的物理备份,如果您之前有ORACLE相关备份恢复经验,那本章节内容将是得心应手。YashanDB也提供了yasrman工具(类似ORACLE的rman备份工具),以及在SQL命令中直接进行备份。
[yashan@vms71 ~]$ cd $YASDB_HOME
[yashan@vms71 23.1.1.100]$
[yashan@vms71 23.1.1.100]$ cd bin
[yashan@vms71 bin]$
[yashan@vms71 bin]$ ll
total 62612
-rwxr-xr-x 1 yashan yashan 101320 Oct 19 2023 exp
-rwxr-xr-x 1 yashan yashan 79944 Oct 19 2023 imp
-rwxrwxr-x 1 yashan yashan 19865208 Oct 19 2023 yasagent
-rwxrwxr-x 1 yashan yashan 5986112 Oct 19 2023 yasbak
-rwxrwxr-x 1 yashan yashan 9381440 Oct 19 2023 yasboot
-rwxr-xr-x 1 yashan yashan 954296 Oct 19 2023 yascs
-rwxr-xr-x 1 yashan yashan 181096 Oct 19 2023 yasdb
-rwxr-xr-x 1 yashan yashan 779640 Oct 19 2023 yasldr
-rwxr-xr-x 1 yashan yashan 1092704 Oct 19 2023 yasminer
-rwxrwxr-x 1 yashan yashan 21896816 Oct 19 2023 yasom
-rwxr-xr-x 1 yashan yashan 66072 Oct 19 2023 yaspwd
-rwxr-xr-x 1 yashan yashan 645680 Oct 19 2023 yasql
-rwxr-xr-x 1 yashan yashan 137992 Oct 19 2023 yasrepair
-rwxr-xr-x 1 yashan yashan 773256 Oct 19 2023 yasrman
-rwxr-xr-x 1 yashan yashan 120136 Oct 19 2023 yaswrap
-rwxr-xr-x 1 yashan yashan 342816 Oct 19 2023 ycsctl
-rwxr-xr-x 1 yashan yashan 590416 Oct 19 2023 yex_server
-rwxr-xr-x 1 yashan yashan 204128 Oct 19 2023 yfsbenchmark
-rwxr-xr-x 1 yashan yashan 613024 Oct 19 2023 yfscmd
-rwxr-xr-x 1 yashan yashan 220712 Oct 19 2023 yfsminer
-rwxr-xr-x 1 yashan yashan 46304 Oct 19 2023 yfssrv
YashanDB的物理备份方式,也提供了类似ORACLE的全量备份、增量备份(包含差异备份和累积备份),同时还支持备份的加密、压缩等功能。语法也高度兼容ORACLE,可以说很大程度上降低了知识迁移的成本。
下面咱们先来体验一下YashanDB的物理备份。
方式一:在SQL命令行,进行物理备份
1、通过yasql,以管理员身份登录数据库,执行backup database full命令进行全量备份。没压缩的情况下,备份集大小约3.6GB
[yashan@vms71 ~]$ yasql / as sysdba
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux
SQL> backup database full tag '240504_bak_full' parallelism 4;
Succeed.
SQL> set time on
SQL> select type, increment_level, path, tag, output_bytes / 1048576 size_mb from dba_backup_set;
TYPE INCREMENT_LEVEL PATH TAG SIZE_MB
------------- --------------- ---------------------------------------------------------------- ---------------------------------------------------------------- -----------
FULL 0 /home/yashan/yasdb_data/db-1-1/backup/bak_2024050411071881 240504_bak_full 3610.59766
1 row fetched.
Elapsed: 00:00:00.001
SQL>
2、通过delete backupset命令,删除前面的备份集
SQL> backup database delete backupset tag '240504_bak_full';
Succeed.
Elapsed: 00:00:00.243
SQL>
3、对数据库做一个level 0增量备份
SQL> backup database incremental level 0 tag '240504_lev0';
Succeed.
Elapsed: 00:00:08.411
SQL>
SQL>
SQL> select type, increment_level, path, tag, output_bytes / 1048576 size_mb from dba_backup_set;
TYPE INCREMENT_LEVEL PATH TAG SIZE_MB
------------- --------------- ---------------------------------------------------------------- ---------------------------------------------------------------- -----------
INCREMENTAL 0 /home/yashan/yasdb_data/db-1-1/backup/bak_2024050411114908 240504_lev0 3565.24219
1 row fetched.
Elapsed: 00:00:00.000
4、对数据库做一个level 1增量备份
SQL> backup database incremental level 1 tag '240504_lev1';
Succeed.
Elapsed: 00:00:02.084
SQL> select type, increment_level, path, tag, output_bytes / 1048576 size_mb from dba_backup_set;
TYPE INCREMENT_LEVEL PATH TAG SIZE_MB
------------- --------------- ---------------------------------------------------------------- ---------------------------------------------------------------- -----------
INCREMENTAL 0 /home/yashan/yasdb_data/db-1-1/backup/bak_2024050411114908 240504_lev0 3565.24219
INCREMENTAL 1 /home/yashan/yasdb_data/db-1-1/backup/bak_2024050411133628 240504_lev1 40.40625
2 rows fetched.
Elapsed: 00:00:00.000
5、开启压缩,级别为low,全备时,备份集大小约为473MB,与前面未开启压缩比对,压缩比约1:7.6
SQL> backup database compression algorithm zstd low tag '240504_full_comp';
Succeed.
Elapsed: 00:00:04.383
SQL> select type, increment_level, path, tag, output_bytes / 1048576 size_mb from dba_backup_set;
TYPE INCREMENT_LEVEL PATH TAG SIZE_MB
------------- --------------- ---------------------------------------------------------------- ---------------------------------------------------------------- -----------
FULL 0 /home/yashan/yasdb_data/db-1-1/backup/bak_2024050411162384 240504_full_comp 472.509277
1 row fetched.
Elapsed: 00:00:00.000
方式二:通过yasrman工具,进行物理备份
1、若未创建catalog目录(类似ORACLE的catalog。用于存放备份集、备份的元数据信息及一些配置信息等),请先执行以下命令创建catalog
[yashan@vms71 ~]$ yasrman sys/pwd666@192.168.26.71:1688 -c "create catalog" -D /home/yashan/catalog
create catalog successfully
[yashan@vms71 ~]$
2、配置config.ini信息,其中,命令configure DEST SERVER|CLIENT,当值为SERVER时(缺省值),代表备份集将存放于$YASDB_DATA/backup目录。若值为CLIENT,则代表备份集将存放于catalog/backup目录下
[yashan@vms71 ~]$ yasrman sys/pwd666@192.168.26.71:1688 -c 'configure DEST SERVER' -D /home/yashan/catalog
configure successfully
[yashan@vms71 ~]$
3、执行backup database full,对数据库进行全备,由于前面DEST设置为SERVER,因此,可以看到备份集最终存放在 $YASDB_DATA/backup目录
[yashan@vms71 ~]$ more catalog/config.ini
DEST = SERVER
[yashan@vms71 ~]$
[yashan@vms71 ~]$ ll catalog/backup/
total 0
[yashan@vms71 ~]$
[yashan@vms71 ~]$ yasrman sys@192.168.26.71:1688 -c "backup database full tag '20240504_full_bak_rman' " -D /home/yashan/catalog
[Node 0]YAS-02143 invalid username/password, login denied
[yashan@vms71 ~]$ yasrman sys/pwd666@192.168.26.71:1688 -c "backup database full tag '20240504_full_bak_rman' " -D /home/yashan/catalog
backup successfully
[yashan@vms71 ~]$ ll catalog/backup/
total 0
[yashan@vms71 ~]$ ls $YASDB_DATA/backup/bak_2024050412050152
arch0_0_67_0.bak data_1_0_0.bak data_4_0_12.bak data_4_0_18.bak data_4_0_23.bak data_4_0_7.bak data_6_0_0.bak
backup_filelist data_2_0_0.bak data_4_0_13.bak data_4_0_19.bak data_4_0_2.bak data_4_0_8.bak data_6_1_0.bak
backup_profile data_3_0_0.bak data_4_0_14.bak data_4_0_1.bak data_4_0_3.bak data_4_0_9.bak data_6_2_0.bak
bucket_4_0_0.bak data_4_0_0.bak data_4_0_15.bak data_4_0_20.bak data_4_0_4.bak data_5_0_0.bak data_6_3_0.bak
ctrl_0_0_0.bak data_4_0_10.bak data_4_0_16.bak data_4_0_21.bak data_4_0_5.bak data_5_0_1.bak data_6_4_0.bak
data_0_0_0.bak data_4_0_11.bak data_4_0_17.bak data_4_0_22.bak data_4_0_6.bak data_5_0_2.bak
[yashan@vms71 ~]$
4、通过show all命令,查看yasrman的一些配置,如:并行度、压缩算法、压缩级别、备份集存储位置等
[yashan@vms71 ~]$ yasrman sys/pwd666@192.168.26.71:1688 -c 'show all' -D /home/yashan/catalog
+---------------------------+-----------+----------------+
| NAME | DEFAULT | VALUE |
+---------------------------+-----------+----------------+
| PARALLELISM | 2 | 2 |
| SECTION SIZE | 134217728 | 134217728 |
| COMPRESSION ALGORITHM | NONE | NONE |
| COMPRESSION LEVEL | LOW | LOW |
| DEST | SERVER | SERVER |
+---------------------------+-----------+----------------+
[yashan@vms71 ~]$
小结:通过上面两种物理方式备份,我们可以看到YashanDB与ORACLE的兼容性相对较高,但细节上与ORACLE还是存在一些差距(如下所示)。Anyway,我相信,只有经过不同场景的打磨,国产数据库将变得越来越好。
- show all命令,YashanDB提供的配置项较少,只有5个,而ORACLE提供的内容很丰富,如备份窗口的保留策略、备份集的冗余策略、参数文件/控制文件自动备份等等
- 执行备份时,没有实时的备份信息输出,这让终端用户搞不清楚备份作业是否存在卡死或备份进展等
- yasrman工具每次执行一条命令,都需要进行登录认证(不能像ORACLE一样,直接通过rman / target进行认证后,可以执行各种命令),且需要在命令行上输入明文密码,这是不符合安全合规要求