OceanBase 数据备份与恢复
数据备份
1、备份配置
# 进入 shuncom 租户 root 用户控制台
obclient -P3306 -uroot@shuncom -p
# 配置日志归档目的端
ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=file:///home/shuncom/obbackup/archive';
# 开启归档模式
ALTER SYSTEM ARCHIVELOG;
# 配置数据备份目的端
ALTER SYSTEM SET DATA_BACKUP_DEST='file:///home/shuncom/obbackup/data';
# 发起全量数据备份(需要等待日志归档任务的 STATUS 为 DOING)
ALTER SYSTEM BACKUP DATABASE;
# 发起增量备份(当前不需要执行)
ALTER SYSTEM BACKUP INCREMENTAL DATABASE;
2、设置自动清理策略
ALTER SYSTEM ADD DELETE BACKUP POLICY 'default' RECOVERY_WINDOW '3d';
3、设置定时全量备份任务,执行以下脚本
# 创建备份脚本
mkdir /home/shuncom/bin
echo "/usr/bin/obclient -P3306 -uroot@shuncom -p'Sz_clighting' -e 'ALTER SYSTEM BACKUP DATABASE'" > /home/shuncom/bin/obbackup
sudo chown root.root /home/shuncom/bin/obbackup
sudo chmod 700 /home/shuncom/bin/obbackup
# 添加定时任务
sudo crontab -e
30 12 */2 * * /home/shuncom/bin/obbackup
附:
1、日志归档管理
# 进入 shuncom 租户 root 用户控制台
obclient -P3306 -uroot@shuncom -p
# 查看租户归档进度
SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG\G;
# 查看租户归档历史
SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG_SUMMARY\G;
# 暂停归档
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='DEFER';
# 启动归档
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='ENABLE';
# 关闭归档模式
ALTER SYSTEM NOARCHIVELOG;
# 清空归档路径(要求租户当前的归档状态为 STOP)
ALTER SYSTEM SET LOG_ARCHIVE_DEST='';# 查看 Piece 信息
SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG_PIECE_FILES\G;
2、数据备份管理
# 查看数据备份进度
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOBS\G;
# 查看数据备份结果
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOB_HISTORY\G;
# 停止备份
ALTER SYSTEM CANCEL BACKUP;
# 清空备份路径
ALTER SYSTEM SET DATA_BACKUP_DEST='';
# 查看备份相关参数
SELECT * FROM oceanbase.CDB_OB_BACKUP_PARAMETER\G;
3、清理策略管理
# 查看清理策略
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_POLICY;
# 查看备份清理进度
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_JOBS\G;
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_TASKS\G;
# 查看备份清理结果
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_JOB_HISTORY\G;
SELECT * FROM oceanbase.DBA_OB_BACKUP_DELETE_TASK_HISTORY\G;
# 停止清理备份
ALTER SYSTEM DROP DELETE BACKUP POLICY 'default';
4、数据恢复
按表恢复
# 恢复前准备
a、 如果是将库恢复到前一个时间点(即 rulr_things 已存在),需要先将当前备份停止,并将库备份并重建
1) 停止备份和清理策略
sudo crontab -e
obclient -P3306 -uroot -p
ALTER SYSTEM CANCEL BACKUP TENANT = shuncom;
ALTER SYSTEM NOARCHIVELOG TENANT = shuncom;
ALTER SYSTEM DROP DELETE BACKUP POLICY 'default' TENANT shuncom;
ALTER SYSTEM SET LOG_ARCHIVE_DEST='';
ALTER SYSTEM SET DATA_BACKUP_DEST='';
注:
恢复完成后,需要重新开启备份和清理策略(清空或重命令当前的备份目录)
2) 备份库
shell 控制台执行
mkdir /home/shuncom/sql_dump
mysqldump -h ip_address -P 3306 --skip-add-drop-table --init-sql="SET SESSION ob_query_timeout = 1000000000;" -u root@shuncom -p \
rulr_things > /home/shuncom/sql_dump/rulr_things_dump_01.sql
3) 重建数据库(先删除原库,再建新库)
obclient -P3306 -uroot@shuncom -pDROP DATABASE rulr_things;
CREATE DATABASE rulr_things DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
grant all on rulr_things.* to "shuncom"@"%";
# 进入 sys 租户管理
obclient -P3306 -uroot -p
# 创建恢复辅助租户资源
创建资源单元
CREATE RESOURCE UNIT unit_assistant MAX_CPU 2, MEMORY_SIZE = '4G', LOG_DISK_SIZE= '4G', MAX_IOPS 10240, MIN_IOPS=10240;
注:(以 4 核 20G 为例)
当前资源不够时,需要先缩小 shuncom 租户的资源规格(恢复完成后再还原资源规格)(需要查看并记录当前的资源规格)
ALTER RESOURCE UNIT shuncom_unit MAX_CPU 1, MIN_CPU 1, MEMORY_SIZE '4G',LOG_DISK_SIZE '10G';
还原:
ALTER RESOURCE UNIT shuncom_unit MAX_CPU 3, MIN_CPU 3, MEMORY_SIZE '10G',LOG_DISK_SIZE '16G';
创建资源池
CREATE RESOURCE POOL pool_assistant unit = 'unit_assistant', unit_num = 1, zone_list = ('zone1');
# 恢复 rulr_things 所有表
ALTER SYSTEM
RECOVER TABLE rulr_things.*
TO TENANT shuncom
FROM 'file:///home/shuncom/obbackup/data,file:///home/shuncom/obbackup/archive'
UNTIL TIME='2024-11-30 00:00:00'
WITH 'pool_list=pool_assistant';
# 查看恢复进度
SELECT * FROM oceanbase.CDB_OB_RECOVER_TABLE_JOBS\G;
# 查看恢复结果
SELECT * FROM oceanbase.CDB_OB_RECOVER_TABLE_JOB_HISTORY\G;
# 清理资源
DROP RESOURCE POOL pool_assistant;
DROP RESOURCE UNIT unit_assistant;
# 取消按表恢复(如果有需求)
ALTER SYSTEM CANCEL RECOVER TABLE shuncom;
# 恢复结果分析
a、部分表名的大小写会变化,如 quartz 相关表会从大写变小写(数据库默认是大小写不敏感,影响可以忽略)
b、部分表的外键丢失,影响未知,如:
QRTZ_BLOB_TRIGGERS
QRTZ_CRON_TRIGGERS
QRTZ_SIMPLE_TRIGGERS
QRTZ_SIMPROP_TRIGGERS
QRTZ_SUNRS_TRIGGERS
5、NFS 安装与配置
系统需要支持 RPM 包管理(如 CentOS、Kylinv10)
# 上传 nfs 相关包
nfs-utils-2.5.1-8.p01.ky10.x86_64.rpm
rpcbind-1.2.5-5.p01.ky10.x86_64.rpm
# 安装 nfs
rpm -ivh *.rpm
# 查看安装结果
rpm -qa | grep nfs-utils
# 启动 nfssystemctl start nfs-server.service
systemctl enable nfs-server.service
a、server 端配置
# 创建共享目录
mkdir /home/shuncom/obbackup
# 共享配置
sudo vim /etc/exports
增加以下内容
/home/shuncom/obbackup/ 192.168.30.0/24(rw,sync,no_root_squash)
# nfs 参数配置
sudo vim /etc/sysconfig/nfs
增加以下内容
RPCNFSDCOUNT=8
RPCNFSDARGS="-N 2 -N 3 -U"
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
# 重启 nfs
sudo systemctl restart nfs-server.service
# 设置 Slot Table
sudo vim /etc/sysctl.conf
增加以下内容
sunrpc.tcp_max_slot_table_entries=128
执行以下命令
sudo sysctl -w sunrpc.tcp_max_slot_table_entries=128
查看设置是否生效
cat /proc/sys/sunrpc/tcp_max_slot_table_entries
b、client 端(oceanbase)配置
# 设置 Slot Table
sudo vim /etc/sysctl.conf
增加以下内容
sunrpc.tcp_max_slot_table_entries=128
执行以下命令
sudo sysctl -w sunrpc.tcp_max_slot_table_entries=128
查看设置是否生效
cat /proc/sys/sunrpc/tcp_max_slot_table_entries
# 挂载远程目录
sudo mount -tnfs4 -o rw,nfsvers=4.1,sync,lookupcache=positive,hard,timeo=600,wsize=1048576,rsize=1048576,namlen=255 \
192.168.30.96:/home/shuncom/obbackup /home/shuncom/obbackup
No Comments