MySQL定時備份方案

雖然說如今這世道有些愛情是有價的,可是數據是無價的,數據備份是尤其的重要,能夠在你將來的某一天不當心刪庫了,不用着急跑路。

image

本片文章介紹的方案是利用Linux自身的crontab定時任務功能,定時執行備份數據庫的腳本。mysql

技術要點:

  • 數據庫備份dump命令
  • shell腳本
  • Linux定時任務crontab

數據備份dump

數據庫都有一個導出數據庫內數據和結構的命令,就是備份。
將備份的數據還原會將原來的數據中的表刪了重建,再插入備份中的數據,這是恢復。
這一點須要注意,若是恢復以前的數據比備份的多,恢復後多的數據就沒有了。sql

列出我經常使用的兩種數據庫的備份和恢復命令shell

postgresql:

備份 pg_dump -h [ip] -U [用戶名] [庫名] >[導出的.sql 文件]
恢復 psql -s [庫名] -f [導出.sql 文件]數據庫

mysql:

備份 mysqldump -h -u [用戶名] -p [庫名] > [導出的.sql 文件]
恢復 mysql -u [用戶名] -p [庫名] < [導出的.sql 文件]app

shell腳本

要完成一個功能完善的備份方案,就須要shell腳本。
咱們要讓這個腳本備份到指定路徑,並壓縮存放,最多30個,超過30個刪除最先的,並記錄操做日誌。
啥也不說了,話都在腳本里,幹了!post

#用戶名
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, 執行後腳本變綠了就是可實行文件
執行方法:./加腳本名稱spa

chmod命令參數含義--
+ 表明添加某些權限
x 表明可執行權限

定時任務crontab

crontab是Linux自帶的一個定時任務功能,咱們能夠利用它天天凌晨執行一次dump_mysql.sh腳本。3d

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到時間作的事情。
週期表達式是五個佔位符,分別表明:分鐘、小時、日、月、星期postgresql

佔位符用*表示,用在第一位就是每分鐘,第二位每小時,依此類推
佔位符用具體數字表示具體時間,10用在第一位就是10分,用在第三位表示10號,依此類推
佔位符用-表示區間,5-7用在第一位就是5分到7分,用在第五位表示周5到週日,依此類推
佔位符用/表示間隔,5-10/2用在第一位就是5分到10分間隔2分鐘,用在第二位表示5點到10點間隔2小時,依此類推
佔位符用,表示列表,5,10用在第一位就是5分和10分,用在第四位表示5月和10月,依此類推

相關文章
相關標籤/搜索