1. 程式人生 > >Xtrabackup定時備份資料庫指令碼

Xtrabackup定時備份資料庫指令碼

#!/bin/bash## 備份計劃任務## ## 每天凌晨1:30一次全量備份## 每天間隔1小時一次增量備份## 30 1 * * * backup.sh full## 00 * * * * backup.sh inc#### 恢復資料步驟:## (1)、檢視備份日誌,找到全量備份和增量備份的關係(注意增量備份的順序)#### cat ${BACKUP_BASE_DIR}/${INC_BASE_LIST}## (2)、全量備份## innobackupex --defaults-file=/etc/my.cnf --apply-log ${BACKUP_BASE_DIR}/full_dir#### (3)、第一個增量## innobackupex --defaults-file=/etc/my.cnf --apply-log ${BACKUP_BASE_DIR}/full_dir \## --incremental-dir=${BACKUP_BASE_DIR}/one_inc_dir#### (4)、第二個增量## innobackupex --defaults-file=/etc/my.cnf --apply-log ${BACKUP_BASE_DIR}/full_dir \## --incremental-dir=${BACKUP_BASE_DIR}/two_inc_dir#### (5)、恢復資料## innobackupex --defaults-file=/etc/my.cnf --copy-back ${BACKUP_BASE_DIR}/full_dirPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbinBACKUP_BASE_DIR="/backup/xtrabackup"INC_BASE_LIST="${BACKUP_BASE_DIR}/inc_list.txt"XTRABACKUP_PATH="/usr/local/xtrabackup/bin/innobackupex"MYSQL_CNF="/etc/my.cnf"MYSQL_HOSTNAME=127.0.0.1MYSQL_USERNAME=rootMYSQL_PASSWORD=w7tQ5NNWWRkLOCK_FILE=/tmp/innobackupex.lockTHREAD=3mkdir -p ${BACKUP_BASE_DIR}CURRENT_BACKUP_PATH="${BACKUP_BASE_DIR}/$(date +%F_%H-%M)"[[ -d ${CURRENT_BACKUP_PATH} ]] && CURRENT_BACKUP_PATH="${BACKUP_BASE_DIR}/$(date +%F_%H-%M-%S)"print_help(){ echo "--------------------------------------------------------------" echo "Usage: $0 full | inc | help " echo "--------------------------------------------------------------" exit 1}[[ $# -lt 1 || "$1" == "help" ]] && print_help[[ -f "$LOCK_FILE" ]] && echo -e "Usage: rm -f $LOCK_FILE\nUsage: chattr -i $LOCK_FILE && rm -f $LOCK_FILE" && exit 1FullBackup(){ touch $LOCK_FILE chattr +i $LOCK_FILE local rc=0 ${XTRABACKUP_PATH} \ --defaults-file=${MYSQL_CNF} \ --user=${MYSQL_USERNAME} \ --password=${MYSQL_PASSWORD} \ --host=${MYSQL_HOSTNAME} \ --parallel=${THREAD} \ --no-timestamp ${CURRENT_BACKUP_PATH} > ${CURRENT_BACKUP_PATH}_full.log 2>&1 grep ".*\ completed\ OK\!" ${CURRENT_BACKUP_PATH}_full.log > /dev/null 2>&1 if [ $? -ne 0 ];then rc=1 [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && rm -rf ${CURRENT_BACKUP_PATH} else echo "NULL|${CURRENT_BACKUP_PATH}|full" >> ${INC_BASE_LIST} [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && chattr +i ${CURRENT_BACKUP_PATH} || rc=1 fi chattr -i ${LOCK_FILE} rm -f $LOCK_FILE chattr +a ${INC_BASE_LIST} return $rc}IncBackup(){ touch $LOCK_FILE chattr +i $LOCK_FILE local rc=0 PREV_BACKUP_DIR=$(sed '/^$/d' ${INC_BASE_LIST} | tail -1 | awk -F '|' '{print $2}') ${XTRABACKUP_PATH} \ --defaults-file=${MYSQL_CNF} \ --user=${MYSQL_USERNAME} \ --password=${MYSQL_PASSWORD} \ --host=${MYSQL_HOSTNAME} \ --no-timestamp --incremental ${CURRENT_BACKUP_PATH} \ --incremental-basedir=${PREV_BACKUP_DIR} > ${CURRENT_BACKUP_PATH}_inc.log 2>&1 grep ".*\ completed\ OK\!" ${CURRENT_BACKUP_PATH}_inc.log > /dev/null 2>&1 if [ $? -ne 0 ];then rc=1 [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && rm -rf ${CURRENT_BACKUP_PATH} else echo "${PREV_BACKUP_DIR}|${CURRENT_BACKUP_PATH}|inc" >> ${INC_BASE_LIST} [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && chattr +i ${CURRENT_BACKUP_PATH} || rc=1 fi chattr -i ${LOCK_FILE} rm -f $LOCK_FILE chattr +a ${INC_BASE_LIST} return $rc}## 全量備份if [ "$1" == "full" ];then FullBackupfi## 增量備份if [ "$1" == "inc" ];then ## 判斷上一次備份是否存在,無則進行全量備份 if [[ ! -f ${INC_BASE_LIST} || $(sed '/^$/d' ${INC_BASE_LIST} | wc -l) -eq 0 ]];then FullBackup else IncBackup fifi## 刪除14天前的備份if [[ -d ${BACKUP_BASE_DIR} && $(pwd) != "/" ]];then find ${BACKUP_BASE_DIR} -name "$(date -d '14 days ago' +'%F')_*" | xargs chattr -i find ${BACKUP_BASE_DIR} -name "$(date -d '14 days ago' +'%F')_*" | xargs rm -rffi

