暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

「YashanDB个人版体验」站在DBA角度看YashanDB

原创 Skye 2023-11-27
500

前言

作为一个DBA,很难不去关注一款数据库的备份恢复能力。因为一旦上了生产环境,数据的安全是不容小视的。

本期体验的主题直奔YashanDB 的备份恢复,在学习的过程中也会简要的记录一下产品相关概念。这样从上至下,也能更好的理解该产品的备份恢复特性。

测试环境使用的版本是YashanDB 23.1.1.100个人版。

内容说明:以下内容均来自个人对YashanDB的官方材料学习和实验而得,如有理解不恰当之处,欢迎指正交流。

1. 产品了解

1.1 版本差异

从官方文档暂时没看出个人版、标准版和企业版在备份恢复上与什么限制和区别。YashanDB个人版、标准版和企业版功能差异

但是个人版体验不了共享集群和分布式集群架构,本来想试试,结果安装共享集群直接报错说功能不支持,看来是功能上直接做了限制。
image.png
22837738815e66aa3bfdc8cf82f5b88.png

1.2 产品简介

简介里面介绍了,支持备份恢复(物理和逻辑)还有闪回。闪回的功能前期有机会测试过,等会直接归档过来。
image.png

1.3 与Oracle兼容性

YashanDB宣称兼容Oracle,官方文档也有相关说明,但是懂事的DBA心里应该有个合适的预期。

image.png

2. 备份恢复

2.1 物理备份恢复

在官方文档的【数据库管理】模块很容易就找到了【备份恢复】相关的内容,仔细看来这部分是我们所理解的物理备份恢复。
image.png
能力上支持全备、增备、全量恢复、指定时间点恢复(也就是不完全恢复),以及压缩和加密。

有两种方式执行,一是通过SQL命令;二是使用yasrman工具。

先看看第一种通过SQL命令。

2.1.1 通过SQL命令备份数据库

1.开启归档
习惯Oracle 的命令查看归档是否开启,但是好像不支持archive log list
image.png

问题不大,可以通过视图查看
image.png

这里已经开启了归档,就不做调整了,查看一下归档路径。默认路径在$YASDB_DATA下
image.png

2.数据准备
自建了一个SKYE用户并创建了几个对象,初步主要是为了学习功能使用,数据量不大。
image.png

3.执行全备
完整命令参考:BACKUP DATABASE

#快速验证,直接使用默认配置 SQL> backup database full; Succeed. #备份集默认会放在$YASDB_DATA/backup/bak_{date}下,也可以通过format指定。 SQL> ! echo $YASDB_DATA /home/yashan/yasdb_data/db-1-1 SQL> ! ls /home/yashan/yasdb_data/db-1-1/backup bak_2023112310570880 SQL> ! ls -l /home/yashan/yasdb_data/db-1-1/backup/bak_2023112310570880 total 716668 -rw-r-----. 1 yashan yashan 20606976 Nov 23 10:57 arch0_0_31_0.bak -rw-r-----. 1 yashan yashan 6144 Nov 23 10:57 backup_filelist -rw-r-----. 1 yashan yashan 16777216 Nov 23 10:57 backup_profile drwx------. 2 yashan yashan 6 Nov 23 10:57 bucket_4_0_0.bak -rw-r-----. 1 yashan yashan 25370624 Nov 23 10:57 ctrl_0_0_0.bak -rw-r-----. 1 yashan yashan 67108864 Nov 23 10:57 data_0_0_0.bak -rw-r-----. 1 yashan yashan 67108864 Nov 23 10:57 data_1_0_0.bak -rw-r-----. 1 yashan yashan 8192 Nov 23 10:57 data_2_0_0.bak -rw-r-----. 1 yashan yashan 8192 Nov 23 10:57 data_3_0_0.bak -rw-r-----. 1 yashan yashan 67108864 Nov 23 10:57 data_4_0_0.bak -rw-r-----. 1 yashan yashan 134217728 Nov 23 10:57 data_5_0_0.bak -rw-r-----. 1 yashan yashan 134217728 Nov 23 10:57 data_5_0_1.bak -rw-r-----. 1 yashan yashan 134217728 Nov 23 10:57 data_5_0_2.bak -rw-r-----. 1 yashan yashan 67108864 Nov 23 10:57 data_5_0_3.bak --ctrl文件为备份的控制文件。 --data文件为备份的数据文件。 --arch文件为备份的归档文件。 --当业务中存在LSC表时,bucket_5_0_0.bak/下存放LSC表的可变数据文件。 --backup_profile文件为备份集元数据文件,用于备份集和数据库版本的校验,备份集恢复关键信息等。 --backup_filelist文件用于校验备份集数据的完整性正确性 SQL> select * from dba_backup_set; RECID# START_TIME COMPLETION_TIME TYPE INCREMENT_LEVEL INCREMENT_ID# PATH TAG TRUNC_LSN COMPRESS_LEVEL INPUT_BYTES OUTPUT_BYTES RCY_BEGIN_ASN RCY_BEGIN_LFN RCY_END_ASN RCY_END_LFN COMPRESS_ALGO ENCRYPT_ALGO --------------------- -------------------------------- -------------------------------- ------------- --------------- ------------- ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------- -------------- --------------------- --------------------- ------------- --------------------- ------------ --------------------- ------------- ------------ 1 2023-11-23 2023-11-23 FULL 0 0 /home/yashan/yasdb_data/db-1-1/backup/bak_2023112310570880 bak_2023112310570880 780791 NONE 733859840 733859840 31 768224 31 768224 NONE NONE 1 row fetched.

