#S3适配器
S3适配器(libyas_xbsa_s3.so)是基于XBSA标准接口在S3兼容对象存储上的具体实现。通过S3适配器,用户可以将数据库备份直接写入AWS S3、阿里云OSS、MinIO、SeaweedFS等支持S3协议的对象存储服务。
S3适配器继承XBSA接口定义,并将XBSA的操作转换为S3 API调用,实现将备份数据存储到S3兼容对象存储中。
# 环境准备
使用yasrman的XBSA-S3备份功能前,需要完成以下准备工作。
当前数据库和yasrman工具的版本为v23.4.15.100及以上,且yasrman工具的安装路径下存在
lib/libyas_xbsa_s3.so动态库文件。已获取支持S3协议的对象存储服务的以下信息,并确保网络通畅。
- S3服务地址(URL),例如
http://192.168.1.100:9000 - 存储桶名称,例如
yashan-backup - Access Key(访问密钥ID),例如
admin - Secret Key(访问密钥密码),例如
MinioStrongPassword123 - 区域(部分S3服务需要),例如
us-east-1
- S3服务地址(URL),例如
# PARAMS参数配置
通过PARAMS参数指定S3适配器配置信息:
xbsa_library_path:XBSA动态链接库的绝对路径或库名称,必须为Linux动态链接库token_value:调用BSAInit接口时的token入参,S3适配器使用固定值NULLENV参数:键值对格式的环境参数
S3适配器ENV参数如下表所示:
| 参数名 | 必填 | 说明 | 示例 |
|---|---|---|---|
| S3_ENDPOINT | 是 | S3服务地址(URL) | http://192.168.1.100:9000 |
| S3_BUCKET | 是 | 存储桶名称 | yashan-backup |
| S3_AK | 是 | Access Key(访问密钥ID) | admin |
| S3_SK | 是 | Secret Key(访问密钥密码) | MinioStrongPassword123 |
| S3_REGION | 否 | 区域(部分S3服务需要) | us-east-1 |
# 备份全库
备份会消耗一定的系统和数据库资源,请根据业务负载酌情选择备份窗口。当待备份对象的数据量大或希望提升备份效率时,可适当增大并发度,并发度默认为2。
通过yasrman工具的XBSA服务备份必须将备份集文件存放至工具端(DEST CLIENT),并通过PARAMS指定S3对象存储服务相关信息。
# 全量备份
全量备份是指对某一时间点上的所有数据进行完全复制,不依赖之前的备份集。
$ yasrman sys/********@192.168.1.2:1688 -c "backup database tag 's3_full_1' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 增量备份
# Level 0
$ yasrman sys/********@192.168.1.2:1688 -c "backup database incremental level 0 tag 's3_incr_base' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# Level 1
$ yasrman sys/********@192.168.1.2:1688 -c "backup database incremental level 1 tag 's3_incr_1' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 备份表空间
表空间备份仅适用于单机部署,若为主备高可用环境则只能连接主库执行相关操作。
表空间备份时,不会备份对应的归档文件、BUCKET文件。
$ yasrman sys/********@192.168.1.2:1688 -c "backup tablespace user tag 's3_tbs_user' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 备份归档日志
备份归档日志适用于单机部署和共享集群/分布式集群部署。
$ yasrman sys/********@192.168.1.2:1688 -c "backup archivelog all tag 's3_arch' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 备份集管理
# 查看备份集信息
恢复前可以先查看S3中备份集的详细信息:
$ yasrman sys/********@192.168.1.2:1688 -c "list backup tag 's3_full_1'" -D /home/yashan/catalog
# 删除备份集
删除备份集操作会删除S3存储桶中以指定TAG为前缀的所有对象。例如,删除s3_full_1会删除所有s3_full_1/*路径下的备份文件。
$ yasrman sys/********@192.168.1.2:1688 -c "delete backupset tag 's3_full_1' params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
delete backupset successfully
# 恢复整库
# 完整恢复整库
$ yasrman sys/********@192.168.1.2:1688 -c "restore database from tag 's3_full_1' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 基于时间点恢复整库
# 指定时间戳
$ yasrman sys/********@192.168.1.2:1688 -c "restore database from tag 'full_1' until time '2023-11-13' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 指定SCN
$ yasrman sys/********@192.168.1.2:1688 -c "restore database from tag 'full_1' until scn 499833430256541696 dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 恢复加密备份
如果备份时使用了加密,恢复时需要提供解密密码:
$ yasrman sys/********@192.168.1.2:1688 -c "restore database from tag 's3_full_enc' decryption 123456 dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 恢复表空间
表空间恢复仅适用于单机部署,恢复前需确保目标表空间处于OFFLINE状态。
$ yasrman sys/********@192.168.1.2:1688 -c "restore tablespace user from tag 's3_tbs_user' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
# 恢复归档日志
$ yasrman sys/********@192.168.1.2:1688 -c "restore archivelog all from tag 'arch_bak002' dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog
$ yasrman sys/********@192.168.1.2:1688 -c "restore archivelog sequence between 10 and 20 dest client params 'XBSA_LIBRARY=/home/yashan/lib/libyas_xbsa_s3.so, TOKEN=NULL, ENV=(S3_ENDPOINT=http://192.168.1.100:9000,S3_BUCKET=yashan-backup,S3_AK=admin,S3_SK=MinioStrongPassword123)'" -D /home/yashan/catalog

