mysql使用mysqldump和crontab定時備份


1,

安裝crontab

yum install vixie-cron

yum install crontabs

 

說明:
vixie-cron軟件包是cron的主程序;
crontabs軟件包是用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序。
cron 是linux的內置服務,但它不自動起來,可以用以下的方法啟動、關閉這個服務:

/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置

查看crontab服務狀態:

service crond status

手動啟動crontab服務:

service crond start

查看crontab服務是否已設置為開機啟動,執行命令:

ntsysv

加入開機自動啟動:

chkconfig --level 35 crond on

 

2,

賦予腳本執行權限

chmod 777 test.sh

添加定時任務

crontab -e

添加這段定時命令

 

*/5 * * * * /home/test.sh

 

說明:

運行crontab –e 編寫一條定時任務 */5 * * * * /home/test.sh 在每5分鍾執行一次test.sh腳本

查看當前所有定時任務

crontab -l

刪除當前定時任務

 

每隔12小時備份一次

1 */12 * * * /usr/local/backup/backupMysql.sh  

每天凌晨1點刪除一個月之前的備份

1 1 * * * /usr/local/backup/delBackupMysql.sh

 

 

備份腳本

ADDRESS="120.120.120.120"
PORT="3306"
USER="root" PASSWORD="數據庫密碼" DATABASE1="jxt" #DATABASE2=zabbix BACKUP_DIR="/usr/local/backup/mysql" #備份數據庫文件的路徑 LOGFILE="/usr/local/backup/mysql/data_backup.log" #備份數據庫腳本的日志文件 DATE=`date +%Y%m%d-%H%M -d -3minute` #獲取當前系統時間-3分鍾 DUMPFILE1="$DATE-jxt.sql" #需要備份的數據庫名稱 #DUMPFILE2=$DATE-zabbix.sql ARCHIVE1="$DUMPFILE1.gz" #備份的數據庫壓縮后的名稱 #ARCHIVE2=$DUMPFILE2-tar.gz #cat /usr/local/backup #!/bin/bash #Shell Command For Backup MySQL Database Everyday Automatically By Crontab #time 2015-5-20 if [ ! -d $BACKUP_DIR ]; #判斷備份路徑是否存在,若不存在則創建該路徑 then mkdir -p "$BACKUP_DIR" fi echo -e "\n" >> $LOGFILE echo "------------------------------------" >> $LOGFILE echo "BACKUP DATE:$DATE">> $LOGFILE echo "------------------------------------" >> $LOGFILE cd $BACKUP_DIR #跳到備份路徑下 /usr/local/mysql/bin/mysqldump -h$ADDRESS -P$PORT -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1 #使用mysqldump備份數據庫 if [[ $? == 0 ]]; then tar czvf $ARCHIVE1 $DUMPFILE1 >> $LOGFILE 2>&1 #判斷是否備份成功,若備份成功,則壓縮備份數據庫,否則將錯誤日志寫入日志文件中去。 echo "$ARCHIVE1 BACKUP SUCCESSFUL!" >> $LOGFILE rm -f $DUMPFILE1 else echo “$ARCHIVE1 Backup Fail!” >> $LOGFILE fi # /usr/local/mysql/bin/mysqldump -u$USER -p$PASSWORD $DATABASE2 > $DUMPFILE2 # if [[ $? == 0 ]]; then # tar czvf $ARCHIVE2 $DUMPFILE2 >> $LOGFILE 2>&1 # echo "$ARCHIVE2 BACKUP SUCCESSFUL!" >> $LOGFILE # rm -f $DUMPFILE2 # else # echo “$ARCHIVE2 Backup Fail!” >> $LOGFILE # fi

注意:mysqldump 在備份的時候會鎖表,如果在生產環境,會造成業務奔潰。那如何解決呢

方案一:有主從數據庫,binlog主從同步數據后,在從庫使用mysqldump 去備份數據

方案二:加一個參數:--single-transaction,僅對支持事務的表有效,比如InnoDB,對非事務型的表比如MyISAM`則沒有效果。

/usr/local/mysql/bin/mysqldump  --single-transaction -h$ADDRESS -P$PORT -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1

 

 

刪除腳本

BACKUPDIR="/usr/local/backup/mysql/"                            #定義備份文件路徑 
KEEPTIME=30                                                           #定義需要刪除的文件距離當前的天數 
DELFILE=`find $BACKUPDIR -type f -mtime +$KEEPTIME -exec ls {} \;`     #找到天數大於KEEPTIME天的文件 
for delfile in ${DELFILE}                                              #循環刪除滿足天數大於七天的文件 
do 
rm -f $delfile 
done

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM