KingbaseES V8逻辑备份脚本功能说明

逻辑备份清理脚本说明

脚本构成说明

文件名

说明

logic_backup_manager.sh

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

logic_backup_manager.conf

主配置文件,全局参数:

  • 常规参数,比如ip/port/dbname/dbuser/passwd等
  • 路径参数,比如日志路径、备份路径、job路径等
  • 日志参数,比如日志级别等

.job文件

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

  • sys_dump备份指定模式,可多个
  • sys_dump备份指定表,可多个,可正则表达
  • sys_dump备份全库,排除指定模式、指定表
  • copy指定库的指定模式的指定表
  • sys_dump备份全库
  • 备份打包指定目录下N天前的旧文件并删除旧文件

脚本使用说明

配置 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 starttimeendtime   #执行指定时间备份还原任务,时间格式为yyyymmdd
  • logic_backup_manager.sh clean [all]            # 清理逻辑备份内容
  • logic_backup_manager.sh clean myschema.job  # 清理myschema.job备份任务的备份内容
  • logic_backup_manager.sh clean archivedwal             # 清理wal文件
  • logic_backup_manager.sh showauto               # 输出自动备份清理的crontab内容
  • logic_backup_manager.sh backupclean "a.job b.job"   # 清理归档,执行job备份和清除
  • logic_backup_manager.sh collectinfo # 收集数据库和OS信息

定时任务设置

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

凝思HA的定时任务设置

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

  1. 将本脚本需要拷贝到共享存储上,并且配置文件也要和本脚本在同一目录下
  2. 做好conf文件配置,设置好job文件
  3. 在挂载了共享存储的机器上执行 show-auto 命令,并手动设置crontab定时任务
  4. 手动切换机器,在挂载了共享存储的新机器上执行 show-auto 命令,并手动设置crontab定时任务
  5. 再次切换机器,直至在所有节点上都设置了crontab定时任务

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

原理

备份原理:sys_dump、copy

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

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

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

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

约束

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

Job说明

为了满足不同客户现场的不同的逻辑备份任务,同时统一规范管理这些任务,因此将它们划分为不同的类型,现在支持Job1、Job2、Job3、Job4、Job5、Job6六种类型的任务。

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

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

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

专用配置参数说明

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

私有通用参数说明

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

全局配置名

私有通用参数名

说明

_keep_count

_my_keep_count

保留的备份数量

默认保留30份,A任务保留365份

_crontab_prefix

_my_crontab_prefix

自动运行的设置

比如默认每周运行,A任务每天运行

_kdb_script_log_file

_my_kdb_script_log_file

脚本日志文件设置

默认使用xx文件写日志,A任务使用yy文件写日志

注:

在加载主配置文件(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

旧文件保留天数

Job1类型说明

作用

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

原理

  1. sys_dump -n -Fc导出指定模式的所有内容
  2. sys_dump -n -Fp -s 导出指定模式的定义信息
  3. tar打包

专用配置参数

_dump_schemas

举例说明

# cat jobs/valid_job1.job

_dump_schemas="public,schema1"

存储位置

# 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

Job2类型说明

作用

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

注:必须是“模式名.表”的形式

原理

  1. sys_dump -t -Fc导出指定表的所有内容
  2. sys_dump -t -Fp -s 导出指定表的定义信息
  3. tar打包

专用配置参数

_dump_tables

举例说明

# cat jobs/valid_job2.job

_dump_tables="public.t1,schema1.t1"

存储位置

# 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

Job3类型说明

作用

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

注:排除指定表参数值必须是“模式名.表”的形式

原理

  1. sys_dump -N -T -Fc导出指定表的所有内容
  2. sys_dump -N -T -Fp -s 导出指定表的定义信息
  3. tar打包

专用配置参数

_dump_all_exclude_schemas _dump_all_exclude_tables

举例说明

# 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"

存储位置

# 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

Job4类型说明

作用

备份指定表

原理

  1. 若脚本所在机器与数据库服务器不在同一机器,中断该任务,因为copy不支持远程写文件
  2. select relname from sys_class where RELNAMESPACE=(select oid from sys_namespace where nspname='${schema_name}') and relname like '${tables_prefix}' and relkind='r' 查询出要备份的表列表
  3. sys_dump -t -s -Fp 备份表定义信息
  4. 构造delete语句和用于恢复的copy from语句
  5. 构造copy to语句备份每个表:

copy (select * from ${schema_name}.${one_table} ${where_condition}) to ${file}

专用配置参数

_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

备份表的部分内容

举例说明

# 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后的该用户的密码

存储位置

# 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

Job5类型说明

作用

备份整个数据库

原理

  1. sys_dump -n -Fc导出所有内容
  2. sys_dump -n -Fp -s 导出定义信息
  3. tar打包

专用配置参数

_dump_all

注意:只能设置为yes

举例说明

# cat jobs/valid_job5.job

_dump_all="yes"

存储位置

# 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

Job6类型说明

作用

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

原理

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}

找到旧文件打包,并把旧文件删除

专用配置参数

_tar_del_older_files_in_the_dir

举例说明

$ cat kdb_backup/jobs/valid_bklog1.job

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

存储位置

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

20220805_235848.tar.gz

还原备份功能说明

作用

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

原理

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

专用配置参数

_kdb_daily_restore_path

举例说明

$ cat logic_backup_manager.conf

_kdb_daily_restore_path="${_kdb_backup_data_path}/kdb_daily_copy"

使用示例:

./logic_backup_manager.sh restore 20220909-20220910

读取文件位置

$ ls -A kdb_backup/databackup/kdb_daily_copy

2021  2022  2023

全局配置参数说明

配置名

说明

_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的前缀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值