濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > Shell腳本自動(dòng)備份MySQL到FTP并定期清理過期備份

Shell腳本自動(dòng)備份MySQL到FTP并定期清理過期備份

熱門標(biāo)簽:地圖標(biāo)注輻射圖案 曲阜400電話辦理 衛(wèi)星地圖標(biāo)注地名 安裝外呼系統(tǒng)費(fèi)用 申請(qǐng)公司400電話要注意什么 寧波智能外呼系統(tǒng)公司 聯(lián)通電話機(jī)器人怎么接 奧維互動(dòng)地圖標(biāo)注參數(shù) 電銷機(jī)器人 劍魚

以前公司用的一個(gè)網(wǎng)上找的MySQL自動(dòng)備份到FTP的Shell腳本,一直用著不錯(cuò)。但是問題就是隨著備份文件的越來越多,不得不定期清理FTP上的老備份文件,十分的不便。

實(shí)際上MySQL備份無需保留太長時(shí)間的,如果能有自動(dòng)清理舊的備份文件的功能就好了。不過網(wǎng)上找了一下,雖然也有這方面的腳本,不過可能不太符合我的需求吧。于是只能自己手動(dòng)改下以前的那個(gè)Shell腳本來實(shí)現(xiàn)咯。

首先我們要確定保留備份的時(shí)間,我覺得一個(gè)月的備份保留就足夠了。因?yàn)榛静粫?huì)出現(xiàn)1個(gè)月后要恢復(fù)1個(gè)月之前備份的情況。(如果有請(qǐng)自己手動(dòng)備份,畢竟自動(dòng)備份還是不能取代手動(dòng)備份的部分)。那么我們的思路就出來了:在上傳以當(dāng)天日期為文件名的備份的時(shí)候,順便刪除下一個(gè)月之前的同日期備份,就可以確保服務(wù)器上保留的是最近一個(gè)月的備份了。

然后我們需要知道Linux下的一個(gè)命令:date。這是個(gè)可以查看當(dāng)前服務(wù)器的時(shí)間日期信息的命令。當(dāng)然這里我們需要知道的是這個(gè)命令的參數(shù),畢竟我們需要得到的是日期部分。

輸入下面這個(gè)命令,可以看到“年-月-日”的輸入,類似“2011-09-09”:

復(fù)制代碼 代碼如下:

date +%Y-%m-%d

那么,如果我們要得到1個(gè)月之前的日期怎么辦呢?使用下面的這條命令就可以得到:

復(fù)制代碼 代碼如下:

date -d last-month +%Y-%m-%d

怎么樣?簡單吧。實(shí)際備份的時(shí)候,因?yàn)橹澳_本使用的是“m-d-Y”的形式,也就是“月-日-年”的形式,所以我稍微做了下調(diào)整。但是下面這個(gè)Shell腳本中的是按照“年-月-日”來產(chǎn)生文件名的。

于是,給出整個(gè)備份Shell腳本,需要的朋友只需要填寫下有中文說明的部分,即可在自己的Linux服務(wù)器上使用。使用辦法:復(fù)制到某個(gè)目錄下,然后給予執(zhí)行權(quán)限,再在cron中設(shè)置每天指定時(shí)間運(yùn)行即可。(關(guān)于這部分,請(qǐng)自行查找相關(guān)說明,這里不再復(fù)述)

帶自動(dòng)清理功能的MySQL備份到FTP的Shell腳本如下:

復(fù)制代碼 代碼如下:

#!/bin/bash
 
MyUSER="db_username"     # 數(shù)據(jù)庫用戶名,建議使用root賬戶或者擁有全局權(quán)限的用戶名
MyPASS="db_password"       # 數(shù)據(jù)庫密碼
MyHOST="localhost"          # 數(shù)據(jù)庫服務(wù)器
 
# Linux bin paths, change this if it can't be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"
 
# 數(shù)據(jù)庫備份的路徑
DEST="/home/backup"
 
