天天看點

mysql生産環境備份_如何在生産環境下實作每天自動備份mysql資料庫

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/目錄檢視一下有沒有備份檔案,如果有,則表示腳本執行成功,記得不要搞錯了備份的使用者和密碼。

> 喜歡我的文章,請點選最上方右角處的《關注》支援一下!