【定期备份Linux上DB】自动备份DB2数据库
为了防止不可挽回的数据丢失风险发生,需要定期备份数据库,最好弄成定时定期自动备份
- 首先准备好自动备份脚本,以DB2为例,脚本基本代码如下,脚本保存为bash.sh文件,上传到Linux服务器上,
/mnt/backup是Windows共享文件夹的路径
1 #!/bin/bash -x 2 #exportSchema auto 3 . /etc/profile 4 . ~/.profile 5 . /home/db2inst1/sqllib/db2profile 6 7 ymd=$(date +%Y-%m-%d_%H-%M-%S) 8 instanceName="db2inst1"; 9 basePath="/mnt/backup/${ymd}_auto_backup/${instanceName}"; 10 logPath="${basePath}/log/" 11 logName="${logPath}/backup_${instanceName}_${ymd}.log" 12 13 14 function exportData() { 15 16 17 dbName=$1; 18 19 dataPath="${basePath}/${instanceName}_${dbName}_Bak" 20 21 22 #db2 force applications all; 23 db2 connect to ${dbName}; 24 fn_log "db2 connect to ${dbName};"; 25 26 if [ ! -d $dataPath ] 27 then 28 mkdir -p ${dataPath}; 29 fn_log "mkdir -p ${dataPath};"; 30 31 fi 32 cd ${dataPath}; 33 34 db2move ${dbName} export -aw 35 fn_log "db2move ${dbName} export -aw"; 36 } 37 38 function exportSchema() { 39 40 41 dbName=$1; 42 schemaPath="${basePath}/${instanceName}_${dbName}_Schema_Bak/" 43 #db2 force applications all; 44 db2 connect to ${dbName}; 45 fn_log "db2 connect to ${dbName};"; 46 47 if [ ! -d "$schemaPath" ]; 48 then 49 mkdir -p ${schemaPath}; 50 fn_log "mkdir -p ${schemaPath};"; 51 52 fi 53 cd ${schemaPath}; 54 55 db2look -d ${dbName} -e -a -l -o "${dbName}_${ymd}".sql; 56 fn_log "db2look -d ${dbName} -e -a -l -o "${dbName}_${ymd}".sql"; 57 58 59 } 60 61 function log_info () 62 { 63 if [ ! -d ${logPath} ] 64 then 65 mkdir -p ${logPath} 66 fi 67 68 DATE_N=$(date "+%Y-%m-%d %H:%M:%S") 69 USER_N=$(whoami) 70 echo "${DATE_N} ${USER_N} execute $0 [INFO] $@" >>$logName #成功日志 71 72 } 73 74 function log_error () 75 { 76 DATE_N=$(date "+%Y-%m-%d %H:%M:%S") 77 USER_N=$(whoami) 78 79 echo -e " ${DATE_N} ${USER_N} execute $0 [ERROR] $@ " >>$logName #失败日志 80 81 } 82 83 function fn_log () { 84 if [ $? -eq 0 ] 85 then 86 log_info "sucessed." 87 echo -e "sucessed. " 88 else 89 log_error "failed." 90 echo -e " failed." 91 fi 92 } 93 94 95 exportSchema "DBSchemaName"; 96 log_info 'exportSchema "db2inst1" "SchemaName";' 97 98 exportData "DBSchemaName"; 99 log_info 'exportData "db2inst1" "DBSchemaName";' 100 101 exit;
例如上传到/var/shell/bash.sh
- 修改权限chmod 755 /var/shell/*.sh
- 配置crontab
- vi /etc/crontab 添加一行执行脚本:每7天1:05执行
50 01 */7 * * su - db2inst1 -s "sh /var/shell/bash.sh"
- service crond restart
- tailf /var/log/cron