Centos7中自動備份mysql資料庫
阿新 • • 發佈:2019-01-30
邏輯很簡單,通過linux的crontab定時執行bash指令碼完成mysql資料庫備份。接下來就是寫bash指令碼和設定定時任務。
bash指令碼實現資料庫自動備份
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH #資料庫使用者名稱 dbuser='root' #資料庫用密碼 dbpasswd='root' 需要備份的資料庫,多個數據庫用空格分開 dbname='test' #備份時間 backtime=`date +%Y%m%d%H%M%S` #日誌備份路徑 logpath='/home/database_backup/test' #資料備份路徑 datapath='/home/database_backup/test' #日誌記錄頭部 echo ‘"備份時間為${backtime},備份資料庫表 ${dbname} 開始" >> ${logpath}/log.log #正式備份資料庫 for table in $dbname; do source=`mysqldump -u ${dbuser} -p${dbpasswd} ${table}> ${logpath}/${backtime}.sql` 2>> ${logpath}/mysqllog.log; #備份成功以下操作 if [ "$?" == 0 ];then cd $datapath #為節約硬碟空間,將資料庫壓縮 tar jcf ${table}${backtime}.tar.bz2 ${backtime}.sql > /dev/null #刪除原始檔案,只留壓縮後文件 rm -f ${datapath}/${backtime}.sql #刪除七天前備份,也就是隻儲存7天內的備份 find $datapath -name "*.tar.bz2" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1 echo "資料庫表 ${dbname} 備份成功!!" >> ${logpath}/mysqllog.log else #備份失敗則進行以下操作 echo "資料庫表 ${dbname} 備份失敗!!" >> ${logpath}/mysqllog.log fi done
測試一下是否有效:
./bashup.sh
如果生效則可以在日誌和資料庫備份路徑內看到新增的檔案。有可能backup.sh沒有許可權在資料夾內新增檔案,可為資料夾設定許可權:
sudo chmod a+w test
為test資料夾設定許可權。
設定crontab
開啟crontab檔案可以看到crontab的格式 “mm HH dd MM week user-name command” ,例如:
59 23 * * * /bin/bash /home/database_back_bachup.sh
意思是在每天的23:59執行/home/database_back_bachup.sh,執行者是/bin/bash,shell檔案的預設執行者是bash,所以寫成如是一樣的:
59 23 * * * /home/database_back_bachup.sh
設定crontab
crontab -e
在文字中加入一行任務即可:
59 23 * * * /home/database_back_bachup.sh
檢視crontab日誌
想知道定時任務有沒有執行,檢視crontab日誌即可
sudo cat /var/log/cron
檢視crontab格式
vi /etc/crontab