如何使用 minio 完成OceanBase社区版的归档和备份

OceanBase社区版4.2.1BP7版本起,OceanBase的归档与备份功能开始兼容AWS S3及S3协议的对象存储服务,因此,许多用户选择采用 MinIO 作为其备份存储介质。因为 MinIO 兼容AWS S3云存储服务接口,成为了一个轻便的服务选项。

本文将介绍如何部署 minio ,以及如何使用 minio 来做OceanBase的归档和备份。

关于 minio 的介绍,可参考官方文档:minio官方文档

minio 安装部署

minio 的部署有多种方式,本文介绍的是 Single-Node Single-Drive 的部署方式,其他部署方式,可参考官方文档,操作系统是 CentOS 7.9。

首先下载软件,并执行安装:

复制代码
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240826153307.0.0-1.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm

创建用户,并授权,这里为了方便测试,直接使用了 root 用户,并且手动创建了一个目录 /obdata/minio 用作存储路径,这步可跳过

复制代码
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown minio-user:minio-user /mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4

创建配置文件,在/etc/default目录下,创建 minio 文件:

复制代码
$vim /etc/default/minio
# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment.

MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="xxxxxx"

# MINIO_VOLUMES sets the storage volumes or paths to use for the MinIO server.
# The specified path uses MinIO expansion notation to denote a sequential series of drives between 1 and 4, inclusive.
# All drives or paths included in the expanded drive list must exist *and* be empty or freshly formatted for MinIO to start successfully.

MINIO_VOLUMES="/obdata/minio"

# MINIO_OPTS sets any additional commandline options to pass to the MinIO server.
# For example, `--console-address :9001` sets the MinIO Console listen port
MINIO_OPTS="--console-address :9002 --address :9001"
  • MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD: 分别代表minio服务的最高权限的账号和密码,可用于后续登陆页面和调用 API ;
  • MINIO_VOLUMES:指定给 minio 服务使用的存储卷或者路径;
  • MINIO_OPTS:启动 minio 的参数。这里修改了页面登录的端口为9002,以及 API 端口为9001。

在使用 rpm 安装之后,默认会创建一个 systemd 文件在 /usr/lib/systemd/system/minio.service,不过这里需要修改一些参数,因为使用root启动minio,所以User和Group都改成了root。

复制代码
$vim /usr/lib/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
Type=notify

WorkingDirectory=/usr/local

User=root
Group=root
# ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576

# Turn-off memory accounting by systemd, which is buggy.
MemoryAccounting=no

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutSec=0

SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

启动 minio,并查看状态

复制代码
# 启动 minio
sudo systemctl start minio.service
# 查看 minio 状态
sudo systemctl status minio.service
# 查看 minio 日志
journalctl -f -u minio.service
# 设置开机自启动
sudo systemctl enable minio.service

至此,minio的部署工作已经完成,接着,需要在页面上登陆 minio,然后创建 Buckets 和 Path,用户后续的归档和备份

创建Buckets

通过IP:Port访问 minio,使用上面 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 指定的账户名和密码,访问 minio 服务,在 Buckets 栏创建新的 Buckets。

Buckets 创建完成之后,点击进入 Buckets,再创建 Path,这里分别创建了obtest 和 obtestbak两个Path,分别用户归档和数据库的备份测试。

配置完成之后,接着就是进入到OceanBase数据库,开启归档和备份。

设置归档

归档和备份,可以使用sys租户,也可以登录到具体要设置的租户中执行相应的设置,本文都是进入sys租户,为 obtest 租户进行的配置。

首先设置归档并发度(可选)

复制代码
ALTER SYSTEM SET log_archive_concurrency = 2 TENANT = obtest;

接着设置归档目的端

复制代码
ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=s3://obbak/obtest?host=11.161.xxx.xxx:9001&access_id=admin&access_key=xxxxxx' TENANT = obtest;

开启归档任务

复制代码
ALTER SYSTEM ARCHIVELOG TENANT = obtest;

查看归档状态

复制代码
obclient [oceanbase]> SELECT TENANT_NAME, LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_TYPE = 'USER'\G;
*************************** 1. row ***************************
TENANT_NAME: obtest
   LOG_MODE: ARCHIVELOG
*************************** 2. row ***************************

可以看到归档已经开启,并且在 minio 对应的路径下,已经创建出了归档的文件

设置备份

设置备份目的端

复制代码
ALTER SYSTEM SET DATA_BACKUP_DEST='s3://obbak/obtestbak?host=11.161.xxx.xxx:9001&access_id=admin&access_key=xxxxxx' TENANT = obtest;

设置租户的备份并发度(可选)

复制代码
ALTER SYSTEM SET ha_low_thread_score = 2 TENANT = obtest;

发起全量备份

复制代码
ALTER SYSTEM BACKUP TENANT = obtest;

查看备份结果

复制代码
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY order by START_TIMESTAMP desc limit 1\G;
*************************** 1. row ***************************
          TENANT_ID: 1002
             JOB_ID: 2915
        INCARNATION: 1
      BACKUP_SET_ID: 66
INITIATOR_TENANT_ID: 1
   INITIATOR_JOB_ID: 66
 EXECUTOR_TENANT_ID: 1002
    PLUS_ARCHIVELOG: OFF
        BACKUP_TYPE: FULL
          JOB_LEVEL: USER_TENANT
    ENCRYPTION_MODE: NONE
             PASSWD:
    START_TIMESTAMP: 2024-09-10 19:51:18.713433
      END_TIMESTAMP: 2024-09-10 19:54:12.258598
             STATUS: COMPLETED
             RESULT: 0
            COMMENT:
        DESCRIPTION:
               PATH: s3://obbak/obtestbak?host=11.161.xxx.xxx:9001
1 row in set (0.010 sec)

另外,在 minio 对应的目录下,可以看到备份生成的文件

以上就是 OceanBase 在推出支持兼容 S3 协议的对象存储之后,用 minio 测试 OceanBase 归档和备份的整个过程,如果要在实际生产中使用,建议 minio 使用分布式模

相关推荐
秋94 天前
OceanBase与GreatSQL哪个更适合高并发场景?
oceanbase
秋94 天前
OceanBase与GreatSQL在Java应用中的性能调优方法有哪些?
java·开发语言·oceanbase
摇曳的精灵8 天前
OceanBase学习
学习·oceanbase
p@nd@9 天前
DM删除用户后的不完全恢复测试
数据库·达梦数据库·备份还原·备份恢复
与数据交流的路上10 天前
Oceanbase-failed to merge partition
oceanbase
Navicat中国10 天前
Navicat 企业版数据传输是否支持达梦 → OceanBase迁移?数据迁移报错
数据库·oceanbase·达梦·navicat·数据迁移·数据传输
与数据交流的路上10 天前
oceanbase-oms的升级
oceanbase
Navicat中国11 天前
干货整理 | Navicat 高频技术问题 Q&A:PostgreSQL、GaussDB、OceanBase、达梦、MongoDB、金仓、MySQL、麒麟等
postgresql·oceanbase·gaussdb
GottdesKrieges14 天前
OceanBase租户级物理恢复
linux·oceanbase
老纪的技术唠嗑局17 天前
4.15 bubseek —— 让 Agent 的足迹,变成团队的洞察
大数据·数据库·sql·游戏·ai·oceanbase·sql优化