整个动作比较简单,数据量大的情况下,需要注意备份的时段,对系统肯定有资源上的消耗,不单是YashanDB。一般会在业务低峰期进行备份操作。

2.1.2 通过SQL命令恢复数据库

官方文档上有一个案例,直接毁坏了当前数据库的数据文件,然后使用备份集来恢复。整个流程也很顺畅,这是因为,同一个环境,关于环境配置、用户设置、目录等等都和“原库”一致,所以省去了很多环境准备的工作。

[yashan@yashandb1 ~]$ 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> shutdown immediate; Succeed. SQL> exit [yashan@yashandb1 ~]$ cd $YASDB_DATA [yashan@yashandb1 db-1-1]$ ll total 12 drwxr-----. 2 yashan yashan 4096 Nov 23 10:57 archive drwxr-----. 3 yashan yashan 34 Nov 23 10:57 backup -rw-r-----. 1 yashan yashan 6144 Nov 23 10:57 backup_filelist.tmp drwxr-----. 2 yashan yashan 23 Nov 21 11:49 config drwxr-----. 2 yashan yashan 6 Oct 27 17:37 data drwxr-----. 2 yashan yashan 185 Nov 23 08:49 dbfiles drwxr-----. 5 yashan yashan 60 Oct 27 17:37 diag drwxr-----. 3 yashan yashan 20 Oct 27 17:37 external drwxr-----. 2 yashan yashan 57 Nov 17 14:24 instance drwxr-----. 3 yashan yashan 19 Oct 27 17:37 local_fs drwxr-----. 8 yashan yashan 105 Oct 27 17:37 log drwxrwxr-x. 2 yashan yashan 6 Nov 17 14:24 tmp [yashan@yashandb1 db-1-1]$ cd dbfiles/ [yashan@yashandb1 dbfiles]$ ll total 1450584 -rw-r-----. 1 yashan yashan 25370624 Nov 23 22:05 ctrl1 -rw-r-----. 1 yashan yashan 25370624 Nov 23 22:05 ctrl2 -rw-r-----. 1 yashan yashan 25370624 Nov 23 22:05 ctrl3 -rw-r-----. 1 yashan yashan 67108864 Nov 23 21:28 dwf -rw-r-----. 1 yashan yashan 134217728 Nov 23 02:00 redo1 -rw-r-----. 1 yashan yashan 134217728 Nov 23 02:00 redo2 -rw-r-----. 1 yashan yashan 134217728 Nov 23 10:57 redo3 -rw-r-----. 1 yashan yashan 134217728 Nov 23 22:05 redo4 -rw-r-----. 1 yashan yashan 67108864 Nov 17 14:24 swap -rw-r-----. 1 yashan yashan 67108864 Nov 23 21:28 sysaux -rw-r-----. 1 yashan yashan 67108864 Nov 23 21:28 system -rw-r-----. 1 yashan yashan 67108864 Nov 18 02:00 temp -rw-r-----. 1 yashan yashan 469762048 Nov 23 21:28 undo -rw-r-----. 1 yashan yashan 67108864 Nov 23 17:07 users #怕恢复失败,这里将数据文件移走即可,不用删除 [yashan@yashandb1 dbfiles]$ mkdir ~/tmp [yashan@yashandb1 dbfiles]$ mv ./* ~/tmp/ [yashan@yashandb1 dbfiles]$ ll total 0 #开启数据库到nomount状态 [yashan@yashandb1 dbfiles]$ yasboot cluster start -c yashandb -m nomount type | uuid | name | hostid | index | status | return_code | progress | cost ----------------------------------------------------------------------------------------------------------- task | 8ea0dfd60a06089a | StartYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 2 ------+------------------+-------------------+--------+----------+---------+-------------+----------+------ task completed, status: SUCCESS #查看数据库状态 [yashan@yashandb1 dbfiles]$ yasboot cluster status -c yashandb -d hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path ------------------------------------------------------------------------------------------------------------------------------------------------ host0001 | db | 1-1:1 | 2500 | started | unconnected | - | 192.168.3.176:1688 | /home/yashan/yasdb_data/db-1-1 ----------+-----------+--------+------+-----------------+-----------------+---------------+--------------------+-------------------------------- #登录数据库,恢复 [yashan@yashandb1 dbfiles]$ 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> select status from v$instance; STATUS ------------- STARTED 1 row fetched. SQL> ! echo $YASDB_DATA /home/yashan/yasdb_data/db-1-1 SQL> ! ls -l /home/yashan/yasdb_data/db-1-1/backup total 4 drwx------. 3 yashan yashan 4096 Nov 23 10:57 bak_2023112310570880 SQL> restore database from '/home/yashan/yasdb_data/db-1-1/backup/bak_2023112310570880'; Succeed. SQL> recover database; Succeed. SQL> alter database open; Succeed. SQL> select status from v$instance; STATUS ------------- OPEN 1 row fetched. SQL> conn skye/123456 Connected to: YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux SQL> select count(*)from user_objects; COUNT(*) --------------------- 4 1 row fetched.

