人大金仓KingbaseES数据库逻辑备份清理脚本(logic_backup_manager)

功能:实现不同类型的数据库逻辑备份、备份集清理、归档清理、基本信息收集、备份导入数据库等工作。

1. 脚本构成说明

1.1. logic_backup_manager.sh

主脚本文件,解析配置文件,执行备份、清理等工作。

logic_backup_manager.sh位于bin目录下。

1.2. logic_backup_manager.conf

主配置文件,全局参数:

  • 常规参数,比如ip/port/dbname/dbuser/passwd等

  • 路径参数,比如日志路径、备份路径、job路径等

  • 日志参数,比如日志级别等

logic_backup_manager.conf位于share目录下。

1.3. .job文件

每个.job文件代表了一个备份任务,暂支持以下类型任务:

  • sys_dump备份指定模式,可多个

  • sys_dump备份指定表,可多个,可正则表达

  • sys_dump备份全库,排除指定模式、指定表

  • copy指定库的指定模式的指定表

  • sys_dump备份全库

  • 备份打包指定目录下N天前的旧文件并删除旧文件

2. 脚本使用说明

配置 logic_backup_manager.conf 主配置文件(优先使用和 logic_backup_manager.sh 同目录下的配置文件,若同目录下不存在则去加载使用 ../share/logic_backup_manager.conf 配置文件),添加.job备份任务文件(文件由用户创建,该文件配置参数可参考手册内相应参数)后,执行下述命令:

  • logic_backup_manager.sh backup [all] # 执行所有.job备份任务

  • logic_backup_manager.sh backup myschema.job # 执行myschema.job备份任务

  • logic_backup_manager.sh restore [all] #执行所有备份还原任务

  • logic_backup_manager.sh restore starttime-endtime #执行指定时间备份还原任务,时间格式为yyyymmdd

  • logic_backup_manager.sh clean [all] # 清理逻辑备份内容

  • logic_backup_manager.sh clean myschema.job # 清理myschema.job备份任务的备份内容

  • logic_backup_manager.sh clean archived-wal # 清理wal文件

  • logic_backup_manager.sh show-auto # 输出自动备份清理的crontab内容

  • logic_backup_manager.sh backup-clean "a.job b.job" # 清理归档,执行job备份和清除

  • logic_backup_manager.sh collect-info # 收集数据库和OS信息

3. 定时任务设置

配置好 logic_backup_manager.conf 文件,设置好job文件,验证job备份任务没有问题后可使用 show-auto 命令输出定时任务的设置,手动添加到 crontab 列表中即可。

3.1. 凝思HA的定时任务设置

凝思HA是多台机器共享一份存储的解决方案,一个时刻只能有一台机器挂载存储对外提供数据库服务,当机器A故障后支持自动启用另一台机器B对外提供服务,这时机器B挂载了存储。鉴于共享存储的这种特性,凝思HA备份清理定时任务的设置如下:

  1. 将本脚本需要拷贝到共享存储上,并且配置文件也要和本脚本在同一目录下

  1. 做好 logic_backup_manager.conf 文件配置,设置好job文件

  1. 在挂载了共享存储的机器上执行 show-auto 命令,并手动设置crontab定时任务

  1. 手动切换机器,在挂载了共享存储的新机器上执行 show-auto 命令,并手动设置crontab定时任务

  1. 再次切换机器,直至在所有节点上都设置了crontab定时任务

注:不对外提供服务(或故障)的机器虽然也会跑定时任务,但因为缺少共享存储,是无法真正执行定时备份清理任务的

4. 基本原理介绍

  • 备份原理:sys_dump、copy

  • 清理原理:每次执行备份任务都会在相应的 .job.record 文件追加本次备份内容所在的独立的目录,依据保留次数清除旧的目录

  • 免密原理:依据配置参数设置 ${HOME}/.encpwd 实现

  • 清理wal原理:SQL查询 archive_command 若包含sys_rman则不执行清理;find查找 mtime+${_archived_wal_age} 文件并排序,找到一个 ${_archived_wal_age} 天前的最新的wal文件(作为锚点,该文件不会被删除),然后调用 sys_archivecleanup 清理wal归档

  • 还原原理:执行ksql命令导入相应的sql文件

5. 约束

脚本会依据配置往 ${HOME}/.encpwd 免密配置文件内追加配置,若配置了错误的密码,备份检查就会报错失败,此时需要手工删除 ${HOME}/.encpwd 免密配置文件内错误的那行信息,并且修改 logic_backup_manager.conf 全局配置文件或者 .job 任务配置文件。

