首先需要安装这几个包:
mutt、uuencode、sendmail
脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #!/bin/bash #need 2 var if (($ # != 2)); then echo "need input [DBNamefile] [mode]" echo "mode -> 0, test DBNamefile read!" echo "mode -> 1, do DB bak!" exit ; fi if (($2 < 0 && $2 > 1)); then echo "err mode!" exit fi #filter some lines: # 1. pure tab line # 2. pure \r\n # 3. pure space line DBNameFilePath=$1 sed /^[[:space:]]*$ /d $DBNameFilePath > $DBNameFilePath ".tmp" #pre-info loop_count=0 bak_DBName_target=1 echo "DBNameFilePath: " $DBNameFilePath " <<<>>> DBNameFilePath_tmp: " $DBNameFilePath ".tmp" echo ============ output all db Name $( date + "%Y%m%d" ) ================== while read -r line do #echo $line bak_DBName_target[loop_count]=$line ((loop_count++)) done < $DBNameFilePath ".tmp" i=0 for ((;i<$loop_count && $loop_count>0;i++)) do echo ${bak_DBName_target[$i]} done echo "total - " $i echo ============ end ================== if (($2 == 0)); then echo "test over" exit ; fi if (($i<=0)); then echo "empty db name!" exit fi #do work i=0 for ((;i<$loop_count && $loop_count>0;i++)) do DBName_Tmp=${bak_DBName_target[$i]} DataBakName_tmp=Data_bak_${DBName_Tmp}_$( date + "%Y%m%d" ) #del db before 3 days rm -rf /home/backup/Data_ $( date -d -3day + "%Y%m%d" ). tar .gz #expory mysql db mysqldump -u root -ppassword $DBName_Tmp > /tmp/mysql_db_bak/ $DataBakName_tmp.sql #compact db file tar zcf /tmp/mysql_db_bak/ $DataBakName_tmp. tar .gz /tmp/mysql_db_bak/ $DataBakName_tmp.sql #del temporary sql rm -rf /tmp/mysql_db_bak/ $DataBakName_tmp.sql #Send mail mutt -s $DataBakName_tmp "email@163.com" -a /tmp/mysql_db_bak/ $DataBakName_tmp. tar .gz < mailbody.txt done |
上面脚本的用法是:
1 | . /a .sh 1.txt 0 |
1.txt是保存要备份数据库名称的文件。