相關推薦

Xtrabackup定時備份資料庫指令碼

#!/bin/bash## 備份計劃任務## ## 每天凌晨1:30一次全量備份## 每天間隔1小時一次增量備份## 30 1 * * * backup.sh full## 00 * * * * backup.sh inc#### 恢復資料步驟:## (1)、檢視備份日誌,找到全量備份和增量備份的關係(

定時備份資料庫指令碼

定時任務 crontab命令用於設定週期性被執行的指令。該命令從標準輸入裝置讀取指令,並將其存放於“crontab”檔案中,以供之後讀取和執行。 通常linux裡都內建了crontab命令。如果沒有請自行安裝。 檔案 crontab在/etc目錄下面存在

Xtrabackup定時備份mysql資料庫指令碼

定時備份MySQL資料庫 指令碼內容: #!/bin/bash ## 備份計劃任務 ## ## 每天凌晨1:30一次全量備份 ## 每天間隔1小時一次增量備份 ## 30 1 * * * backup.sh full ## 00 * * * * backup.

用shell指令碼實現定時備份資料庫

1、備份資料庫的方法 可以使用命令檢視 ls  /usr/local/mysql/bin 這個mysqldump就是系統內建的用來備份資料庫的工具。 2、實現方法 ①先隨便進入一個位置建立一個目錄 ②建立一個希爾指令碼 ③往shell指令碼中寫入備份資料庫的語句 &nb

MySQL使用mysqldump備份資料庫指令碼手工執行成功 crontab定時卻失敗的解決方法

用crontab自動備份MySQL的時候匯出總是為空,原因是corn的環境變數中沒有mysqldump,所以用crontab執行mysqldump的時候要加上絕對路徑,如:/yourMySQLPat

mysql定時備份資料庫和刪除N天前資料庫備份