脚本功能按照日期还原需要依赖文件目录中的日期(如2022/10/10),如果修改``logic_backup_manager.conf`` 全局配置文件中相关参数,会影响该功能的正常使用。

6. job说明

为了满足不同客户现场的不同的逻辑备份任务,同时统一规范管理这些任务,因此将它们划分为不同的类型,现在支持 job1、job2、job3、job4、job5、job6六种类型的任务。

每种类型的 job 有两类参数:

  • 该类型 job 专用的配置参数,不可与其他类型 job 的专用配置参数重复

  • 适用于所有类型 job 的私有通用参数,往往是全局配置参数的覆盖,比如“默认保留的备份数量 _keep_count ”,全局配置为30,该任务备份的数据特别重要那么可设置其私有通用参数( _my_keep_count )为365,作用域仅限当前 job

新增备份任务时,需要判断是哪种类型的 job,然后使用该类型 job 的参数做配置,并将这些内容写入到一个独立的新的 .job 文件(配置参数不可重复)中。

6.1. 专用配置参数说明

每种类型的 job 都有其特有的专用配置参数,不可重复,每个 .job 文件必须存在某种类型的专用配置参数。

6.2. 私有通用参数说明

_my_* 参数用于设置某个 .job 文件代表的任务的私有属性,不设置则默认使用 logic_backup_manager.conf 内的全局配置参数。

全局配置名

私有通用参数名

说明

_keep_count

_my_keep_count

保留的备份数量,比如默认保留30份,某job任务保留365份

_crontab_prefix

_my_crontab_prefix

自动运行的设置,比如默认每周运行,某job任务每天运行

_kdb_script_log_file

_my_kdb_script_log_file

脚本日志文件设置,比如默认使用A文件写日志,某job任务使用B文件写日志(注:在加载主配置文件 logic_backup_manager.conf 之前警告出错信息输出到屏幕,加载主配置文件之后这些信息会写到 ${_kdb_script_log_file} 文件,加载 .job 文件后若有私有的日志文件设置,后续日志会写到该私有日志文件中)

_kdb_user

_my_kdb_user

数据库用户名

_kdb_pass

_my_kdb_pass

数据库用户的密码(注: _my_kdb_pass 只有在 _my_kdb_user 存在的情况下才会生效)

_kdb_dbname

_my_kdb_dbname

数据库名

_older_files_age

_my_older_files_age

旧文件保留天数

6.3. job1 类型说明
6.3.1. 作用

备份指定模式,可使用英文逗号为间隔添加多个模式,可使用正则表达。

6.3.2. 原理
  1. sys_dump -n -Fc导出指定模式的所有内容

  1. sys_dump -n -Fp -s 导出指定模式的定义信息

  1. tar打包

6.3.3. 专用配置参数

_dump_schemas

6.3.4. 举例说明

# cat jobs/valid_job1.job

_dump_schemas="public,schema1"

6.3.5. 示例备份存储位置

# ls -A kdb_backup/databackup/kdb_daily_dump/2022/07/26/valid_job1.job/

test_public_schema1_20220726_201741.dmp.tar.gz

test_public_schema1_stru_20220726_201741.sql.tar.gz

6.4. job2 类型说明
6.4.1. 作用

备份指定表,可使用英文逗号为间隔添加多个表,可使用正则表达(注:必须是“模式名.表”的形式)。

6.4.2. 原理
  1. sys_dump -t -Fc导出指定表的所有内容

  1. sys_dump -t -Fp -s 导出指定表的定义信息

  1. tar打包

6.4.3. 专用配置参数

_dump_tables

6.4.4. 举例说明

# cat jobs/valid_job2.job

_dump_tables="public.t1,schema1.t1"

6.4.5. 示例备份存储位置

# ls -A kdb_backup/databackup/kdb_daily_dump/2022/07/26/valid_job2.job/

test_public.t1_schema1.t1_20220726_202143.dmp.tar.gz

test_public.t1_schema1.t1_stru_20220726_202143.sql.tar.gz

6.5. job3 类型说明
6.5.1. 作用

备份全库,排除指定模式或指定表,可使用英文逗号为间隔添加多个表或模式,可使用正则表达(注:排除指定表参数值必须是“模式名.表”的形式)。

6.5.2. 原理
  1. sys_dump -N -T -Fc导出指定表的所有内容

  1. sys_dump -N -T -Fp -s 导出指定表的定义信息

  1. tar打包

6.5.3. 专用配置参数

