Shellスクリプトは自動的にMySQLをFTPにバックアップし、期限切れのバックアップを定期的に整理します。


以前会社が使っていたインターネットで探していたMySQLは自動的にFTPのShell脚本にバックアップして、ずっと使っています。しかし、問題はバックアップファイルが多くなるにつれて、定期的にFTP上の古いバックアップファイルを整理しなければならなくなり、とても不便です。
実際にMySQLのバックアップはあまり長く保持する必要はありません。古いバックアップファイルを自動的に整理する機能があればいいです。でも、ネットで探してみました。この方面の脚本もありますが、私の需要に合わないかもしれません。自分で手动で以前のシェルシナリオを変えて実现するしかないですね。
まず、私たちはバックアップを保留する時間を決めます。一ヶ月のバックアップを保留すれば十分だと思います。基本的には1ヶ月後に1ヶ月前のバックアップを回復することはないからです。(自分で手動でバックアップしてください。自動バックアップはやはりマニュアルバックアップの部分に取って代わることができません。その日の日付をファイル名にしたバックアップをアップロードする際、ついでに次の月までの同じ日付のバックアップを削除して、サーバーに保留されているのが最近の一ヶ月のバックアップです。
そして、我々はLinuxの次の命令を知る必要があります。現在のサーバの日時情報を確認できるコマンドです。もちろんここではこのコマンドのパラメータを知る必要があります。結局、私たちが必要なのは日付の部分です。
このコマンドを入力すると、「年-月-日」の入力が見られます。

date +%Y-%m-%d
もし私たちが一ヶ月前の日付をもらうならどうすればいいですか?次のコマンドを使えば得られます。

date -d last-month +%Y-%m-%d
どうですか?簡単でしょう。実際のバックアップの時は、以前のシナリオでは「m-d-Y」という形で「月-日-年」という形をしていましたので、少し調整してみました。しかし、以下のShellシナリオでは、「年-月-日」によってファイル名が作成されます。
そこで、Shellスクリプト全体をバックアップします。必要な友達は中国語の説明がある部分だけを記入して、自分のLinuxサーバーで使用できます。使用方法:あるディレクトリにコピーして実行権限を与え、毎日指定時間を設定してください。この部分については、自分で関連説明を調べてください。ここでは復唱しません。
自動クリーン機能付きMySQLはFTPのシェルスクリプトにバックアップされます。

#!/bin/bash
 
MyUSER="db_username"     # , root
MyPASS="db_password"       #
MyHOST="localhost"          #
 
# 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)"
 
#
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 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スクリプトが実行されると、MySQLライブラリごとに独立したバックアップファイルが得られ、空間を節約するためにgz形式で圧縮されます。