案例说明:
在KingbaseES V8R6数据库通常备份建立的crond任务,默认由root用户建立,写入到/etc/cron.d/KINGBASECRON文件中,在有的生产环境限制了普通用户使用root的权限,创建计划任务可能失败,新的KingbaseES V8R6版本,将计划任务由数据库用户创建,比如通用机环境,将由kingbase用户创建计划任务。
如下图所示,写入到KINGBASECRON文件中的计划任务:
适用版本:
KingbaseES V8R6
一、备份初始化
1、备份配置文件
[kingbase@node102 bin]$ cat sys_backup.conf |grep -v ^#|grep -v ^$
_target_db_style="single"
_one_db_ip="127.0.0.1"
_repo_ip="127.0.0.1"
_stanza_name="kingbase"
_os_user_name="kingbase"
_repo_path="/home/kingbase/kbbr7_repo"
_repo_retention_full_count=5
_crond_full_days=7
_crond_diff_days=0
_crond_incr_days=1
_crond_full_hour=2
_crond_diff_hour=3
_crond_incr_hour=4
_band_width=0
_os_ip_cmd="/sbin/ip"
_os_rm_cmd="/bin/rm"
_os_sed_cmd="/bin/sed"
_os_grep_cmd="/bin/grep"
_single_data_dir="/data/kingbase/c7/data"
_single_bin_dir="/opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/bin"
_single_db_user="system"
_single_db_port="54322"
_use_scmd=off
_start_fast=y
_compress_type=none
_non_archived_space=1024
2、执行初始化
[kingbase@node102 bin]$ ./sys_backup.sh init
# pre-condition: check the non-archived WAL files
# generate single sys_rman.conf...DONE
# update single archive_command with sys_rman.archive-push...DONE
# create stanza and check...(maybe 60+ seconds)
# create stanza and check...DONE
# initial first full backup...(maybe several minutes)
# initial first full backup...DONE
# Initial sys_rman OK.
'sys_backup.sh start' should be executed when need back-rest feature.
二、建立备份计划任务
1、建立crond任务
[kingbase@node102 bin]$ ./sys_backup.sh start
# pre-condition: check the non-archived WAL files
Enable some sys_rman in crontab-daemon
no crontab for kingbase
Set full-backup in 7 days
Set incr-backup in 1 days
0 2 */7 * * /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup >> /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/log/sys_rman_backup_full.log 2>&1
0 4 */1 * * /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup >> /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/log/sys_rman_backup_incr.log 2>&1
2、查看crond任务
Tips:
如下所示,当前kingbase用户可以查看到备份的计划任务。
[kingbase@node102 bin]$ crontab -l
0 2 */7 * * /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup >> /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/log/sys_rman_backup_full.log 2>&1
0 4 */1 * * /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup >> /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/log/sys_rman_backup_incr.log 2>&1
计划任务写入以下文件:
[root@node102 cron]# cat /var/spool/cron/kingbase
0 2 */7 * * /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup >> /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/log/sys_rman_backup_full.log 2>&1
0 4 */1 * * /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup >> /opt/Kingbase/ES/V8_B24/KESRealPro/V008R006C007B0024/Server/log/sys_rman_backup_incr.log 2>&1
三、分析备份crond任务的创建
[kingbase@node102 bin]$ sh -x sys_backup.sh start
如下图所示,由root用户创建的/etc/cron.d/KINGBASECRON的备份的计划任务,已经由当前用户kingbase的crond任务代替。
三、总结
对于备份的计划任务,在通用机环境,由当前数据库用户的crond任务代替由root用户创建的crond任务,在对安全性要求高的生产环境中使用,不再受权限限制,更好的适应于各种生产环境。