歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> CentOS6.3下使用SHELL備份系統文件並實現郵件發送

CentOS6.3下使用SHELL備份系統文件並實現郵件發送

日期:2017/3/3 16:11:41   编辑:關於Linux

系統環境: CentOS6.3

MUTT: YUM默認源安裝

1.安裝MUTT郵件客戶端

# yum install mutt -y

2.創建腳本

# vi /etc/rc.d/mail_to_bak_daily.sh

(版本一)

------------------------------------------------------------

#!/bin/bash

# =========================================================

# 請輸入,你想讓備份數據放置到哪個獨立的目錄區

basedir=/backup/daily

# =========================================================

PATH=/bin:/usr/bin:/sbin:/usr/sbin::/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin;

export PATH

export LANG=C

# 定義數據庫信息

user=root

passwd=123456

# 定義mysql備份路徑

mysql_db_bak=$basedir/mysql_db_bak/$(date +%F_%H%M)

[ ! -d "$mysql_db_bak" ] && mkdir -p $mysql_db_bak

# 定義www備份路徑

www_src_bak=$basedir/www_src_bak/$(date +%F_%H%M)

[ ! -d "$www_src_bak" ] && mkdir -p $www_src_bak

# 定義郵件附件路徑

mail_attach_mysql=$mysql_db_bak/wordpress.sql

mail_attach_www=$www_src_bak/www.tar.bz2

# 定義郵件標題

mail_subject="www.example.com_daily_backup"

# 注:這裡的標題之間的字符不能有空格,如有空格會按照郵件名發出,例如[email protected],[email protected] 本例以下劃線代替

# 定義郵件內容

mail_content=/tmp/mail_content.txt

mail_code="send MySQL_BAK and WWW_SRC to you at $(date +%F_%H%M)"

# 定義郵件地址

mail_address="[email protected]"

# 1. 備份MySQL (數據庫目錄在/usr/local/mysql)

mysqldump -u $user -p$passwd --opt --skip-lock-tables --flush-logs --database wordpress > $mysql_db_bak/wordpress.sql

# 2.備份www源代碼:

cd /usr/local

tar -jpcf $www_src_bak/www.tar.bz2 www

# 3.郵件正文

cd /tmp

echo $mail_code > $mail_content

# 4.發送附件

cat $mail_content |mutt -s $mail_subject -a $mail_attach_mysql -a $mail_attach_www -- $mail_address

# 5.清除臨時文件

cd /tmp

rm -rf $mail_content

---------------------------------------------------------

(版本二) 推薦

注:此版本將附件分開發送,對郵箱同時發送多個大附件有收不到的幾率的情況,可按照如下版本重新配置

--------------------------------------------------------

#!/bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin::/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin;

export PATH

export LANG=C

# 系統文件備份路徑

basedir=/backup/daily

# 數據庫信息

user=root

passwd=123456

# 定義mysql備份路徑

mysql_db_bak=$basedir/mysql_db_bak/$(date +%F_%H%M)

if [ ! -d "$mysql_db_bak" ];

then

mkdir -p $mysql_db_bak

fi

# 定義www備份路徑

www_src_bak=$basedir/www_src_bak/$(date +%F_%H%M)

if [ ! -d "$www_src_bak" ];

then

mkdir -p $www_src_bak

 

fi

# 備份文件

mysql_bak=$mysql_db_bak/wordpress.sql.gz

www_bak=$www_src_bak/www.tar.bz2

# 定義備份文件作為附件的數組

all_bak=($mysql_bak $www_bak)

# 郵件標題

mail_subject="www.showerlee.com_daily_backup"

# 郵件內容

mail_content_mysql="send MySQL_BAK at $(date +%F_%H%M)"

mail_content_www="send WWW_SRC at $(date +%F_%H%M)"

# 定義內容數組

mail_content=("$mail_content_mysql" "$mail_content_www")

# 郵件地址

mail_address="[email protected]"

# 1. 備份MySQL (數據庫目錄在/usr/local/mysql)

mysqldump -u $user -p$passwd --opt --skip-lock-tables --flush-logs --database wordpress | gzip > $mysql_bak

# 2.備份www源代碼:

cd /usr/local

tar -jpcf $www_bak www

# 3.發送附件

for((i=0; i!=${#all_bak[@]}; ++i))

{

echo ${mail_content[i]} | mutt -s $mail_subject $mail_address -a ${all_bak[i]}

}

--------------------------------------------------------

注:如果報如下錯誤

------------------

postdrop: warning: uid=0: File too large

sendmail: fatal: root(0): message file too big

Error sending message, child exited 75 (Deferred.).

Could not send the message.

------------------

是由於超過系統默認發送附件大小,修改成如下大小即可(2G)

# postconf -e "message_size_limit = 2048000000"

# postconf -e "mailbox_size_limit = 2048000000"

3.執行腳本

# sh /etc/rc.d/mail_to_bak_daily.sh

注:可利用 tail -f /var/log/maillog 查看發送日志

4.測試結果如圖:

注:附件較大請耐心等待

作者:51cto博客 一路向北

Copyright © Linux教程網 All Rights Reserved