关于增备、加密、压缩等能力暂不深究。

下面再来学习学习yasrman工具,我理解应该对标的是Oracle的rman。

2.1.3 通过yasrman备份

看了官方文档,发现语法调用上基本跟BACKUP DATABASE命令比较像,它可以进行远程备份,且可以选择性将备份集保存在yasrman工具端或数据库服务端。

准备了另外一台虚拟机,部署了另外一套YashanDB,主要使用它所带的yasrman工具。
image.png

下面测试通过yasrman(192.168.3.186)上,远程备份数据库(192.168.3.176),并将备份集保存在yasrman机器上(3.186)上。

1.创建catalog(需要使用绝对路径)

[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'create catalog' -D ./catalog [Node 0]YAS-06009 invalid path: ./catalog, reason: catalog must be a absolute path [yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'create catalog' -D /home/yashan2311100/catalog create catalog successfully #当前目录生成了一个catalog文件 [yashan2311100@yashandb ~]$ ll total 0 drwx------ 3 yashan2311100 yashan2311100 77 Nov 27 09:16 catalog drwxrwxr-x 11 yashan2311100 yashan2311100 211 Oct 25 11:51 soft drwxrwxr-x 4 yashan2311100 yashan2311100 42 Oct 25 11:52 yashandb [yashan2311100@yashandb ~]$ cd catalog [yashan2311100@yashandb catalog]$ ll total 4 drwx------ 2 yashan2311100 yashan2311100 6 Nov 27 09:16 backup -rw-r----- 1 yashan2311100 yashan2311100 512 Nov 27 09:16 catalog.dwf -rw-r----- 1 yashan2311100 yashan2311100 0 Nov 27 09:16 catalog.meta -rw-r----- 1 yashan2311100 yashan2311100 0 Nov 27 09:16 config.ini

image.png

2.配置config(也就是设置执行备份时一些参数,比如并行度、压缩、路径等)

[yashan2311100@yashandb catalog]$ cd [yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'show all' +---------------------------+-----------+----------------+ | NAME | DEFAULT | VALUE | +---------------------------+-----------+----------------+ | PARALLELISM | 2 | 2 | | SECTION SIZE | 134217728 | 134217728 | | COMPRESSION ALGORITHM | NONE | NONE | | COMPRESSION LEVEL | LOW | LOW | | DEST | SERVER | SERVER | +---------------------------+-----------+----------------+ --这里的DEST默认是将备份集保存在SERVER端,将它调整到CLIENT端,也就是保存在yasrman这边 [yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'configure DEST CLIENT' configure successfully [yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'show all' +---------------------------+-----------+----------------+ | NAME | DEFAULT | VALUE | +---------------------------+-----------+----------------+ | PARALLELISM | 2 | 2 | | SECTION SIZE | 134217728 | 134217728 | | COMPRESSION ALGORITHM | NONE | NONE | | COMPRESSION LEVEL | LOW | LOW | | DEST | SERVER | CLIENT | +---------------------------+-----------+----------------+

3.执行备份,这里跟直接使用命令备份不太一样,必须要指定TAG。

[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'backup database full' [Node 0]YAS-04115 "TAG" expected but missing [yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c "backup database full tag 'full20231127' " backup successfully [yashan2311100@yashandb ~]$ ll catalog/backup/ total 0 drwx------ 2 yashan2311100 yashan2311100 295 Nov 27 11:37 full20231127

BACKUP DATABASE没有说tag必选指定,也没说可选,可能我没找到?但是前面使用命令备份的时候,没有指定tag也备份成功了…
image.png
image.png

4.查看备份集相关信息
通过list backup可以查看

[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c "list backup" Group: tag: full20231127, format: /home/yashan2311100/catalog/backup/full20231127, connect url: 192.168.3.176:1688, nodeCount: 1, distribution: FALSE, isClient: TRUE, offset: 0 backup path: /home/yashan2311100/catalog/backup/full20231127

在原库dba_backup_set也可以查看
image.png

list命令仅列出指定的catalog文件中存在的备份集元数据信息,因为catalog不会与数据库自动同步备份元信息,可能与数据库中DBA_BACKUP_SET视图内容不同。

备份动作就完成了。还有一个点需要注意,如果config里面配置了参数,然后command里面又指定了相关值,command的优先级更高。

恢复的动作这里不做测试了。

2.1.5 yasbak

在找工具相关的文档的时候,又发现了还有一个备份工具,叫yasbak。看描述是为了做第三方备份工具对接做准备的,这个很不错,一般对于企业来说会有多套数据库系统需要管理,备份能集中管理能很大程度上减轻运维工作量。这里就不深究了,看未来是否有机会在第三方备份工具上体验到。
image.png

2.2 Flashback 闪回

YashanDB提供了Flashback(闪回)的能力。整个完整的语法在这:FLASHBACK

YashanDB 闪回表(Flashback table)与Oracle 对比

3. 个人感受

  1. 有Oracle的运维基础,上手YashanDB确实比较容易。
  2. 其实有些细节文档都有写,但是具备了一定的经验往往容易忽略掉这些细节,自己相当然的操作,这个习惯还是不太好,得改

比如官方文档已经写了,catalog的创建需要使用绝对路径,自己仅大概看了个语法,就按照“经验”随意使用相对路径创建了
image.png

  1. 备份恢复这块的能力项还是挺多的,但是内容写的有些紧凑。看看后面是否会构建多维度的官方书籍以供系统性学习。
    image.png
  2. 闪回truncate的能力着实让人眼前一亮,看来确实做了符合用户需求的个性化设计。
  3. 学的有点乱,测得有点乱,写的也有点乱。持续改进吧。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论