_dump_all_exclude_schemas _dump_all_exclude_tables

6.5.4. 举例说明

# cat jobs/valid_extbs.job

_dump_all_exclude_tables="public.t1,public.t2"

#cat jobs/valid_job3.job

_dump_all_exclude_schemas="pub*,schd*"

_dump_all_exclude_tables="hisdb.yc_*,hisdb.yc,hisdb.yc_ddd"

6.5.5. 示例备份存储位置

# ls -A kdb_backup/databackup/kdb_daily_dump/2022/07/26/valid_job3.job/

test_pub*,schd*hisdb._20220726_202238.dmp.tar.gz

test_pub*,schd*hisdb._stru_20220726_202238.sql.tar.gz

6.6. job4 类型说明
6.6.1. 作用

备份指定表。

6.6.2. 原理
  1. 若脚本所在机器与数据库服务器不在同一机器,中断该任务,因为copy不支持远程写文件

  1. select relname from sys_class where RELNAMESPACE=(select oid from sys_namespace where nspname='${schema_name}') and relname like '${tables_prefix}' and relkind='r' 查询出要备份的表列表

  1. sys_dump -t -s -Fp 备份表定义信息

  1. 构造 delete 语句和用于恢复的 copy from 语句

  1. 构造 copy to 语句备份每个表: copy (select * from ${schema_name}.${one_table} ${where_condition}) to ${file}

6.6.3. 专用配置参数

_copy_tables_to :只能配置一个,格式为 dbname!schema!tablename ,其中英文叹号!为分隔符,tablename可使用%,t%表示t开头的该库该模式下所有的表,注意 _my_kdb_dbname 变量不会生效,以配置内的 dbname 为准;优先使用 _my_kdb_user (若未配置则使用 _kdb_user ), _my_kdb_pass (若未配置则使用 _kdb_pass ),和 dbname 构造免密字符串写到 ~/.encpwd 文件中

_copy_tables_stru :是否备份表结构,1代表是,0或者不配该参数则为否

_copy_tables_where_condition : 备份表的部分内容

6.6.4. 举例说明

# cat jobs/valid_copy_job4.job

_copy_tables_to="test!public!t%"

_my_keep_count="2"

# cat jobs/valid_copy_where_job4.job

_copy_tables_to="test!public!t1"

_copy_tables_where_condition="where id > 1000"

# 备份表的增量数据时,可以这样设置 .job 文件达到目的,若有多个不同的表需要增量备份,可以设置多个类似的 .job 文件:

# cat jobs/valid_time.job

_copy_tables_to="hello!public!alarm_model_%" # 备份hello数据库的public模式下的alarm_model_%表

_copy_tables_where_condition="where occur_time between '`date '+%Y-%m-%d' -d '-1 days'`' and '`date '+%Y-%m-%d'`'" # 限定只备份前一天的数据

_my_crontab_prefix="30 00 * * * " # 设置每天0:30执行本备份任务

_my_kdb_user="hello" # hello数据库需要不同于全局配置的一个用户名去链接

_my_kdb_pass="MTIzNDU2" # base64后的该用户的密码

6.6.5. 示例备份存储位置

# ls -A kdb_backup/databackup/kdb_daily_copy/2022/07/26/valid_copy_job4.job/t_20220726_202408/

copy_from copy_to data

# ls -A kdb_backup/databackup/kdb_daily_copy/2022/07/26/valid_copy_job4.job/t_20220726_202408/copy_from/

test_public_t1_20220726_202408_.sql test_public_t2_20220726_202408_.sql

# ls -A kdb_backup/databackup/kdb_daily_copy/2022/07/26/valid_copy_job4.job/t_20220726_202408/copy_to/

test_public_t1_20220726_202408_.sql test_public_t2_20220726_202408_.sql

# ls -A kdb_backup/databackup/kdb_daily_copy/2022/07/26/valid_copy_job4.job/t_20220726_202408/data/

test_public_t1_20220726_202408_.txt test_public_t2_20220726_202408_.txt

6.7. job5 类型说明
6.7.1. 作用

备份整个数据库。

6.7.2. 原理
  1. sys_dump -n -Fc导出所有内容

  1. sys_dump -n -Fp -s 导出定义信息

  1. tar打包

6.7.3. 专用配置参数

_dump_all :注意只能设置为yes

6.7.4. 举例说明

# cat jobs/valid_job5.job

_dump_all="yes"

6.7.5. 示例备份存储位置

# ls -A kdb_backup/databackup/kdb_daily_dump/2022/07/27/valid_job5.job/