# Main directory where backup will be stored
MBD="$DEST/mysql"
 
# Get hostname
HOST="$(hostname)"
 
# Get data in dd-mm-yyyy format
NOW="$(date +%d-%m-%Y)"
OLD="$(date -d last-month +%d-%m-%Y)"
 
# File to store current backup file
FILE=""
# Store list of databases
DBS=""
 
# DO NOT BACKUP these databases
IGGY="test"
 
rm -rf $MBD
 
[ ! -d $MBD ] mkdir -p $MBD || :
 
# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST
 
# Get all database list first
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
 
cat > ftpcc.sh EOF
cd $MBD
ftp -i -n!
open blog.renhao.org #在這里填寫FTP服務(wù)器的域名或IP
user ftp_user ftp_pass #在這里填寫FTP用戶名和密碼,注意空格分隔
binary
mput *.gz
EOF
 
for db in $DBS
do
    skipdb=-1
    if [ "$IGGY" != "" ];
    then
        for i in $IGGY
        do
            [ "$db" = "$i" ] skipdb=1 || :
        done
    fi
 
    if [ "$skipdb" = "-1" ] ; then
        FILE="$MBD/$db.$HOST.$NOW.gz"
        echo "delete $db.$HOST.$OLD.gz" >> ftpcc.sh
        # do all inone job in pipe,
        # connect to mysql using mysqldump for select mysql database
        # and pipe it out to gz file in backup dir :)
        $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
    fi
done
 
cat >> ftpcc.sh EOF
close
bye
!
EOF
 
sh ftpcc.sh
rm ftpcc.sh

這樣的Shell腳本運(yùn)行后,可以得到每個(gè)MySQL庫的獨(dú)立備份文件,且以gz格式壓縮以便節(jié)省空間。

您可能感興趣的文章:
  • Mysql數(shù)據(jù)庫清理binlog日志命令詳解
  • mysql數(shù)據(jù)庫如何實(shí)現(xiàn)億級(jí)數(shù)據(jù)快速清理
  • 用批處理實(shí)現(xiàn)自動(dòng)備份和清理mysql數(shù)據(jù)庫的代碼
  • 清理Mysql general_log的方法總結(jié)
  • 阿里云mysql空間清理的方法
  • 如何徹底刪除mysql服務(wù)(清理注冊表)詳解
  • mysql 正確清理binlog日志的兩種方法
  • MySQL 自動(dòng)清理binlog日志的方法
  • 解析mysql 表中的碎片產(chǎn)生原因以及清理
  • php數(shù)據(jù)入庫前清理 注意php intval與mysql的int取值范圍不同
  • MySQL 線上數(shù)據(jù)庫清理數(shù)據(jù)的方法

標(biāo)簽:仙桃 上饒 安康 大興安嶺 大慶 江西 三門峽 遵義

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell腳本自動(dòng)備份MySQL到FTP并定期清理過期備份》,本文關(guān)鍵詞  Shell,腳本,自動(dòng),備份,MySQL,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Shell腳本自動(dòng)備份MySQL到FTP并定期清理過期備份》相關(guān)的同類信息!
  • 本頁收集關(guān)于Shell腳本自動(dòng)備份MySQL到FTP并定期清理過期備份的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    永福县| 清水河县| 永兴县| 石景山区| 鸡泽县| 买车| 清远市| 孙吴县| 朝阳市| 海淀区| 普陀区| 陇南市| 项城市| 潍坊市| 班戈县| 城市| 炎陵县| 宝丰县| 青海省| 白朗县| 雷波县| 宁明县| 信阳市| 资兴市| 德化县| 石家庄市| 临夏县| 三明市| 桃园县| 株洲县| 三都| 潍坊市| 九龙城区| 宝鸡市| 隆尧县| 永定县| 库尔勒市| 黄浦区| 闽清县| 桦甸市| 乌审旗|