目录
前言
一、物理备份类型
1、冷备
2、热备
二、sys_rman工具介绍
1、sys_rman 功能
2、使用场景
3、sys_rman 工具需要使用
三、备份初始化
1、准备工作
2、sys_backup.conf配置文件部分参数解析
3、设置 system 用户免密登录
4、修改归档参数
5、执行初始化脚本
6、sys_backup 脚本使用参数
7、sys_backup 脚本注意事项
四、执行物理备份
1、执行全量备份
2、执行差异备份
3、执行增量备份
4、查看备份集信息显示备份文件的类型
五、执行完全恢复
1、模拟数据库灾难损坏
2、开始进行完全恢复
3、验证恢复结果
六、执行不完全恢复
1、基于时间的不完全恢复
2、基于事务 ID的不完全恢复
七、恢复物理备份到新的目录
1、在原库创建表空间和对象
2、在原库执行物理备份
3、恢复备份到新的集簇目录中
4、修改新集簇下的监听端口并启动实例
八、管理和维护备份集
1、使用临时保留策略删除过期备份
2、配置永久保留策略并删除过期备份
3、手动删除指定备份集
九、检查备份和归档配置可用性
总结:
物理备份的优点和缺点
1、优点
2、缺点
物理备份指的是将数据库中的相关物理文件转储到指定的备份存储中,KES 支持 sys_rman、sys_basebackup、cp 等多种物理备份方法。这里介绍最常用的物理备份工具 sys_rman 的使用方法。
(1) 冷备也叫文件系统级别备份
(2) 备份时需要关闭实例,然后利用操作系统命令将整个集簇主数据目录备份到指定的备份路径
(3) 还原时也必须关闭实例,然后将备份文件复制到原始数据文件路径中
(4) 冷备不支持对象级备份和还原,只能备份和还原整个数据库集簇
(1) 热备也叫在线备份
(2) 热备依赖于数据文件备份和 WAL 日志的连续归档,因此数据库必须运行在归档模式下
(3) 备份时不需要关闭实例,还原时需要关闭实例
(4) 可以使用工具 sys basebackup、sys rman backup 来执行备份和还原(5) 这种备份还原时支持读取 WAL 归档日志执行完全恢复和 PITR 恢复
(1) 用于数据库物理备份和还原以及管理备份集的工具
(2) 联机备份,数据库服务关闭状态下执行 sys rman 会失败
(3) 操作简单,单个命令即可完成备份和恢复
(4) 支持全量备份、差异备份和增量备份
全量备份:无论之前是否存在备份,都完整备份整个数据库集簇中的内容
差异备份:每次的备份只需备份与前一次全量备份相比增加或者被修改的内容
增量备份: 每次的备份只需备份与前一次全量、差异、增量备份相比增加或者被修改的内
容(5) 根据保留策略自动删除已过期的备份文件
(6) 可以自动读取所需的备份集、在线日志、归档日志来实现完全恢复和不完全恢复(7) 是基于文件块级别的备份,备份速度快
(1) 可用于数据库文件损坏等物理错误场景下的数据恢复
(2) 可用于基于时间点或事务号的数据恢复(PITR)
(3) 可用于在大型系统中执行整库级的数据恢复
(4) 可用于将整个数据库集簇恢复到另一个新的数据库实例中
sys_backup.sh 脚本初始化后才能使用,初始化会做如下设置:
参数 | 说明 |
archive_mode |
archive_mode 参数只能在服务器启动时设置,当 wal level=minimal 时,无法启动归档此参数可设置的值有 off、on、always。 |
archive_ command |
这个参数指定了将在线 WAL 文件转储到归档文件的方法。 此参数可设置的值有 minimal、replica (默认)、logical。 |
wal_level |
sys_rman 要求数据库参数 wal_level 不能配置为 minimal |
(1) 自动创建并初始化备份目录。
创建备份目录,存放备份文件。
创建归档目录,存放归档文件。
自动生成 sys_rman.conf 配置文件,设置数据库集簇所在目录,监听端口,数据库备份的用户等配置信息。
(2)设置定时备份任务。
sys_backup.sh 会自动设置定时备份任务,包括全量备份和增量备份,备份的频率需要在sys backup.sh 脚本的配置文件中指定。
(3)自动完成一次全量备份。
sys_backup.sh 的配置文件是 sys_backup.conf,位于“安装目录/Server/share”目录中,在执行 sys_backup.sh 脚本时,会优先寻找“安装目录/Server/bin/sys_backup.conf”,如果找不到,则会去找“安装目录/Server/share/sys_backup.conf”,因此可以把 share 目录中的配置文件复制到 bin目录中进行修改。
(1)_target_db_style="single":表示备份单机环境,而非集群环境。
(2)_one_db_ip="127.0.0.1": 设置要备份的主机的 IP,本例中为本机 IP
(3)_repo_ip="127.0.0.1": 设置备份文件的目标存放位置的 IP。
(4)_stanza_name="kingbase": 设置标签为 kingbase。
(5)_os_user_name="kingbase": 指定运行 kes 的主机上的 os 用户
(6)_repo_path="/backup/rman": 指定存放备份文件和归档日志文件的目录。
(7)_repo_retention_full_count=5:指定备份集保留策略,本例中为保留 5份
(8)_crond_ful1_days=7: 指定全量备份的频率,本例中是每 7 天做一次全量备份。
(9)_crond_diff_days=0: 指定差异备份的频率,本例中0表示不做备份。
(10)_crond_incr_days=1:指定增量备份的频率,本例中是每天备份。
(11)_crond_full hour=2: 指定全量备份的时间,本例中是凌晨 2 点。
(12)_os_ip_cmd="/usr/sbin/ip":操作系统 ip 命令的路径。
(13)_single_data_dir="/data":数据库目录的路径。
(14)_single_bin_dir="/KingbaseES/V8/Server/bin": 数据库软件的 bin 目录。
(15)_single_db_user="system": 登录数据库的用户名称。
(16) single_db_port=54321":数据库监听的端口。
在 sys_hba.conf 文件中添加以下内容
all host system 127.0.0.1/32 trust
将以下参数设置添加到 kingbase.conf 文件的末尾,并重启数据库使参数生效,在初始化过程中 archive command 参数会被自动赋值
archive_mode = on
archive_command = ' '
1、执行 sys_backup.sh init 命令,按要求输入 root 用户密码
sys_backup.sh init
2、查看备份目录,初始化过程会自动创建备份目录结构
ls -l /backup/rman/
3、查看 sys_rman.conf 配置文件
cat /backup/rman/sys_rman.conf
4、登录数据库查看归档参数
ksql test system
show archive_mode
5、查看备份集,初始化过程会自动做一次全量备份
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
1、start:启动定时备份任务,系统会自动添加定时备份任务
sys_backup.sh start
2、pause: 暂停定时备份任务
sys_backup.sh pause
3、unpause:恢复定时备份任务
sys_backup.sh unpause
4、stop:取消定时备份任务
sys_backup.sh stop
1、如果 sys_backup.conf 中关于数据库的信息有所修改,执行 sys_backup.sh init 重新初始化备份功能
2、如果 sys_backup.conf 中关于备份周期和时间点的信息有所修改,执行 sys_backup.sh start 重新配置自动备份周期
sys_rman --config=/backup/rman/sys_rman.conf \
--stanza=kingbase \
--archive-copy \
--type=full backup参数解析:
(1)--config=/backup/rman/sys_rman.conf: 指定配置文件
(2)--stanza=kingbase: 指定标签,通过标签可以在配置文件中找到对应的参数配置
(3)--archive-copy: 指定备份时同时备份恢复所需的 WAL 段文件
(4)--type=full backup: 指定备份类型为全量备份
1、在 test 库中创建测试表 t01 并插入 2 行数据
CREATE TABLE t01(id int,name text);
INSERT INTO t01 VALUES(1,'abc'),(2,'def');
2、手工切换日志
SELECT sys_switch_wal();
3、执行差异备份
sys_rman --config=/backup/rman/sys_rman.conf \
--stanza=kingbase \
--archive-copy \
--type=diff backup
4、参数解析
--type=diff 指定备份类型为差异备份,只备份上次全量备份以来改变过的数据
1、在 test 库中创建测试表 t02 并插入 2 行数据
CREATE TABLE t02(id int,name text);
INSERT INTO t02 VALUES(1,'xyz'),(2,'opq');
2、手工切换日志
SELECT sys_switch_wal();
3、执行增量备份
sys_rman --config=/backup/rman/sys_rman.conf \
--stanza=kingbase \
--archive-copy \
--type=incr backup
4、参数解析
--type=incr backup指定备份类型为增量备份,只备份上次全量、差异、增量备份以来改变过的数据
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
1、正常关闭数据库
sys_ctl stop -D /data
2、删除主数据目录下的所有文件
rm -rf /data/*
rm -rf /data/.*
3、尝试启动数据库 (失败)
sys_ctl start -D /data
1、执行完全恢复
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase restore
2、启动数据库
sys_ctl start -D /data
1、使用 system 用户登录 test 数据库
kingbase test system
2、查看表 t01 和 t02(数据都恢复成功)
SELECT * FROM t01;
SELECT * FROM t02;
1、查看备份信息
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
2、查看时间戳,并记录
SELECT now();
3、删除T01表
DROP TABLE t01;
4、正常停止数据库,并删除/data目录下的所有文件
sys_ctl stop -D /data
rm -rf /data/*
rm -rf /data/.*
5、执行不完全恢复至误删除表之前的时间点
sys_rman --config=/backup/rman/sys_rman.conf \
--stanza=kingbase --type=time --target='2023-05-12 11:01:25' \
--target-action=promote restore
6、启动数据库实例
sys_ctl start -D /data
7、恢复结果验证
使用 system 用户登录 test 数据库ksql test system
查看 t01 表及数据(t01 表被成功恢复)
SELECT * FROM t01;
备注:如果不指定--target-action=promote 选项,系统默认会使用--target-action=pause 选项,此时系统处于只读状态,需要执行“select pg_wal_replay_resume(”命令使数据库切换时间线,并进入读写状态。
实际工作中,往往不清楚准确的误删时间,一般需要多次恢复、使误删除的损失降到最低。
1、执行全备后,查看备份集信息
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
2、模拟误删除操作并执行不完全恢复;开启事务,查看并记录事务 ID
begin;
SELECT txid_current();
3、创建 t03 表、录入数据、结束事务
CREATE TABLE t03(id int,name text);
INSERT INTO t03 VALUES(1,'rfv'),(2,'ujm');end;
4、删除 t03 表。
DROP TABLE t03;
SELECT * FROM t03;
5、正常停止数据库,删除/data 目录下的所有文件
sys_ctl stop -D /data
rm -rf /data/*
rm -rf /data/.*
6、执行不完全恢复至创建 t03 表的事务 ID
sys_rman --config=/backup/rman/sys_rman.conf \
--stanza=kingbase --type=xid --target='2486' \
--set='20230512-103032A' \
--target-action=promote restore
7、启动实例登录并验证结果
sys_ctl start -D /data
ksql test system
SELECT * FROM t03;
备注:基于事务的不完全恢复需要通过--set 参数指定需要使用的备份集,这里选择了最近一次的备份集进行恢复。
1、创建目录并授权
mkdir /home/kingbase/tbs01
chmod 700 /home/kingbase/tbs01
2、创建表空间
ksql test system
CREATE TABLESPACE tbs01 LOCATION '/home/kingbase/tbs01';
3、在新建表空间中创建表并插入 2 行数据
CREATE TABLE t04(id int,name text) TABLESPACE tbs01;
INSERT INTO t04 VALUES(1,'ert'),(2,'vbn');
1、执行全量备份
sys_rman --config=/backup/rman/sys_rman.conf \
--stanza=kingbase \
--archive-copy \
--type=full backup
2、查看备份集信息
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
1、创建所需要的目录并授权
mkdir /home/kingbase/data01
mkdir /home/kingbase/tbs02
chmod 700 /home/kingbase/data01
chmod 700 /home/kingbase/tbs02
2、恢复备份到新目录中
sys_rman --config=/backup/rman/sys_rman.conf \
--stanza=kingbase \
--kb1-path=/home/kingbase/data01 \
--tablespace-map=tbs01=/home/kingbase/tbs02 \
restore
1、修改/data1 中主配置文件的监听端口
echo 'port=5555'>>/home/kingbase/data01/kingbase.conf
2、指定新的数据库目录启动实例sys_ctl start -D /home/kingbase/data01
3、测试使用 system 用户登录到新的实例中,并查看当前数据库和表空间所在目录
ksql test system -p 5555
show data_directory;
1、多次全量备份后,查看当前备份集
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
2、使用保留策略删除备份集,保留最近两次全量备份
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase \
--repo1-retention-full=2 expire
3、再次查看备份集
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
1、多次全量备份后,查看当前备份集
ys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
2、在 sys_rman.conf 中配置永久保留策略,保留最近 3 次全量备份
vi /backup/rman/sys_rman.conf
cat /backup/rman/sys_rman.conf |grep retention|grep -v grep
3、删除过期的备份集并查看当前备份集
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase expire
4、再次查看备份集
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase \
--set='20220126-095932F' expire
使用 sys_rman 的 check 命令验证备份和归档的配置是否可用,如果配置不正确,导致系统无法正常备份和归档时,则会做出相应警告和提示
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase check
(1)备份速度快,是生产系统首选的备份方式
(2)支持完全恢复和不完全恢复
(3)支持读取归档日志和在线日志进行数据恢复
(4)支持并行备份
(1)无法实现跨平台恢复,移植性较差
(2)只能在集簇级备份,不够灵活,无法选择细粒度对象备份
(3)针对数据库逻辑错误的数据恢复时不够高效和便利