centos7.2 數據庫定時備份 crond實現(以kingbase7爲例)

項目上線時,常常須要定時對數據庫進行備份,以應對不肯定的環境和未知的問題。整理以下: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

 

至此結束

相關文章
相關標籤/搜索