centos7.2数据库定时备份crond实现(以kingbase7为例)

database

项目上线时,经常需要定时对数据库进行备份,以应对不确定的环境和未知的问题。整理如下:

crond是什么?

crond 和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。

而crond正是它的守护进程。cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务。

默认centos7.2已经安装crond,如若未安装,可以通过:yum install crontabs   进行安装

查看 crontab 服务是否已设置为开机启动:

systemctl list-unit-files |grepenable|grepcrond

查看 crontab 状态

service crond status

启动/关闭

//启动服务

service crond start

//关闭服务

service crond stop

//重启服务

service crond restart

//重新载入配置

service crond reload

编写定时任务命令格式

min hour day month dayofweekcommand

分 时  天  月  星期几   命令

crontab 命令

功能:设置计时器。

语法:crontab[-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]
解释:cron 是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:Minute Hour Day Month DayOFWeek Command

参数:
-e 编辑该用户的计时器设置。
-l 列出该用户的计时器设置。
-r 删除该用户的计时器设置。
-u<用户名称>  指定要设定计时器的用户名称。

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

具体时间操作如下:

1、查看crond的状态

2、写数据库定时备份脚本如下:

#!/bin/bash

####################################################################################################################

###

###Descipt: this script is used for kingbase database backup,before you run it,you should set the variables such as

### kdb_home,kdbback_dest,kdb_user,kdb_pass,kdb_host,kdb_port,kdb_list,keep_time and so on.

###

####################################################################################################################

####################### variable define ##########################

# 数据库安装目录

kdb_home="/home/XXXXX/Kingbase"

# 数据库备份的目标路径

kdbback_dest="/home/XXXXX/dbbackup"

# 数据库用户名

kdb_user="username"

# 数据库用户密码

kdb_pass="password"

# 数据库端口号

kdb_port="54321"

# 数据库访问ip

kdb_host="127.0.0.1"

# 数据库的模式,多个模式可用逗号分隔,如"TEST,SAMPLE"

kdb_list="DBNAME"

keep_time="7"

date=$(date "+%Y%m%d%H")

kdbback_final="${kdbback_dest}/kdbback_final"

LD_LIBRARY_PATH="${kdb_home}/unixodbc/lib:${kdb_home}/lib:${kdb_home}/bin"

####################### kingbase backup dest test ##################

[ -d ${kdbback_dest} ] || mkdir -p ${kdbback_dest}

[ -d ${kdbback_final} ] || mkdir -p ${kdbback_final}

####################### kingbase backup start #######################

cd ${kdbback_dest}

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH

for db in `echo $kdb_list | sed "s/,/ /g"`; do

[ -d ${db} ] || mkdir -p ${db}

cd ${db}

##### kingbase server check as follows

${kdb_home}/bin/isql -h ${kdb_host} -p ${kdb_port} -U ${kdb_user} -W ${kdb_pass} -c "select now();" TEMPLATE2 > /dev/null 2>&1

if [ $? -ne 0 ] ;then

echo "${date} sorry, please run the script in a kingbase server" >> backup_${db}_${date}.log

mv backup_${db}_${date}.log ${kdbback_final}

exit 1

else

echo "${date} kingbase server is ok,kingbase backup ${db} is beginning ..." >> backup_${db}_${date}.log

fi

##### end

##### kingbase backup files process as follows

${kdb_home}/bin/sys_dump -p ${kdb_port} -U ${kdb_user} -W ${kdb_pass} -h ${kdb_host} -f ${db}_${date}.KDMP ${db} >> backup_${db}_${date}.log 2>&1

if [ $? -eq 0 ] ;then

tar zcvf ${db}_${date}.tar.gz ${db}_${date}.KDMP*

if [ $? -eq 0 ] ;then

rm -f ${db}_${date}.KDMP*

else

mv ${db}_${date}.KDMP* ${kdbback_final}

fi

find . -mtime +${keep_time} -name ${db}"_*" | xargs -I {} rm {}

else

rm -f ${db}_${date}.KDMP*

fi

###### end

###### kingbase backup log files process as follows

tar zcvf backup_log_${db}_${date}.tar.gz backup_${db}_${date}.log

if [ $? -eq 0 ] ;then

rm -f backup_${db}_${date}.log

else

mv backup_${db}_${date}.log ${kdbback_final}

fi

find . -mtime +${keep_time} -name backup_log_${db}"_*" | xargs -I {} rm {}

###### end

cd ${kdbback_dest}

done

exit 0

3、crontab设置

执行  contab -e

写入如下语句,每五分钟执行一次

*/5 * * * *  /usr/local/backup.sh (脚本的路径)

4、启动crond

service crond start

可以通过cd /var/spool/mail/用户文件 查看执行情况

如若遇到权限不够的情况,可以赋权如下:

chmod 777 backup.sh

重新加载:

service crond reload

 

至此结束

以上是 centos7.2数据库定时备份crond实现(以kingbase7为例) 的全部内容, 来源链接: utcz.com/z/531275.html

回到顶部