MySQL定時(shí)備份方案(利用Linux crontab)
前言
雖說現(xiàn)在這世道有些愛情是有價(jià)的,但是數(shù)據(jù)是無價(jià)的,數(shù)據(jù)備份是尤為的重要,可以在你未來的某一天不小心刪庫了,不用著急跑路。
本片文章介紹的方案是利用Linux自身的crontab定時(shí)任務(wù)功能,定時(shí)執(zhí)行備份數(shù)據(jù)庫的腳本。
技術(shù)要點(diǎn):
- 數(shù)據(jù)庫備份dump命令
- shell腳本
- Linux定時(shí)任務(wù)crontab
數(shù)據(jù)備份dump
數(shù)據(jù)庫都有一個(gè)導(dǎo)出數(shù)據(jù)庫內(nèi)數(shù)據(jù)和結(jié)構(gòu)的命令,就是備份。
將備份的數(shù)據(jù)還原會(huì)將原來的數(shù)據(jù)中的表刪了重建,再插入備份中的數(shù)據(jù),這是恢復(fù)。
這一點(diǎn)需要注意,如果恢復(fù)之前的數(shù)據(jù)比備份的多,恢復(fù)后多的數(shù)據(jù)就沒有了。
列出我常用的兩種數(shù)據(jù)庫的備份和恢復(fù)命令
postgresql:
備份 pg_dump -h [ip] -U [用戶名] [庫名] >[導(dǎo)出的.sql 文件]
恢復(fù) psql -s [庫名] -f [導(dǎo)出.sql 文件]
mysql:
備份 mysqldump -h -u [用戶名] -p [庫名] > [導(dǎo)出的.sql 文件]
恢復(fù) mysql -u [用戶名] -p [庫名] < [導(dǎo)出的.sql 文件]
shell腳本
要完成一個(gè)功能完善的備份方案,就需要shell腳本。
我們要讓這個(gè)腳本備份到指定路徑,并壓縮存放,最多30個(gè),超過30個(gè)刪除最早的,并記錄操作日志。
啥也不說了,話都在腳本里,干了!
#用戶名 username=root #密碼 password=nicai #將要備份的數(shù)據(jù)庫 database_name=l_love_you #保存?zhèn)浞菸募疃鄠€(gè)數(shù) count=30 #備份保存路徑 backup_path=/app/mysql_backup #日期 date_time=`date +%Y-%m-%d-%H-%M` #如果文件夾不存在則創(chuàng)建 if [ ! -d $backup_path ]; then mkdir -p $backup_path; fi #開始備份 mysqldump -u $username -p$password $database_name > $backup_path/$database_name-$date_time.sql #開始?jí)嚎s 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 #找出需要?jiǎng)h除的備份 delfile=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | head -1` #判斷現(xiàn)在的備份數(shù)量是否大于閾值 number=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | wc -l` if [ $number -gt $count ] then #刪除最早生成的備份,只保留count數(shù)量的備份 rm $delfile #更新刪除文件日志 echo "delete $delfile" >> $backup_path/dump.log fi
給腳本起個(gè)顧名思義的漂亮名字 dump_mysql.sh
給腳本賦予可執(zhí)行權(quán)限 chmod +x dump_mysql.sh , 執(zhí)行后腳本變綠了就是可實(shí)行文件
執(zhí)行方法:./加腳本名稱
chmod命令參數(shù)含義--
+ 代表添加某些權(quán)限
x 代表可執(zhí)行權(quán)限
定時(shí)任務(wù)crontab
crontab是Linux自帶的一個(gè)定時(shí)任務(wù)功能,我們可以利用它每天凌晨執(zhí)行一次 dump_mysql.sh 腳本。
crontab用法:
- crontab -l 查看定時(shí)任務(wù)列表
- crontab -e 編輯(新增/刪除)定時(shí)任務(wù)
運(yùn)行crontab -e
命令,打開一個(gè)可編輯的文本,輸入 00 01 * * * /app/dump_mysql.sh
保本并退出即添加完成。
內(nèi)容解釋:
00 01 * * * /app/dump_mysql.sh
分兩部分看,
第一部分 00 01 * * * 是定時(shí)任務(wù)的周期,第二部分 /app/dump_mysql.sh 到時(shí)間做的事情。
周期表達(dá)式是五個(gè)占位符,分別代表: 分鐘、小時(shí)、日、月、星期
占位符用 * 表示 每 ,用在第一位就是每分鐘,第二位每小時(shí),依此類推
占位符用 具體數(shù)字 表示 具體時(shí)間 ,10用在第一位就是10分,用在第三位表示10號(hào),依此類推
占位符用 - 表示 區(qū)間 ,5-7用在第一位就是5分到7分,用在第五位表示周5到周日,依此類推
占位符用 / 表示 間隔 ,5-10/2用在第一位就是5分到10分間隔2分鐘,用在第二位表示5點(diǎn)到10點(diǎn)間隔2小時(shí),依此類推
占位符用 , 表示 列表 ,5,10用在第一位就是5分和10分,用在第四位表示5月和10月,依此類推
總結(jié)
到此這篇關(guān)于MySQL定時(shí)備份方案的文章就介紹到這了,更多相關(guān)MySQL定時(shí)備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中distinct和count(*)的使用方法比較
這篇文章主要針對(duì)MySQL中distinct和count(*)的使用方法比較,對(duì)兩者之間的使用方法、效率進(jìn)行了詳細(xì)分析,感興趣的小伙伴們可以參考一下2015-11-11MySQL中distinct語句去查詢重復(fù)記錄及相關(guān)的性能討論
這篇文章主要介紹了MySQL中distinct語句去查詢重復(fù)記錄及相關(guān)的性能討論,文中的觀點(diǎn)是在一定情況下避免在最高層查詢中使用distinct,需要的朋友可以參考下2016-01-01MySQL實(shí)現(xiàn)去重的幾種方法小結(jié)
在MySQL中,SELECT DISTINCT 和 GROUP BY 可以用來去除重復(fù)記錄,二者有相似的功能,但在某些情況下有所不同,本文將通過代碼示例給大家詳細(xì)介紹這幾種方法,感興趣的小伙伴跟著小編一起來看看吧2024-07-07mysql常用日期時(shí)間/數(shù)值函數(shù)詳解(必看)
下面小編就為大家?guī)硪黄猰ysql常用日期時(shí)間/數(shù)值函數(shù)詳解(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06MySQL數(shù)據(jù)遷移相關(guān)總結(jié)
這篇文章主要介紹了MySQL數(shù)據(jù)遷移的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2021-04-04