mysql 定時備份及恢復腳本
備份
1.數據庫定時備份工作腳本:(日期時間作為名稱的壓縮文件,解壓開是sql腳本)
/root/backup/script/backup_mysql.sh
2.備份輸出路徑:
/root/backup/mysql
3.執行計劃任務的命令:
#crontab -e 打開計劃任務編輯器
#增加如下內容(指定于周日和周四00:00開始執行backup_mysql.sh備份腳本)
0 0 * * 0,4 /root/backup/script/backup_mysql.sh
4.如果對庫新增了數據,也可以手動執行一次備份
#登陸192.168.20.101,命令行下./root/backup/script/backup_mysql.sh 執行腳本
5.文件生產在 /root/backup/mysql/年份日期時間.tar.gz
backup_mysql.sh腳本內容:
#========================start shell 腳本============================
#!/bin/bash
#定義有備份的數據庫名
dbname=zhdatabase1
#定義備份數據庫時使用的用戶名和密碼
dbuser=root dbpasswd=root
#數據庫備份的路徑
backuppath=/root/backup/mysql/
#數據庫備份日志文件存儲的路徑
logfile=/root/backup/log/mysql.log
#以當前的時間作為備份的數據庫命名。
dumpfile=$(date +%y%m%d%H%M)
#這個函數用來備份數據庫
back_db() {
#將備份的時間、數據庫名存入日志
echo "------"$(date +%Y-%m-%d%t%A%t%T)" Beginning database "${dbname}" backup--------" >>${logfile}
#備份數據庫,如果有錯誤信息也記入日志。 默認utf8編碼
/usr/bin/mysqldump -u${dbuser} -p${dbpasswd} --default-character-set=utf8 ${dbname} >${backuppath}${dumpfile}.sql 2>> ${logfile}
#開始壓縮數據文件
echo $(date +%Y-%m-%d%t%A%t%T)" Beginning zip ${backuppath}${dumpfile}.sql" >>${logfile}
#將備份數據庫文件庫壓成ZIP文件,并刪除先前的SQL文件。如果有錯誤信息也記入日志。
tar zcvf ${dumpfile}.tar.gz ${dumpfile}.sql && rm ${dumpfile}.sql 2>> ${logfile}
#將壓縮后的文件名存入日志。
echo "backup file name:"${dumpfile}".tar.gz" >>${logfile}
echo -e "-------"$(date +%Y-%m-%d%t%A%t%T)" Ending database "${dbname}" backup-------\n" >>${logfile}
}
#定義有備份的數據庫名
dbname=zhdatabase1
#定義備份數據庫時使用的用戶名和密碼
dbuser=root dbpasswd=root
#數據庫備份的路徑
backuppath=/root/backup/mysql/
#數據庫備份日志文件存儲的路徑
logfile=/root/backup/log/mysql.log
#以當前的時間作為備份的數據庫命名。
dumpfile=$(date +%y%m%d%H%M)
#這個函數用來備份數據庫
back_db() {
#將備份的時間、數據庫名存入日志
echo "------"$(date +%Y-%m-%d%t%A%t%T)" Beginning database "${dbname}" backup--------" >>${logfile}
#備份數據庫,如果有錯誤信息也記入日志。 默認utf8編碼
/usr/bin/mysqldump -u${dbuser} -p${dbpasswd} --default-character-set=utf8 ${dbname} >${backuppath}${dumpfile}.sql 2>> ${logfile}
#開始壓縮數據文件
echo $(date +%Y-%m-%d%t%A%t%T)" Beginning zip ${backuppath}${dumpfile}.sql" >>${logfile}
#將備份數據庫文件庫壓成ZIP文件,并刪除先前的SQL文件。如果有錯誤信息也記入日志。
tar zcvf ${dumpfile}.tar.gz ${dumpfile}.sql && rm ${dumpfile}.sql 2>> ${logfile}
#將壓縮后的文件名存入日志。
echo "backup file name:"${dumpfile}".tar.gz" >>${logfile}
echo -e "-------"$(date +%Y-%m-%d%t%A%t%T)" Ending database "${dbname}" backup-------\n" >>${logfile}
}
#發送郵件
#cat ${logfile} | mutt -s "Blog數據庫備份" -a ${dumpfile}.tar.gz 8chf@163.com }
#這個函數用來刪除90天前的數據,注意,這個腳本會刪除當前目錄下所有的早于七天前的文件
rm_oldfile() {
#查找出當前目錄下90天前生成的文件,并將之刪除
find /root/backup/mysql -type f -mtime +90 -exec rm {} \;
}
#切換到數據庫備份的目錄。如果不做這個操作,壓縮文件時有可能會錯誤
cd ${backuppath}
#運行備份數據函數
back_db
#運行刪除文件函數
rm_oldfile
#添加自動運行計劃任務(每周日,每周四,00:00執行腳本)
#crontab -e
#00 00 * * 00,04 /root/backup/script/backup_mysql.sh
#添加自動運行計劃任務(每周日,每周四,00:00執行腳本)
#crontab -e
#00 00 * * 00,04 /root/backup/script/backup_mysql.sh
#====================end shell 腳本======================
1. 恢復備份的數據庫
注:數據庫備份為"年份日期時間.tar.gz"的壓縮文件,解壓后為sql文件。如:201206271633.tar.gz :代表2012年06月27日16點33分.tar.gz
#1 winscp 登陸mysql服務器 取出/root/backup/mysql/下的最后備份的.tar.gz
#2 解壓
#3 使用數據庫管理工具navicat 新建一個“數據庫”,然后打開,右鍵“表”,彈出菜單選
擇“運行批次任務文件”導入sql文件,選擇utf8編碼,執行即可還原表結構數據(默認utf8編碼)。
#test數據庫為測試數據庫,隨便導入測試
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!