1、描述
我相信很多朋友在工作都都會有這種需求,老闆或上司讓你每天都要備份mysql資料庫,你該如何實作呢,是每天到一定的時間在伺服器上敲一遍mysql的備份指令,還是想寫個腳本,定時定點的自動備份呢?我相信大家都想讓它自動備份,接下來我通"shell腳本+定時任務"的方式來實作自動備份mysql資料庫。
2、環境
備份路徑:/data/mysqlbak/
備份腳本:/data/mysqlbak/mysqlbak.sh
備份時間:每天23:59備份
備份要求:比如備份的資料隻保留1周
3、mysqlbak.sh腳本#!/bin/bash
#資料庫IP
dbserver='127.0.0.1'
#資料庫使用者名
dbuser='root'
#資料密碼
dbpasswd='********'
#資料庫,如有多個庫用空格分開
dbname='back01'
#備份時間
backtime=`date +%Y%m%d`
#備份輸出日志路徑
logpath='/data/mysqlbak/'
echo "################## ${backtime} #############################"
echo "開始備份"
#日志記錄頭部
echo "" >> ${logpath}/mysqlback.log
echo "-------------------------------------------------" >> ${logpath}/mysqlback.log
echo "備份時間為${backtime},備份資料庫表 ${dbname} 開始" >> ${logpath}/mysqlback.log
#正式備份資料庫
for table in $dbname; do
source=`mysqldump -h ${dbserver} -u ${dbuser} -p${dbpasswd} ${table} > ${logpath}/${backtime}.sql` 2>> ${logpath}/mysqlback.log;
#備份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#為節約硬碟空間,将資料庫壓縮
tar zcf ${table}${backtime}.tar.gz ${backtime}.sql > /dev/null
#删除原始檔案,隻留壓縮後檔案
rm -f ${datapath}/${backtime}.sql
#删除七天前備份,也就是隻儲存7天内的備份
find $datapath -name "*.tar.gz" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo "資料庫表 ${dbname} 備份成功!!" >> ${logpath}/mysqlback.log
else
#備份失敗則進行以下操作
echo "資料庫表 ${dbname} 備份失敗!!" >> ${logpath}/mysqlback.log
fi
done
echo "完成備份"
echo "################## ${backtime} #############################"
腳本寫好了,你要記得為腳本加上執行權限:#chmod +x /data/mysqlbak/mysqlbak.sh
4、配置定時任務執行腳本#crontab -e
59 23 * * * /data/mysqlbak/mysqlbak.sh
參數說明:
格式為 :分 時 日 月 周 指令
59 23 * * * :每天23:59分自動執行腳本
M: 分鐘(0-59)。每分鐘用*或者 */1表示
H:小時(0-23)。(0表示0點)
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0為星期天)。
提示:最好你先執行一下腳本能不能跑通,然後在寫到crontab中,等執行完了,進入/data/mysqlbak/目錄檢視一下有沒有備份檔案,如果有,則表示腳本執行成功,記得不要搞錯了備份的使用者和密碼。
> 喜歡我的文章,請點選最上方右角處的《關注》支援一下!