test_all_20220727_203445.dmp.tar.gz test_all_stru_20220727_203445.sql.tar.gz

6.8. job6 类型说明
6.8.1. 作用

备份打包指定目录下N天前的旧文件并删除旧文件,可用于清理sys_log目录或者脚本日志目录。

6.8.2. 原理

find ${_tar_del_older_files_in_the_dir} -mtime +${target_older_files_age} -type f -printf '%P ' | xargs tar --remove-files -C ${_tar_del_older_files_in_the_dir} -cvzf ${tar_filename} 找到旧文件打包,并把旧文件删除

删除天数N和_older_files_age参数有关

6.8.3. 专用配置参数

_tar_del_older_files_in_the_dir

6.8.4. 举例说明

# cat kdb_backup/jobs/valid_bklog1.job

_tar_del_older_files_in_the_dir="/128G/shell-script/kdb_backup/databackup/log/"

6.8.5. 示例备份存储位置

# ls -A kdb_backup/databackup/older_files/valid_bklog1.job

20220805_235848.tar.gz

6.9. 还原备份功能说明
6.9.1. 作用

还原通过job4备份的sql文件,可按照时间进行选择。

6.9.2. 使用限制

按时间选择是根据目录中的时间选择如2022/10/10。如果修改配置文件中相关配置,可能导致该功能失效。

6.9.3. 原理
  1. 查找目录kdb_daily_copy下所有符合条件的sql文件,如果是按照时间选择还原,则通过 echo ${file} | awk -F"_" '{print $4} 得到文件创建日期,通过时间戳 date -d "$var" +%s 获得符合条件的文件

  1. 通过 ksql –f xxx.sql 导入到数据库中

6.9.4. 专用配置参数

_kdb_daily_restore_path

6.9.5. 举例说明

# cat logic_backup_manager.conf

_kdb_daily_restore_path="${_kdb_backup_data_path}/kdb_daily_copy"

使用示例:

./logic_backup_manager.sh restore 20220909-20220910

6.9.6. 示例备份存储位置

# ls -A kdb_backup/databackup/kdb_daily_copy

2021 2022 2023

7. 全局配置参数说明

全局配置名

说明

_log_level

脚本日志级别:debug:0, info:1, warn:2, error:3 (error除了写日志外还输出到屏幕)

_kdb_home

KES bin/lib/share目录的上级目录

_kdb_bin_path

sys_dump、ksql所在的目录

_kdb_port

端口

_kdb_host

数据库的ip或hostname

_kdb_connect_timeout

链接数据库超时秒数设置,必须为纯数字,0或负数是永不超时,2是最小超时秒数,设为1实质为2s超时

_kdb_user

数据库用户名

_kdb_pass

_kdb_user用户名的base64后的密码

_kdb_dbname

数据库名

_ld_library_path

Lib目录

_kdb_backup_jobs_path

.job文件所在的目录

_keep_count

保留的备份数量

_os_ip_cmd

ip命令

_os_rm_cmd

rm命令

_os_sed_cmd

sed命令

_os_grep_cmd

grep命令

_kdb_backup_path

备份所在根目录

_kdb_backup_data_path

备份目录

_date_ymd

年月日的字符串

_date_y

年的字符串

_date_m

月的字符串

_date_d

日的字符串

_date_path

按年、月、日划分的目录的字符串

_kdb_backup_data_tmp_path

备份使用的临时目录

_kdb_backup_job_record_path

备份任务的记录文件所在的目录

_kdb_daily_dump_path

sys_dump任务的数据目录

_kdb_daily_copy_path

copy任务的数据目录

_kdb_backup_log_path

日志目录

_kdb_script_log_file

日志文件名

_copy_data

copy数据的目录

_copy_to

copy to SQL文件所在的目录

_copy_from

copy from SQL文件所在的目录

_archived_wal_age

归档wal日志保留天数

_archived_wal_path

归档wal日志所在的目录

_crontab_prefix

crontab自动执行的前缀

_older_files_age

旧文件保留天数

_kdb_backup_older_files_path

旧文件打包备份路径

_collect_info_path

信息收集目录

_collect_locks_file

locks路径和名称

_collect_lac_file

lac路径和名称

_collect_iostat_file

iostat路径和名称

_collect_top_file

top路径和名称

_collect_sys_stat_file

sys_stat路径和名称

_collect_vmstat_file

vmstat路径和名称

_collect_lx_file

lx路径和名称

_collect_client_file

client路径和名称

_collect_crontab_prefix

信息收集功能crontab的前缀

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值