功能:实现不同类型的数据库逻辑备份、备份集清理、归档清理、基本信息收集、备份导入数据库等工作。
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备份清理定时任务的设置如下:
将本脚本需要拷贝到共享存储上,并且配置文件也要和本脚本在同一目录下
做好
logic_backup_manager.conf文件配置,设置好job文件在挂载了共享存储的机器上执行
show-auto命令,并手动设置crontab定时任务手动切换机器,在挂载了共享存储的新机器上执行
show-auto命令,并手动设置crontab定时任务再次切换机器,直至在所有节点上都设置了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 内的全局配置参数。
全局配置名 | 私有通用参数名 | 说明 |
|---|---|---|
|
| 保留的备份数量,比如默认保留30份,某job任务保留365份 |
|
| 自动运行的设置,比如默认每周运行,某job任务每天运行 |
|
| 脚本日志文件设置,比如默认使用A文件写日志,某job任务使用B文件写日志(注:在加载主配置文件 |
|
| 数据库用户名 |
|
| 数据库用户的密码(注: |
|
| 数据库名 |
|
| 旧文件保留天数 |
6.3. job1 类型说明 ¶
6.3.1. 作用 ¶
备份指定模式,可使用英文逗号为间隔添加多个模式,可使用正则表达。
6.3.2. 原理 ¶
sys_dump -n -Fc导出指定模式的所有内容
sys_dump -n -Fp -s 导出指定模式的定义信息
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. 原理 ¶
sys_dump -t -Fc导出指定表的所有内容
sys_dump -t -Fp -s 导出指定表的定义信息
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. 原理 ¶
sys_dump -N -T -Fc导出指定表的所有内容
sys_dump -N -T -Fp -s 导出指定表的定义信息
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. 原理 ¶
若脚本所在机器与数据库服务器不在同一机器,中断该任务,因为copy不支持远程写文件
select relname from sys_class where RELNAMESPACE=(select oid from sys_namespace where nspname='${schema_name}') and relname like '${tables_prefix}' and relkind='r'查询出要备份的表列表sys_dump -t -s -Fp 备份表定义信息
构造 delete 语句和用于恢复的 copy from 语句
构造 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. 原理 ¶
sys_dump -n -Fc导出所有内容
sys_dump -n -Fp -s 导出定义信息
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. 原理 ¶
查找目录kdb_daily_copy下所有符合条件的sql文件,如果是按照时间选择还原,则通过
echo ${file} | awk -F"_" '{print $4}得到文件创建日期,通过时间戳date -d "$var" +%s获得符合条件的文件通过
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. 全局配置参数说明 ¶
全局配置名 | 说明 |
|---|---|
| 脚本日志级别:debug:0, info:1, warn:2, error:3 (error除了写日志外还输出到屏幕) |
| KES bin/lib/share目录的上级目录 |
| sys_dump、ksql所在的目录 |
| 端口 |
| 数据库的ip或hostname |
| 链接数据库超时秒数设置,必须为纯数字,0或负数是永不超时,2是最小超时秒数,设为1实质为2s超时 |
| 数据库用户名 |
| _kdb_user用户名的base64后的密码 |
| 数据库名 |
| Lib目录 |
| .job文件所在的目录 |
| 保留的备份数量 |
| ip命令 |
| rm命令 |
| sed命令 |
| grep命令 |
| 备份所在根目录 |
| 备份目录 |
| 年月日的字符串 |
| 年的字符串 |
| 月的字符串 |
| 日的字符串 |
| 按年、月、日划分的目录的字符串 |
| 备份使用的临时目录 |
| 备份任务的记录文件所在的目录 |
| sys_dump任务的数据目录 |
| copy任务的数据目录 |
| 日志目录 |
| 日志文件名 |
| copy数据的目录 |
| copy to SQL文件所在的目录 |
| copy from SQL文件所在的目录 |
| 归档wal日志保留天数 |
| 归档wal日志所在的目录 |
| crontab自动执行的前缀 |
| 旧文件保留天数 |
| 旧文件打包备份路径 |
| 信息收集目录 |
| locks路径和名称 |
| lac路径和名称 |
| iostat路径和名称 |
| top路径和名称 |
| sys_stat路径和名称 |
| vmstat路径和名称 |
| lx路径和名称 |
| client路径和名称 |
| 信息收集功能crontab的前缀 |




