项目上线时,常常须要定时对数据库进行备份,以应对不肯定的环境和未知的问题。整理以下:sql
crond是什么?数据库
crond 和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操做系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供以后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。centos
而crond正是它的守护进程。cron服务是一个定时执行的服务,能够经过crontab 命令添加或者编辑须要定时执行的任务。bash
默认centos7.2已经安装crond,如若未安装,能够经过:yum install crontabs 进行安装this
查看 crontab 服务是否已设置为开机启动:centos7
systemctl list-unit-files |
grep
enable
|
grep
crond
操作系统
查看 crontab 状态unix
service crond statusrest
启动/关闭code
//
启动服务
service crond start
//
关闭服务
service crond stop
//
重启服务
service crond restart
//
从新载入配置
service crond reload
编写定时任务命令格式
min hour day month dayofweek
command
分 时 天 月 星期几 命令
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列要运行的命令
具体时间操做以下:
一、查看crond的状态
二、写数据库定时备份脚本以下:
#!/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
三、crontab设置
执行 contab -e
写入以下语句,每五分钟执行一次
*/5 * * * * /usr/local/backup.sh (脚本的路径)
四、启动crond
service crond start
能够经过cd /var/spool/mail/用户文件 查看执行状况
如若遇到权限不够的状况,能够赋权以下:
chmod 777 backup.sh
从新加载:
service crond reload
至此结束