前提,這裡使用 Ubuntu 16.04.4。 mysql定時備份數資料庫: 1.建立備份資料夾和指令碼檔案: mkdir -p /home/mysql_backup/ touch /home/mysql_backup/mysql_backup.sh 2.編輯指令碼檔案(m

定時備份資料庫檔案,定時刪除xx天之前的資料庫備份檔案

1在linux下建立一個指令碼 指令碼中內容為 該指令碼的作用為備份資料庫,生成的資料庫檔案的格式為xxxx20160527.sql   2定時執行備份資料庫指令碼 執行定時任務 點

自動定時備份刪除指令碼

任務:定時備份資料庫所有資料。           定時刪除7天以前的資料 指令碼如下: #!bin/bash dat=`date +%Y%m%d`     mysqldump -uroot -p10qu

Mysql定時備份資料指令碼

專案叢集搭建完成,資料庫雖有做主從同步,但考慮到資料安全性,為了滿足這個需求那麼要每天對資料備份處理, 但每天手動進行備份處理太過於被動,而且白天使用者訪問,會有資料變化以及在備份時會影響伺服器正常執行的效能, 所以考慮寫一個指令碼,並制定一個定時任務進行執行指令碼備份資料; #!/bi

Linux下定時備份資料庫

1.建立備份使用者 create user 'db_backup'@'%' identified by 'db_backup_password'; -- 賦zd_setmeal庫只讀許可權 grant

Ubuntu Linux定時備份資料庫,並上傳到阿里雲OSS

生產環境中可能會遇到各種各樣的問題,為了防止資料丟失和容災,定時備份資料庫就顯得很重要了。本文使用crontab定時執行shell指令碼,shell指令碼中備份MySQL到本地並上傳到阿里雲OSS物件儲存。 先看shell指令碼(shell指令碼處理了資料庫備份,資料庫備份同步上傳雲端,

shell連線mongodb 定時備份shell指令碼

#定時 備份 mongodb表 名稱特點 xxxx_1103_20180503 #!/bin/bash #備份xxxx xxx_1101_20180509 re=$(/root/tools_package/mongodb/bin/mongo xx.xx.xx.xx:xxxx/xxxx -u xxxx -p x

windows下mysql每天定時備份資料庫

新建dbback.bat檔案,內容如下: @echo off set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" D:\MySQL\bin\mysqldump --opt -u root  finance > D:\dbBack\fi

windows下mysql每天定時備份資料庫幾種方法

在windows中備份mysql 資料庫的方法有很多種,如有常用的WinRAR備份mysql、mysqldump備份成sql檔案、xcopy 直接複製檔案形式備份資料庫,下面我來總結一下這些方法,並給出相關例項。 第一種:新建批處理檔案 backup.dat,裡

mysql自動定時備份資料庫的最佳方法-支援windows系統

這個方法是用bat批處理來完成的。 假想環境:MySQL 安裝位置:D:\Program Files\MySQL\MySQL Server 5.0\data 如圖: 資料庫名稱為:952game資料庫備份目的地:d:\db_bak\ (你想把資料庫備份到哪個盤的路

linux 定時備份資料庫並保留七天備份

1、新建一個指令碼檔案backup.sh #!/bin/bash baseDir="/disk1/mysql_server/data_dump/"; cd "$baseDir"; echo "開始備份資料庫"; echo `mysqldump -uroot -p'pas

Linux定時備份資料庫

摘要:一、用命令實現備份首頁進入mysql的bin目錄1、備份資料#mysqldump-uusername-ppassworddiscuz>discuz_2010-04-01.sql這樣就把discuz資料庫所有的表結構和資料備份到discuz_2010-04-01.sql裡了,如果資料

Linux中實現定時備份資料庫

需求分析 1)每天凌晨 2:10 備份 資料庫 mydatebase 到 /data/backup/db 2)備份開始和備份結束能夠給出相應的提示資訊 3)備份後的檔案要求以備份時間為檔名,並打包成 .tar.gz 的形式,比如:2018-12-12_230201.tar.gz 4) 在備

建立mongodb備份和還原使用者並新增定時備份mongodb指令碼

1.建立備份和還原所需要的使用者 > use admin > db.createUser( { user: "backup", pwd: "backup_your_password", roles: [ { role: "re

[資料庫] Navicat for MySQL定時備份資料庫及資料恢復

在做資料庫修改或刪除操作中,可能會導致資料錯誤,甚至資料庫奔潰,而有效的定時備份能很好地保護資料庫。本篇文章主要講述Navicat for MySQL定時備份資料庫和資料恢復等功能,同時可以定時播放電影