mysql全量備份腳本

#!/bin/sh
###############################
# 此腳本用來全量備份
# 此文件名:mysqlfullbackup.sh
#
# Author: zhanrox
# mail: hienha@163.com
# create: 2013/06/29
#
# 每一個星期日早上3點作一次全量備份(加 & 爲後臺執行)
# 0 3 * * * root /backup/mysql/full_backup/mysqlfullbackup.sh &
###############################

#設置用戶名和密碼
mysql_user="root"
mysql_password=""

#mysql安裝全路徑
mysql_dir=/usr/local/mysql/bin

#備份數據庫(多數據庫,用逗號隔開)
mysql_databases="quanfan"

#設置備份路徑,建立備份文件夾
[ -d /backup/mysql ] || mkdir /backup/mysql
backup_dir=/backup/mysql
full_backup_dir=$backup_dir/full_backup

#備份的時間
today=$(date +%Y%m%d_%H%M%S)

#備份日誌文件
log_file=full_backup.log

#只保留最近10個星期的備份(其餘刪除)
time=$(date "-d 70 day ago" +%Y-%m-%d %H:%M:%S)

#開始備份,記錄備份開始時間 並壓縮備份文件
echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"備份開始\n" >> $backup_dir/$log_file

#判斷目標目錄是否已經存在
if [! -d $full_backup_dir] then
    mkdir -p $full_backup_dir
fi

echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"備份並壓縮備份文件\n" >> $backup_dir/$log_file

#備份INNODB 使用下面代碼 並壓縮備份文件
#$mysql_dir/mysqldump -u$mysql_user -p$mysql_password --apply-slave-statements --hex-blob --routines --single-transaction --databases $mysql_databases | gzip > $full_backup_dir/$today.sql.gz

${mysql_dir}/bin/mysqldump -uroot -p${mysql_password} --add-drop-database --all-databases --all-tablespaces --routines --lock-all-tables | gzip > ${backup_dir}/${today}.sql.gz
[ $? -eq 0 ] && echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - 'All DB' - '"備份並壓縮備份文件 OK!!!\n" >> $backup_dir/$log_file

#備份MyISAM 使用下面代碼
#$mysql_dir/mysqldump -u$mysql_user -p$mysql_password --apply-slave-statements --hex-blob --routines --lock-all-tables --databases $mysql_databases | gzip > $full_backup_dir/$today.sql.gz



#找出70天前備份的文件,而後刪除
echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"刪除10星期前的備份\n" >> $backup_dir/$log_file
for file in `find -not -type d -mtime +70`
do
    rm -rf $file
done

#基於ssh key認證,mysqldump的遠程mysql備份方案
#相關文章 http://liuxufei.com/weblog/weifenlei/868.html
copytoremote=1
remoteuser=
remoteip=
if [ $copytoremote = 1 ]; then
    if [ -z $remoteuser ];then
        echo -e "remote user not set,Copy to remote Failed ...\n" >> $log_file
        exit 1
    elif [ -z $remoteip ];then
        echo -e "remote ip not set,Copy to remote Failed ...\n" >> $log_file
        exit 2
    else
        echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"開始使用SSH備份數據文件到遠程服務器\n" >> $backup_dir/$log_file
        scp $today".sql.gz" remoteuser@remoteip:~/
    fi
fi

#設置ftp上傳備份文件到別的服務器備份,只有 copytoftp=1 時才進行 ftp 備份
copytoftp=1
ftp_server=
ftp_user=
ftp_passwd=

if [ $copytoftp = 1 ]; then
    if [ -z $ftp_server ];then
        echo -e "Ftp Server not set,Copy to Ftp Failed ...\n" >> $log_file
        exit 1
    elif [ -z $ftp_user ];then
        echo -e "Ftp user not set, Copy to Ftp Failed ...\n" >> $log_file
        exit 2
    elif [ -z $ftp_passwd ]; then
        echo -e "Ftp password not set, Copy to Ftp Failed ...\n" >> $log_file
        exit 3
    else
        echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"開始使用 FTP 備份數據文件到遠程服務器\n" >> $backup_dir/$log_file
        ftp -i -n <<end_ftp
        open $ftp_server
        user $ftp_user $ftp_passwd
        lcd $full_backup_dir
        hash
        prompt
        put $today.sql.gz
        close
        bye
        end_ftp
    fi
fi
echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"備份完成\n" >> $backup_dir/$log_file

    Contact GitHub API Training Shop Blog About 

    © 2016 GitHub, Inc. Terms Privacy Security Status Help
相關文章
相關標籤/搜索