逻辑备份清理脚本说明
脚本构成说明
文件名 | 说明 |
logic_backup_manager.sh | 主脚本文件,解析配置文件,执行备份、还原、清理等工作 |
logic_backup_manager.conf | 主配置文件,全局参数:
|
.job文件 | 每个.job文件代表了一个备份任务,暂支持以下类型任务:
|
脚本使用说明
配置 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备份清理定时任务的设置如下:
- 将本脚本需要拷贝到共享存储上,并且配置文件也要和本脚本在同一目录下
- 做好conf文件配置,设置好job文件
- 在挂载了共享存储的机器上执行 show-auto 命令,并手动设置crontab定时任务
- 手动切换机器,在挂载了共享存储的新机器上执行 show-auto 命令,并手动设置crontab定时任务
- 再次切换机器,直至在所有节点上都设置了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类型说明
作用 | 备份指定模式,可使用英文逗号为间隔添加多个模式,可使用正则表达 |
原理 |
|
专用配置参数 | _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类型说明
作用 | 备份指定表,可使用英文逗号为间隔添加多个表,可使用正则表达 注:必须是“模式名.表”的形式 |
原理 |
|
专用配置参数 | _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类型说明
作用 | 备份全库,排除指定模式或指定表,可使用英文逗号为间隔添加多个表或模式,可使用正则表达 注:排除指定表参数值必须是“模式名.表”的形式 |
原理 |
|
专用配置参数 | _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类型说明
作用 | 备份指定表 |
原理 |
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类型说明
作用 | 备份整个数据库 |
原理 |
|
专用配置参数 | _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文件,可按照时间进行选择 |
原理 |
|
专用配置参数 | _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的前缀 |