昨天一個pgp加密盤壞了,東西全丟了。。。,我的筆記啊!我咋怎麼2呢。。 備份個腳本吧,方便以後手機查看,話說我都快忘記帳號密碼了 備註:腳步恢復時只能恢復到備份前的狀態,如果需要恢復到當前狀態,還需配合binlog,睡覺就這樣 ...
昨天一個pgp加密盤壞了,東西全丟了。。。,我的筆記啊!我咋怎麼2呢。。
備份個腳本吧,方便以後手機查看,話說我都快忘記帳號密碼了
備註:腳步恢復時只能恢復到備份前的狀態,如果需要恢復到當前狀態,還需配合binlog,睡覺就這樣
#!/bin/sh #################################################### # AUTHOR : JusonSummer # # VERSION : V1.0.0 # # DATE : 2016-08-13 # # CORPORATION : FiberHome # #################################################### #基於xtrabackup 2.3.5 #星期四,星期日全備,其他工作日每天一次增量備份,手動執行可通過設置WEEK_NUM來確定是增量還是全量 for i in /etc/profile.d/*.sh; do if [ -r "$i" ]; then . $i fi done if [ -f /root/.bash_profile ]; then . /root/.bash_profile fi INNOBACKUPEX=innobackupex #INNOBACKUPEX的命令 #mysql目標伺服器以及備份用戶及密碼 MYSQL_USER=root MYSQL_PASSWORD=root MYSQL_HOST=localhost MYSQL_PORT=3306 MY_CNF=/etc/my.cnf MYSQL_CMD=" --user=$MYSQL_USER --password=$MYSQL_PASSWORD --host=$MYSQL_HOST --port=$MYSQL_PORT" TMP_LOG="/var/log/backup.$$.log" # $$當前shell進程號 BACKUP_DIR=/mysql_backup # 備份的主目錄 FULLBACKUP_DIR=$BACKUP_DIR/full # 全庫備份的目錄 INCRBACKUP_DIR=$BACKUP_DIR/incre # 增量備份的目錄 BACKUP_LOG_DIR=$BACKUP_DIR/log # 備份日誌的目錄 LOGFILE_NAME=backup_`date +%Y%m%d%H%M%S`.log # 備份日誌文件名 #星期 WEEK_NUM=`date +%w` #WEEK_NUM=0 #新建全備和差異備份的目錄 mkdir -p $FULLBACKUP_DIR mkdir -p $INCRBACKUP_DIR mkdir -p $BACKUP_LOG_DIR #colour level SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \\033[0;39m" #日誌輸出函數 LogMsg() { time=`date "+%D %T"` echo "[$time] : INFO : $*" echo "[$time] : INFO : $*" >>$BACKUP_LOG_DIR/$LOGFILE_NAME $SETCOLOR_NORMAL } LogWarnMsg() { time=`date "+%D %T"` $SETCOLOR_WARNING echo "[$time] : WARN : $*" $SETCOLOR_NORMAL } LogSucMsg() { time=`date "+%D %T"` $SETCOLOR_SUCCESS echo "[$time] : SUCCESS : $*" echo "[$time] : SUCCESS : $*" >>$BACKUP_LOG_DIR/$LOGFILE_NAME $SETCOLOR_NORMAL } LogErrorMsg() { time=`date "+%D %T"` $SETCOLOR_FAILURE echo "[$time] : ERROR : $*" $SETCOLOR_NORMAL } # 檢查innobackupex錯誤輸出 check_innobackupex_fail() { #保留一份備份的詳細日誌 cat $TMP_LOG>>$BACKUP_LOG_DIR/$LOGFILE_NAME if [ -z "`tail -2 $TMP_LOG | grep 'completed OK!'`" ] ; then LogErrorMsg "$INNOBACKUPEX命令執行失敗" rm -f $TMP_LOG LogErrorMsg "錯誤日誌請查看 $BACKUP_LOG_DIR/$LOGFILE_NAME" exit 1 fi } # 選項檢測 $INNOBACKUPEX -v if [ `echo $?` -ne 0 ]; then LogErrorMsg "$INNOBACKUPEX命令不存在,請確認是否安裝xtrabackup或環境變數是否配置" exit 1 fi PORTNUM00=`netstat -lnt|grep ${MYSQL_PORT}|wc -l` if [ $PORTNUM00 = 0 ]; then LogErrorMsg "MySQL處於關閉狀態,請打開MySQL." exit 1 fi if ! `echo 'exit' | mysql -s $MYSQL_CMD --show-warnings=false` ; then LogErrorMsg "資料庫的用戶名、密碼、主機名或埠中存在錯誤配置!" exit 1 fi # 備份的頭部信息 LogMsg "----------------------------------------------" LogMsg "$0: MySQL備份腳本" LogMsg "----------------------------------------------" LogMsg "開始於: `date +%F' '%T`" #查找最新的完全備份文件夾(不包括父級目錄) LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1` # 查找最最新全庫備份時間,日期格式:2016-07-20 LATEST_FULL_BACKUP_CREATED_DATE=`stat -c %y $FULLBACKUP_DIR/$LATEST_FULL_BACKUP | cut -c 1-10` #星期一,星期二,星期三,星期五,星期六執行增量備份 if [ $WEEK_NUM -eq 1 -o $WEEK_NUM -eq 2 -o $WEEK_NUM -eq 3 -o $WEEK_NUM -eq 5 -o $WEEK_NUM -eq 6 ] ; then LogMsg "************************************" LogMsg "正在執行增量備份...請稍等..." LogMsg "************************************" #無全備時,需先做全備 if [ -z $LATEST_FULL_BACKUP ] ; then LogErrorMsg "伺服器還沒有做過全備份,請根據安裝文檔先做一次全備!" exit 1 fi # 以最新的全備目錄名在增量備份目錄下新建目錄 LogMsg "增量備份放在$INCRBACKUP_DIR/$LATEST_FULL_BACKUP目錄下" NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP mkdir -p $NEW_INCRDIR # 查找最新的增量備份是否存在.指定一個備份的路徑作為增量備份的基礎 LATEST_INCR_BACKUP=`find $NEW_INCRDIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1` if [ ! $LATEST_INCR_BACKUP ] ; then INCRBASEDIR=$FULLBACKUP_DIR/$LATEST_FULL_BACKUP LogMsg "增量備份將以$INCRBASEDIR備份集作為備份基礎" else INCRBASEDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP/$LATEST_INCR_BACKUP LogMsg "增量備份將以$INCRBASEDIR備份集作為備份基礎" fi $INNOBACKUPEX --defaults-file=$MY_CNF $MYSQL_CMD --incremental $NEW_INCRDIR --incremental-basedir $INCRBASEDIR > $TMP_LOG 2>&1 check_innobackupex_fail LogMsg "資料庫成功增量備份到:$NEW_INCRDIR" #星期四,星期日執行全量備份 elif [ $WEEK_NUM -eq 0 -o $WEEK_NUM -eq 4 ] ; then LogMsg "************************************" LogMsg "正在執行全新的完全備份...請稍等..." LogMsg "************************************" $INNOBACKUPEX --defaults-file=$MY_CNF $MYSQL_CMD $FULLBACKUP_DIR> $TMP_LOG 2>&1 check_innobackupex_fail LogMsg "資料庫成功全量備份到:$FULLBACKUP_DIR" fi #刪除過期的全量備份以及增量備份,過期時間為7天 LogMsg "尋找過期的備份文件...請稍等..." EXPIRE_FILE=`find $FULLBACKUP_DIR/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -printf "%P\t" ` if [ -z "$EXPIRE_FILE" ];then LogMsg "未找到可以刪除的過期備份文件" else for efile in `find $FULLBACKUP_DIR/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -printf "%P\n"` do LogMsg "刪除過期全備文件:$efile" rm -rf $FULLBACKUP_DIR/$efile LogMsg "刪除過期增量備份文件:$efile" rm -rf $INCRBACKUP_DIR/$efile done fi LogSucMsg "備份完成於: `date +%F' '%T' '`" exit 0