1. 程式人生 > 資料庫 >MySQL定時備份方案(利用Linux crontab)

MySQL定時備份方案(利用Linux crontab)

前言

雖說現在這世道有些愛情是有價的,但是資料是無價的,資料備份是尤為的重要,可以在你未來的某一天不小心刪庫了,不用著急跑路。

MySQL定時備份方案(利用Linux crontab)

本片文章介紹的方案是利用Linux自身的crontab定時任務功能,定時執行備份資料庫的指令碼。

技術要點:

  • 資料庫備份dump命令
  • shell指令碼
  • Linux定時任務crontab

資料備份dump

資料庫都有一個匯出資料庫內資料和結構的命令,就是備份。

將備份的資料還原會將原來的資料中的表刪了重建,再插入備份中的資料,這是恢復。

這一點需要注意,如果恢復之前的資料比備份的多,恢復後多的資料就沒有了。

列出我常用的兩種資料庫的備份和恢復命令

postgresql:

備份 pg_dump -h [ip] -U [使用者名稱] [庫名] >[匯出的.sql 檔案]

恢復 psql -s [庫名] -f [匯出.sql 檔案]

mysql:

備份 mysqldump -h -u [使用者名稱] -p [庫名] > [匯出的.sql 檔案]

恢復 mysql -u [使用者名稱] -p [庫名] < [匯出的.sql 檔案]

shell指令碼

要完成一個功能完善的備份方案,就需要shell指令碼。

我們要讓這個指令碼備份到指定路徑,並壓縮存放,最多30個,超過30個刪除最早的,並記錄操作日誌。

啥也不說了,話都在腳本里,幹了!

#使用者名稱
username=root
#密碼
password=nicai
#將要備份的資料庫
database_name=l_love_you

#儲存備份檔案最多個數
count=30
#備份儲存路徑
backup_path=/app/mysql_backup
#日期
date_time=`date +%Y-%m-%d-%H-%M`

#如果資料夾不存在則建立
if [ ! -d $backup_path ]; 
then  
 mkdir -p $backup_path; 
fi
#開始備份
mysqldump -u $username -p$password $database_name > $backup_path/$database_name-$date_time.sql
#開始壓縮
cd $backup_path
tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql
#刪除原始檔
rm -rf $backup_path/$database_name-$date_time.sql
#更新備份日誌
echo "create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log

#找出需要刪除的備份
delfile=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | head -1`

#判斷現在的備份數量是否大於閾值
number=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | wc -l`

if [ $number -gt $count ]
then
 #刪除最早生成的備份,只保留count數量的備份
 rm $delfile
 #更新刪除檔案日誌
 echo "delete $delfile" >> $backup_path/dump.log
fi

給指令碼起個顧名思義的漂亮名字 dump_mysql.sh

給指令碼賦予可執行許可權 chmod +x dump_mysql.sh,執行後腳本變綠了就是可實行檔案

執行方法:./加指令碼名稱

chmod命令引數含義--
+ 代表新增某些許可權
x 代表可執行許可權

定時任務crontab

crontab是Linux自帶的一個定時任務功能,我們可以利用它每天凌晨執行一次 dump_mysql.sh 指令碼。

crontab用法:

  • crontab -l 檢視定時任務列表
  • crontab -e 編輯(新增/刪除)定時任務

執行crontab -e命令,開啟一個可編輯的文字,輸入 00 01 * * * /app/dump_mysql.sh

保本並退出即新增完成。

內容解釋:

00 01 * * * /app/dump_mysql.sh 分兩部分看,

第一部分 00 01 * * * 是定時任務的週期,第二部分 /app/dump_mysql.sh 到時間做的事情。

週期表達式是五個佔位符,分別代表: 分鐘、小時、日、月、星期

佔位符用 * 表示 每 ,用在第一位就是每分鐘,第二位每小時,依此類推

佔位符用 具體數字 表示 具體時間 ,10用在第一位就是10分,用在第三位表示10號,依此類推

佔位符用 - 表示 區間 ,5-7用在第一位就是5分到7分,用在第五位表示周5到週日,依此類推

佔位符用 / 表示 間隔 ,5-10/2用在第一位就是5分到10分間隔2分鐘,用在第二位表示5點到10點間隔2小時,依此類推

佔位符用,表示 列表 ,5,10用在第一位就是5分和10分,用在第四位表示5月和10月,依此類推

總結

到此這篇關於MySQL定時備份方案的文章就介紹到這了,更多相關MySQL定時備份內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!